Add new cds-access-api proxies
[controller.git] / opendaylight / md-sal / cds-access-api / src / main / java / org / opendaylight / controller / cluster / access / concepts / AbstractMessageProxy.java
index 1cc091bdb28af6f2a5acdfa7c9b53a4b006f46ec..8b0912ff63670b23804681a003529907e6dc7cf3 100644 (file)
@@ -8,16 +8,10 @@
 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;
-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;
 
 /**
  * Abstract Externalizable proxy for use with {@link Message} subclasses.
@@ -27,40 +21,33 @@ import org.opendaylight.yangtools.concepts.WritableObjects;
  * @param <T> Target identifier type
  * @param <C> Message class
  */
-abstract class AbstractMessageProxy<T extends WritableIdentifier, C extends Message<T, C>> implements Externalizable {
-    @Serial
+abstract class AbstractMessageProxy<T extends WritableIdentifier, C extends Message<T, C>>
+        implements Message.SerialForm<T, C> {
+    @java.io.Serial
     private static final long serialVersionUID = 1L;
 
-    private T target;
-    private long sequence;
+    private C message;
 
     protected AbstractMessageProxy() {
         // For Externalizable
     }
 
     AbstractMessageProxy(final @NonNull C message) {
-        this.target = message.getTarget();
-        this.sequence = message.getSequence();
+        this.message = requireNonNull(message);
     }
 
     @Override
-    public void writeExternal(final ObjectOutput out) throws IOException {
-        target.writeTo(out);
-        WritableObjects.writeLong(out, sequence);
+    public final C message() {
+        return verifyNotNull(message);
     }
 
     @Override
-    public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
-        target = verifyNotNull(readTarget(in));
-        sequence = WritableObjects.readLong(in);
+    public final void setMessage(final C message) {
+        this.message = requireNonNull(message);
     }
 
-    @Serial
-    protected final Object readResolve() {
-        return verifyNotNull(createMessage(target, sequence));
+    @Override
+    public final Object readResolve() {
+        return message();
     }
-
-    protected abstract @NonNull T readTarget(@NonNull DataInput in) throws IOException;
-
-    abstract @NonNull C createMessage(@NonNull T msgTarget, long msgSequence);
 }