X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;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;hp=f2a1b9a6d28be29121910dd3371d2234a07d0499;hb=ae6c61499e2c7c76e0406ce397657cd31ddd4d3f;hpb=87c8362c7501408b281f5ddc9b78ed7440280fa1 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 f2a1b9a6d2..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,15 +10,33 @@ 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.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; /** - * Interface for reading {@link NormalizedNode}s, {@link YangInstanceIdentifier}s and {@link PathArgument}s. + * Interface for reading {@link NormalizedNode}s, {@link YangInstanceIdentifier}s, {@link PathArgument}s + * and {@link SchemaPath}s. */ @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. * @@ -26,9 +44,44 @@ 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; + + /** + * Return the version of the underlying input stream. + * + * @return Stream version + * @throws IOException if the version cannot be ascertained + */ + NormalizedNodeStreamVersion getVersion() throws IOException; + + default Optional> readOptionalNormalizedNode() throws IOException { + return readBoolean() ? Optional.of(readNormalizedNode()) : Optional.empty(); + } }