X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fnode%2Futils%2Ftransformer%2FAbstractNormalizedNodePruner.java;h=f0ef49645a66954b4e15f5d393c1abe40be9ec7a;hb=a0025465e4951c9a0521feb07af697ec4aa8d2aa;hp=a6d8801d77b797f1cb850a73eb2c05dac8cd5ab5;hpb=bb86472bd5abf18630abe60eaf3f20becd013fed;p=controller.git diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/AbstractNormalizedNodePruner.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/AbstractNormalizedNodePruner.java index a6d8801d77..f0ef49645a 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/AbstractNormalizedNodePruner.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/AbstractNormalizedNodePruner.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.cluster.datastore.node.utils.transformer; import static com.google.common.base.Preconditions.checkState; +import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; import java.io.IOException; @@ -44,13 +45,13 @@ abstract class AbstractNormalizedNodePruner implements NormalizedNodeStreamWrite } @FunctionalInterface - private interface WriterMethod { + interface WriterMethod { void apply(ReusableImmutableNormalizedNodeStreamWriter writer, T name) throws IOException; } @FunctionalInterface - private interface SizedWriterMethod { + interface SizedWriterMethod { void apply(ReusableImmutableNormalizedNodeStreamWriter writer, T name, int childSizeHint) throws IOException; } @@ -63,12 +64,10 @@ abstract class AbstractNormalizedNodePruner implements NormalizedNodeStreamWrite private final DataSchemaContextTree tree; private DataSchemaContextNode nodePathSchemaNode; + private NormalizedNode normalizedNode; private State state = State.UNITIALIZED; private int unknown; - // FIXME: package-private to support unguarded NormalizedNodePruner access - NormalizedNode normalizedNode; - AbstractNormalizedNodePruner(final DataSchemaContextTree tree) { this.tree = requireNonNull(tree); } @@ -91,17 +90,17 @@ abstract class AbstractNormalizedNodePruner implements NormalizedNodeStreamWrite } @Override - public void startLeafNode(final NodeIdentifier name) throws IOException { + public final void startLeafNode(final NodeIdentifier name) throws IOException { enter(ReusableImmutableNormalizedNodeStreamWriter::startLeafNode, name); } @Override - public void startLeafSet(final NodeIdentifier name, final int childSizeHint) throws IOException { + public final void startLeafSet(final NodeIdentifier name, final int childSizeHint) throws IOException { enter(ReusableImmutableNormalizedNodeStreamWriter::startLeafSet, name, childSizeHint); } @Override - public void startOrderedLeafSet(final NodeIdentifier name, final int childSizeHint) throws IOException { + public final void startOrderedLeafSet(final NodeIdentifier name, final int childSizeHint) throws IOException { enter(ReusableImmutableNormalizedNodeStreamWriter::startOrderedLeafSet, name, childSizeHint); } @@ -111,28 +110,28 @@ abstract class AbstractNormalizedNodePruner implements NormalizedNodeStreamWrite } @Override - public void startContainerNode(final NodeIdentifier name, final int childSizeHint) throws IOException { + public final void startContainerNode(final NodeIdentifier name, final int childSizeHint) throws IOException { enter(ReusableImmutableNormalizedNodeStreamWriter::startContainerNode, name, childSizeHint); } @Override - public void startYangModeledAnyXmlNode(final NodeIdentifier nodeIdentifier, final int count) { + public final void startYangModeledAnyXmlNode(final NodeIdentifier nodeIdentifier, final int count) { // FIXME: implement this throw new UnsupportedOperationException("Not implemented yet"); } @Override - public void startUnkeyedList(final NodeIdentifier name, final int childSizeHint) throws IOException { + public final void startUnkeyedList(final NodeIdentifier name, final int childSizeHint) throws IOException { enter(ReusableImmutableNormalizedNodeStreamWriter::startUnkeyedList, name, childSizeHint); } @Override - public void startUnkeyedListItem(final NodeIdentifier name, final int childSizeHint) throws IOException { + public final void startUnkeyedListItem(final NodeIdentifier name, final int childSizeHint) throws IOException { enter(ReusableImmutableNormalizedNodeStreamWriter::startUnkeyedListItem, name, childSizeHint); } @Override - public void startMapNode(final NodeIdentifier name, final int childSizeHint) throws IOException { + public final void startMapNode(final NodeIdentifier name, final int childSizeHint) throws IOException { enter(ReusableImmutableNormalizedNodeStreamWriter::startMapNode, name, childSizeHint); } @@ -143,27 +142,37 @@ abstract class AbstractNormalizedNodePruner implements NormalizedNodeStreamWrite } @Override - public void startOrderedMapNode(final NodeIdentifier name, final int childSizeHint) throws IOException { + public final void startOrderedMapNode(final NodeIdentifier name, final int childSizeHint) throws IOException { enter(ReusableImmutableNormalizedNodeStreamWriter::startOrderedMapNode, name, childSizeHint); } @Override - public void startChoiceNode(final NodeIdentifier name, final int childSizeHint) throws IOException { + public final void startChoiceNode(final NodeIdentifier name, final int childSizeHint) throws IOException { enter(ReusableImmutableNormalizedNodeStreamWriter::startChoiceNode, name, childSizeHint); } @Override - public void startAugmentationNode(final AugmentationIdentifier identifier) throws IOException { + public final void startAugmentationNode(final AugmentationIdentifier identifier) throws IOException { enter(ReusableImmutableNormalizedNodeStreamWriter::startAugmentationNode, identifier); } @Override - public void startAnyxmlNode(final NodeIdentifier name) throws IOException { - enter(ReusableImmutableNormalizedNodeStreamWriter::startAnyxmlNode, name); + public final boolean startAnyxmlNode(final NodeIdentifier name, final Class objectModel) throws IOException { + if (enter(name)) { + verify(delegate.startAnyxmlNode(name, objectModel), + "Unexpected failure to stream DOMSource node %s model %s", name, objectModel); + } + return true; } @Override - public void domSourceValue(final DOMSource value) throws IOException { + public final boolean startAnydataNode(final NodeIdentifier name, final Class objectModel) throws IOException { + // FIXME: we do not support anydata nodes yet + return false; + } + + @Override + public final void domSourceValue(final DOMSource value) throws IOException { checkNotSealed(); if (unknown == 0) { delegate.domSourceValue(value); @@ -171,15 +180,20 @@ abstract class AbstractNormalizedNodePruner implements NormalizedNodeStreamWrite } @Override - public void scalarValue(final Object value) throws IOException { + public final void scalarValue(final Object value) throws IOException { checkNotSealed(); if (unknown == 0) { - delegate.scalarValue(value); + delegate.scalarValue(translateScalar(currentSchema(), value)); } } + Object translateScalar(final DataSchemaContextNode context, final Object value) throws IOException { + // Default is pass-through + return value; + } + @Override - public void endNode() throws IOException { + public final void endNode() throws IOException { checkNotSealed(); if (unknown == 0) { @@ -204,14 +218,14 @@ abstract class AbstractNormalizedNodePruner implements NormalizedNodeStreamWrite } @Override - public void close() throws IOException { + public final void close() throws IOException { state = State.CLOSED; stack.clear(); delegate.close(); } @Override - public void flush() throws IOException { + public final void flush() throws IOException { delegate.flush(); } @@ -240,7 +254,7 @@ abstract class AbstractNormalizedNodePruner implements NormalizedNodeStreamWrite } final DataSchemaContextNode schema; - final DataSchemaContextNode parent = stack.peek(); + final DataSchemaContextNode parent = currentSchema(); if (parent != null) { schema = parent.getChild(name); } else { @@ -261,16 +275,20 @@ abstract class AbstractNormalizedNodePruner implements NormalizedNodeStreamWrite return true; } - private void enter(final WriterMethod method, final A name) throws IOException { + final void enter(final WriterMethod method, final A name) throws IOException { if (enter(name)) { method.apply(delegate, name); } } - private void enter(final SizedWriterMethod method, final A name, final int size) + final void enter(final SizedWriterMethod method, final A name, final int size) throws IOException { if (enter(name)) { method.apply(delegate, name, size); } } + + final DataSchemaContextNode currentSchema() { + return stack.peek(); + } }