atomic-storage: remove type dependency at segment level I/O
[controller.git] / opendaylight / md-sal / sal-remoterpc-connector / src / main / java / org / opendaylight / controller / remote / rpc / registry / ActionRoutingTable.java
index af9a55fe62328229ae14092bf041c927da9ecca2..5ca5a71545dd11df9f46b48227c5ea9d38a75684 100644 (file)
@@ -13,18 +13,21 @@ import akka.serialization.Serialization;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.Externalizable;
 import java.io.IOException;
+import java.io.InvalidObjectException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
-import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeDataOutput;
-import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputOutput;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMActionInstance;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataInput;
+import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataOutput;
+import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeStreamVersion;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -54,13 +57,12 @@ public final class ActionRoutingTable extends AbstractRoutingTable<ActionRouting
             LOG.debug("serializing ActionRoutingTable.");
             out.writeObject(Serialization.serializedActorPath(opsInvoker));
 
-            final NormalizedNodeDataOutput nnout = NormalizedNodeInputOutput.newDataOutput(out);
+            final NormalizedNodeDataOutput nnout = NormalizedNodeStreamVersion.current().newDataOutput(out);
             nnout.writeInt(actions.size());
             for (DOMActionInstance id : actions) {
-                nnout.writeSchemaPath(id.getType());
-                YangInstanceIdentifier actionPath = YangInstanceIdentifier.create(
-                        new YangInstanceIdentifier.NodeIdentifier(id.getType().getLastComponent()));
-                nnout.writeYangInstanceIdentifier(actionPath);
+                final Absolute type = id.getType();
+                nnout.writeSchemaNodeIdentifier(type);
+                nnout.writeYangInstanceIdentifier(YangInstanceIdentifier.of(type.lastNodeIdentifier()));
             }
         }
 
@@ -73,7 +75,12 @@ public final class ActionRoutingTable extends AbstractRoutingTable<ActionRouting
             final int size = nnin.readInt();
             actions = new ArrayList<>(size);
             for (int i = 0; i < size; ++i) {
-                actions.add(DOMActionInstance.of(nnin.readSchemaPath(), LogicalDatastoreType.OPERATIONAL,
+                final SchemaNodeIdentifier sni = nnin.readSchemaNodeIdentifier();
+                if (!(sni instanceof Absolute absolute)) {
+                    throw new InvalidObjectException("Non-absolute type " + sni);
+                }
+
+                actions.add(DOMActionInstance.of(absolute, LogicalDatastoreType.OPERATIONAL,
                         nnin.readYangInstanceIdentifier()));
             }
         }