Remove ABIVersion.MAGNESIUM
[controller.git] / opendaylight / md-sal / cds-access-api / src / main / java / org / opendaylight / controller / cluster / access / commands / RTS.java
index bcf09f80ba8b5be73a946d1fe151f3fbb62b9ea2..2c808349ea2cea55013f9fc58e707b3da629ba8f 100644 (file)
@@ -10,11 +10,19 @@ package org.opendaylight.controller.cluster.access.commands;
 import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Optional;
+import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataInput;
+
 /**
  * Externalizable proxy for use with {@link ReadTransactionSuccess}. It implements the Chlorine SR2 serialization
  * format.
  */
-final class RTS implements ReadTransactionSuccess.SerialForm {
+final class RTS implements TransactionSuccess.SerialForm<ReadTransactionSuccess> {
     @java.io.Serial
     private static final long serialVersionUID = 1L;
 
@@ -39,6 +47,33 @@ final class RTS implements ReadTransactionSuccess.SerialForm {
         this.message = requireNonNull(message);
     }
 
+    @Override
+    public ReadTransactionSuccess readExternal(final ObjectInput in, final TransactionIdentifier target,
+            final long sequence) throws IOException {
+        final Optional<NormalizedNode> data;
+        if (in.readBoolean()) {
+            data = Optional.of(NormalizedNodeDataInput.newDataInput(in).readNormalizedNode());
+        } else {
+            data = Optional.empty();
+        }
+        return new ReadTransactionSuccess(target, sequence, data);
+    }
+
+    @Override
+    public void writeExternal(final ObjectOutput out, final ReadTransactionSuccess msg) throws IOException {
+        TransactionSuccess.SerialForm.super.writeExternal(out, msg);
+
+        final var data = msg.getData();
+        if (data.isPresent()) {
+            out.writeBoolean(true);
+            try (var nnout = msg.getVersion().getStreamVersion().newDataOutput(out)) {
+                nnout.writeNormalizedNode(data.orElseThrow());
+            }
+        } else {
+            out.writeBoolean(false);
+        }
+    }
+
     @Override
     public Object readResolve() {
         return message();