X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fnode%2Futils%2Fstream%2FNormalizedNodeDataInput.java;h=8d05061e63ac816af10af1306f1c18fe7d27c9cf;hb=9112031a13f4bc73ea5504da290ddeca0f7d2c17;hp=93eb55cc8e07b388a3865c9ae39cd8e966d0e25e;hpb=657b0b025a92f9d0ad6647d79950071031d7b0b4;p=controller.git diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeDataInput.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeDataInput.java index 93eb55cc8e..8d05061e63 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeDataInput.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeDataInput.java @@ -10,9 +10,15 @@ package org.opendaylight.controller.cluster.datastore.node.utils.stream; import com.google.common.annotations.Beta; import java.io.DataInput; import java.io.IOException; +import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; +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.api.schema.stream.ReusableStreamReceiver; +import org.opendaylight.yangtools.yang.data.impl.schema.ReusableImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.SchemaPath; /** @@ -21,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. * @@ -28,10 +44,31 @@ 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 { + return readNormalizedNode(ReusableImmutableNormalizedNodeStreamWriter.create()); + } + + /** + * Read a normalized node from the reader, using specified writer to construct the result. + * + * @param receiver Reusable receiver to, expected to be reset + * @return Next node from the stream, or null if end of stream has been reached. + * @throws IOException if an error occurs + * @throws IllegalStateException if the dictionary has been detached + */ + default NormalizedNode readNormalizedNode(final ReusableStreamReceiver receiver) throws IOException { + try { + streamNormalizedNode(receiver); + return receiver.getResult(); + } finally { + receiver.reset(); + } + } YangInstanceIdentifier readYangInstanceIdentifier() throws IOException; + @NonNull QName readQName() throws IOException; + PathArgument readPathArgument() throws IOException; SchemaPath readSchemaPath() throws IOException; @@ -43,4 +80,8 @@ public interface NormalizedNodeDataInput extends DataInput { * @throws IOException if the version cannot be ascertained */ NormalizedNodeStreamVersion getVersion() throws IOException; + + default Optional> readOptionalNormalizedNode() throws IOException { + return readBoolean() ? Optional.of(readNormalizedNode()) : Optional.empty(); + } }