Add streaming interface to NormalizedNodeDataInput
[controller.git] / opendaylight / md-sal / sal-clustering-commons / src / main / java / org / opendaylight / controller / cluster / datastore / node / utils / stream / NormalizedNodeDataInput.java
index 37152f32e9c0c723251e78ea3b29f0a1f078f20c..9dda8bf6e47f5c1664b1060d7cc085196f6a64fa 100644 (file)
@@ -16,6 +16,9 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
+import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
 /**
@@ -24,6 +27,16 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath;
  */
 @Beta
 public interface NormalizedNodeDataInput extends DataInput {
+    /**
+     * Interpret current stream position as a NormalizedNode, stream its events into a NormalizedNodeStreamWriter.
+     *
+     * @param writer Writer to emit events to
+     * @throws IOException if an error occurs
+     * @throws IllegalStateException if the dictionary has been detached
+     * @throws NullPointerException if {@code writer} is null
+     */
+    void streamNormalizedNode(NormalizedNodeStreamWriter writer) throws IOException;
+
     /**
      * Read a normalized node from the reader.
      *
@@ -31,7 +44,13 @@ public interface NormalizedNodeDataInput extends DataInput {
      * @throws IOException if an error occurs
      * @throws IllegalStateException if the dictionary has been detached
      */
-    NormalizedNode<?, ?> readNormalizedNode() throws IOException;
+    default NormalizedNode<?, ?> readNormalizedNode() throws IOException {
+        final NormalizedNodeResult result = new NormalizedNodeResult();
+        try (NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(result)) {
+            streamNormalizedNode(writer);
+        }
+        return result.getResult();
+    }
 
     YangInstanceIdentifier readYangInstanceIdentifier() throws IOException;