X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fcds-access-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Faccess%2Fconcepts%2FMemberName.java;h=47af6b3b1ebd01395aaeb1fd10e0183d29111398;hb=30ea4cdba4f2fc009be72e393a5091c837185ab9;hp=2404924c640b68970dda49578527b33de974035a;hpb=139f7a412c8d96fa9d03113439d622c30218c7ce;p=controller.git diff --git a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/MemberName.java b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/MemberName.java index 2404924c64..47af6b3b1e 100644 --- a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/MemberName.java +++ b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/MemberName.java @@ -20,7 +20,6 @@ import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; -import java.io.Serial; import java.nio.charset.StandardCharsets; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.WritableIdentifier; @@ -29,11 +28,36 @@ import org.opendaylight.yangtools.concepts.WritableIdentifier; * Type-safe encapsulation of a cluster member name. */ public final class MemberName implements Comparable, WritableIdentifier { - private static final class Proxy implements Externalizable { - @Serial + interface SerialForm extends Externalizable { + @NonNull MemberName name(); + + void setName(@NonNull MemberName name); + + @java.io.Serial + Object readResolve(); + + @Override + default void writeExternal(final ObjectOutput out) throws IOException { + final var serialized = name().getSerialized(); + out.writeInt(serialized.length); + out.write(serialized); + } + + @Override + default void readExternal(final ObjectInput in) throws IOException { + final var serialized = new byte[in.readInt()]; + in.readFully(serialized); + // TODO: consider caching instances here + setName(new MemberName(new String(serialized, StandardCharsets.UTF_8), serialized)); + } + } + + @Deprecated(since = "7.0.0", forRemoval = true) + private static final class Proxy implements SerialForm { + @java.io.Serial private static final long serialVersionUID = 1L; - private byte[] serialized; + private MemberName name; // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to // be able to create instances via reflection. @@ -42,29 +66,27 @@ public final class MemberName implements Comparable, WritableIdentif // For Externalizable } - Proxy(final byte[] serialized) { - this.serialized = requireNonNull(serialized); + Proxy(final MemberName name) { + this.name = requireNonNull(name); } @Override - public void writeExternal(final ObjectOutput out) throws IOException { - out.writeInt(serialized.length); - out.write(serialized); + public MemberName name() { + return verifyNotNull(name); } @Override - public void readExternal(final ObjectInput in) throws IOException { - serialized = new byte[in.readInt()]; - in.readFully(serialized); + public void setName(final MemberName name) { + this.name = requireNonNull(name); } - private Object readResolve() { - // TODO: consider caching instances here - return new MemberName(new String(serialized, StandardCharsets.UTF_8), serialized); + @Override + public Object readResolve() { + return name(); } } - @Serial + @java.io.Serial private static final long serialVersionUID = 1L; private final @NonNull String name; @@ -140,7 +162,8 @@ public final class MemberName implements Comparable, WritableIdentif return local; } + @java.io.Serial Object writeReplace() { - return new Proxy(getSerialized()); + return new MN(this); } }