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=57d41d58354a916e401ae1e2424b1db167386ddb;hb=fba327c801062a6e802f212a0e8b6efee2f6a90e;hp=a37d56507a3ff45ee1df85d5615aa1775cade1a9;hpb=bc6aa356568dac2dca17cfce807df1e2a947e5bf;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 a37d56507a..57d41d5835 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,34 @@ 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.impl.schema.ImmutableNormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +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 +45,49 @@ 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(); + } + + /** + * Read a normalized node from the reader, using specified writer to construct the result. + * + * @param writer Reusable writer to + * @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 ReusableImmutableNormalizedNodeStreamWriter writer) + throws IOException { + try { + streamNormalizedNode(writer); + return writer.getResult(); + } finally { + writer.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(); + } }