Add new cds-access-api proxies
[controller.git] / opendaylight / md-sal / cds-access-api / src / main / java / org / opendaylight / controller / cluster / access / concepts / TransactionIdentifier.java
index 29edfe8fda05861a6af1a44b274924b273a89210..b03e2cd5c34e0a2ddf468e49c4e8b16376f35f4b 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 org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.concepts.WritableIdentifier;
 import org.opendaylight.yangtools.concepts.WritableObjects;
@@ -24,12 +24,32 @@ import org.opendaylight.yangtools.concepts.WritableObjects;
  * Globally-unique identifier of a transaction.
  */
 public final class TransactionIdentifier implements WritableIdentifier {
-    private static final class Proxy implements Externalizable {
-        @Serial
+    interface SerialForm extends Externalizable {
+        @NonNull TransactionIdentifier identifier();
+
+        void setIdentifier(@NonNull TransactionIdentifier identifier);
+
+        @java.io.Serial
+        Object readResolve();
+
+        @Override
+        default void readExternal(final ObjectInput in) throws IOException {
+            setIdentifier(new TransactionIdentifier(LocalHistoryIdentifier.readFrom(in), WritableObjects.readLong(in)));
+        }
+
+        @Override
+        default void writeExternal(final ObjectOutput out) throws IOException {
+            final var id = identifier();
+            id.getHistoryId().writeTo(out);
+            WritableObjects.writeLong(out, id.getTransactionId());
+        }
+    }
+
+    private static final class Proxy implements SerialForm {
+        @java.io.Serial
         private static final long serialVersionUID = 1L;
 
-        private LocalHistoryIdentifier historyId;
-        private long transactionId;
+        private TransactionIdentifier 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 TransactionIdentifier implements WritableIdentifier {
             // For Externalizable
         }
 
-        Proxy(final LocalHistoryIdentifier historyId, final long transactionId) {
-            this.historyId = requireNonNull(historyId);
-            this.transactionId = transactionId;
+        Proxy(final TransactionIdentifier identifier) {
+            this.identifier = requireNonNull(identifier);
         }
 
         @Override
-        public void writeExternal(final ObjectOutput out) throws IOException {
-            historyId.writeTo(out);
-            WritableObjects.writeLong(out, transactionId);
+        public @NonNull TransactionIdentifier identifier() {
+            return verifyNotNull(identifier);
         }
 
         @Override
-        public void readExternal(final ObjectInput in) throws IOException {
-            historyId = LocalHistoryIdentifier.readFrom(in);
-            transactionId = WritableObjects.readLong(in);
+        public void setIdentifier(final TransactionIdentifier identifier) {
+            this.identifier = requireNonNull(identifier);
         }
 
-        @Serial
-        private Object readResolve() {
-            return new TransactionIdentifier(historyId, transactionId);
+        @Override
+        public Object readResolve() {
+            return identifier();
         }
     }
 
-    @Serial
+    @java.io.Serial
     private static final long serialVersionUID = 1L;
 
     private final @NonNull LocalHistoryIdentifier historyId;
@@ -120,8 +137,8 @@ public final class TransactionIdentifier implements WritableIdentifier {
         return toShortString();
     }
 
-    @Serial
+    @java.io.Serial
     private Object writeReplace() {
-        return new Proxy(historyId, transactionId);
+        return new Proxy(this);
     }
 }