Add new cds-access-api proxies
[controller.git] / opendaylight / md-sal / cds-access-api / src / main / java / org / opendaylight / controller / cluster / access / concepts / ClientIdentifier.java
index d62b59384562e85b9bc9bdbb8db5b1976aae15e6..fc8a2a4954ee9e51dbf64eb18a9e476caac310bc 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 com.google.common.base.MoreObjects;
@@ -16,7 +17,6 @@ import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
-import java.io.Serial;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.cds.types.rev191024.ClientGeneration;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
@@ -26,16 +26,34 @@ import org.opendaylight.yangtools.yang.common.Uint64;
 /**
  * A cluster-wide unique identifier of a frontend instance. This identifier discerns between individual incarnations
  * of a particular frontend.
- *
- * @author Robert Varga
  */
 public final class ClientIdentifier implements WritableIdentifier {
-    private static final class Proxy implements Externalizable {
-        @Serial
+    interface SerialForm extends Externalizable {
+        @NonNull ClientIdentifier identifier();
+
+        void setIdentifier(@NonNull ClientIdentifier identifier);
+
+        @java.io.Serial
+        Object readResolve();
+
+        @Override
+        default void readExternal(final ObjectInput in) throws IOException {
+            setIdentifier(new ClientIdentifier(FrontendIdentifier.readFrom(in), WritableObjects.readLong(in)));
+        }
+
+        @Override
+        default void writeExternal(final ObjectOutput out) throws IOException {
+            final var id = identifier();
+            id.getFrontendId().writeTo(out);
+            WritableObjects.writeLong(out, id.getGeneration());
+        }
+    }
+
+    private static final class Proxy implements SerialForm {
+        @java.io.Serial
         private static final long serialVersionUID = 1L;
 
-        private FrontendIdentifier frontendId;
-        private long generation;
+        private ClientIdentifier identifier;
 
         // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to
         // be able to create instances via reflection.
@@ -44,30 +62,27 @@ public final class ClientIdentifier implements WritableIdentifier {
             // Needed for Externalizable
         }
 
-        Proxy(final FrontendIdentifier frontendId, final long generation) {
-            this.frontendId = requireNonNull(frontendId);
-            this.generation = generation;
+        Proxy(final ClientIdentifier identifier) {
+            this.identifier = requireNonNull(identifier);
         }
 
         @Override
-        public void writeExternal(final ObjectOutput out) throws IOException {
-            frontendId.writeTo(out);
-            WritableObjects.writeLong(out, generation);
+        public ClientIdentifier identifier() {
+            return verifyNotNull(identifier);
         }
 
         @Override
-        public void readExternal(final ObjectInput in) throws IOException {
-            frontendId = FrontendIdentifier.readFrom(in);
-            generation = WritableObjects.readLong(in);
+        public void setIdentifier(final ClientIdentifier identifier) {
+            this.identifier = requireNonNull(identifier);
         }
 
-        @Serial
-        private Object readResolve() {
-            return new ClientIdentifier(frontendId, generation);
+        @Override
+        public Object readResolve() {
+            return identifier();
         }
     }
 
-    @Serial
+    @java.io.Serial
     private static final long serialVersionUID = 1L;
 
     private final @NonNull FrontendIdentifier frontendId;
@@ -125,8 +140,8 @@ public final class ClientIdentifier implements WritableIdentifier {
             .toString();
     }
 
-    @Serial
+    @java.io.Serial
     private Object writeReplace() {
-        return new Proxy(frontendId, generation);
+        return new Proxy(this);
     }
 }