Add new cds-access-api proxies
[controller.git] / opendaylight / md-sal / cds-access-api / src / main / java / org / opendaylight / controller / cluster / access / concepts / AbstractEnvelopeProxy.java
index c4d100a560afaf388b99649945e7c9d4fd64add1..a97a3f0aadc7fc456df96a0bbaaa3fa3cbd943cd 100644 (file)
@@ -7,51 +7,36 @@
  */
 package org.opendaylight.controller.cluster.access.concepts;
 
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.io.Serial;
-import org.opendaylight.yangtools.concepts.WritableObjects;
-
-abstract class AbstractEnvelopeProxy<T extends Message<?, ?>> implements Externalizable {
-    @Serial
+import static com.google.common.base.Verify.verifyNotNull;
+import static java.util.Objects.requireNonNull;
+
+abstract class AbstractEnvelopeProxy<T extends Message<?, ?>, E extends Envelope<T>>
+        implements Envelope.SerialForm<T, E> {
+    @java.io.Serial
     private static final long serialVersionUID = 1L;
 
-    private T message;
-    private long sessionId;
-    private long txSequence;
+    private E envelope;
 
     AbstractEnvelopeProxy() {
         // for Externalizable
     }
 
-    AbstractEnvelopeProxy(final Envelope<T> envelope) {
-        message = envelope.getMessage();
-        txSequence = envelope.getTxSequence();
-        sessionId = envelope.getSessionId();
+    AbstractEnvelopeProxy(final E envelope) {
+        this.envelope = requireNonNull(envelope);
     }
 
     @Override
-    public void writeExternal(final ObjectOutput out) throws IOException {
-        WritableObjects.writeLongs(out, sessionId, txSequence);
-        out.writeObject(message);
+    public final E envelope() {
+        return verifyNotNull(envelope);
     }
 
-    @SuppressWarnings("unchecked")
     @Override
-    public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
-        final byte header = WritableObjects.readLongHeader(in);
-        sessionId = WritableObjects.readFirstLong(in, header);
-        txSequence = WritableObjects.readSecondLong(in, header);
-        message = (T) in.readObject();
+    public final void setEnvelope(final E envelope) {
+        this.envelope = requireNonNull(envelope);
     }
 
-    @SuppressWarnings("checkstyle:hiddenField")
-    abstract Envelope<T> createEnvelope(T wrappedNessage, long sessionId, long txSequence);
-
-    @Serial
-    final Object readResolve() {
-        return createEnvelope(message, sessionId, txSequence);
+    @Override
+    public final Object readResolve() {
+        return envelope();
     }
 }