Add new cds-access-api proxies
[controller.git] / opendaylight / md-sal / cds-access-api / src / main / java / org / opendaylight / controller / cluster / access / concepts / FrontendIdentifier.java
index 5afaa115b02ba7059e5aa793134057f38533ab2a..933aa16c79cbea78ba87f7120f02b9ecebc2dd53 100644 (file)
@@ -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);
     }
 }