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%2FFrontendIdentifier.java;fp=opendaylight%2Fmd-sal%2Fcds-access-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Faccess%2Fconcepts%2FFrontendIdentifier.java;h=933aa16c79cbea78ba87f7120f02b9ecebc2dd53;hb=d92bd0e575983b3d6a09a73089ef8f9c62f94eaa;hp=5afaa115b02ba7059e5aa793134057f38533ab2a;hpb=e085f22bb1934959f9d6f7f4368c1afe964b1e07;p=controller.git diff --git a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/FrontendIdentifier.java b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/FrontendIdentifier.java index 5afaa115b0..933aa16c79 100644 --- a/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/FrontendIdentifier.java +++ b/opendaylight/md-sal/cds-access-api/src/main/java/org/opendaylight/controller/cluster/access/concepts/FrontendIdentifier.java @@ -7,6 +7,7 @@ */ package org.opendaylight.controller.cluster.access.concepts; +import static com.google.common.base.Verify.verifyNotNull; import static java.util.Objects.requireNonNull; import java.io.DataInput; @@ -15,7 +16,6 @@ import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; -import java.io.Serial; import java.util.Objects; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.WritableIdentifier; @@ -24,12 +24,32 @@ import org.opendaylight.yangtools.concepts.WritableIdentifier; * A cluster-wide unique identifier of a frontend type located at a cluster member. */ public final class FrontendIdentifier implements WritableIdentifier { - private static final class Proxy implements Externalizable { - @Serial + interface SerialForm extends Externalizable { + @NonNull FrontendIdentifier identifier(); + + void setIdentifier(@NonNull FrontendIdentifier identifier); + + @java.io.Serial + Object readResolve(); + + @Override + default void writeExternal(final ObjectOutput out) throws IOException { + final var id = identifier(); + id.memberName.writeTo(out); + id.clientType.writeTo(out); + } + + @Override + default void readExternal(final ObjectInput in) throws IOException { + setIdentifier(new FrontendIdentifier(MemberName.readFrom(in), FrontendType.readFrom(in))); + } + } + + private static final class Proxy implements SerialForm { + @java.io.Serial private static final long serialVersionUID = 1L; - private MemberName memberName; - private FrontendType clientType; + private FrontendIdentifier identifier; // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to // be able to create instances via reflection. @@ -38,30 +58,27 @@ public final class FrontendIdentifier implements WritableIdentifier { // Needed for Externalizable } - Proxy(final MemberName memberName, final FrontendType clientType) { - this.memberName = requireNonNull(memberName); - this.clientType = requireNonNull(clientType); + Proxy(final FrontendIdentifier identifier) { + this.identifier = requireNonNull(identifier); } @Override - public void writeExternal(final ObjectOutput out) throws IOException { - memberName.writeTo(out); - clientType.writeTo(out); + public FrontendIdentifier identifier() { + return verifyNotNull(identifier); } @Override - public void readExternal(final ObjectInput in) throws IOException { - memberName = MemberName.readFrom(in); - clientType = FrontendType.readFrom(in); + public void setIdentifier(final FrontendIdentifier identifier) { + this.identifier = requireNonNull(identifier); } - @Serial - private Object readResolve() { - return new FrontendIdentifier(memberName, clientType); + @Override + public Object readResolve() { + return identifier(); } } - @Serial + @java.io.Serial private static final long serialVersionUID = 1L; private final MemberName memberName; @@ -116,8 +133,8 @@ public final class FrontendIdentifier implements WritableIdentifier { return toPersistentId(); } - @Serial + @java.io.Serial private Object writeReplace() { - return new Proxy(memberName, clientType); + return new Proxy(this); } }