From f7fe89b85f540dbe7d1fc051f2082f2ce571321a Mon Sep 17 00:00:00 2001 From: Tom Pantelis Date: Thu, 21 Jan 2016 10:35:29 -0500 Subject: [PATCH] Bug 5019: Add QName param to NormalizedNodeWriter#leafSetEntryNode NormalizedNodeWriter allows us to emit a single LeafSetEntryNode, which breaks assumptions in NormalizedNodeStreamWriter -- specifically that the receiver has seen its parent LeafsetNode. In this case this is not true, so we need to supply the QName to pass down the identity of the entry. Change-Id: I45187800c62ec36b276724d230a922634c556a9b Signed-off-by: Tom Pantelis Signed-off-by: Robert Varga (cherry picked from commit d9193a3ec0a76392097f04d14d0547a7c00d5d27) --- ...ForwardingNormalizedNodeStreamAttributeWriter.java | 4 ++-- .../stream/ForwardingNormalizedNodeStreamWriter.java | 5 +++-- .../stream/LoggingNormalizedNodeStreamWriter.java | 3 ++- .../stream/NormalizedNodeStreamAttributeWriter.java | 2 +- .../api/schema/stream/NormalizedNodeStreamWriter.java | 11 +++++++---- .../data/api/schema/stream/NormalizedNodeWriter.java | 6 ++++-- .../codec/gson/JSONNormalizedNodeStreamWriter.java | 3 ++- .../codec/gson/LeafListEntryNodeDataWithSchema.java | 2 +- .../xml/XMLStreamNormalizedNodeStreamWriter.java | 4 ++-- .../schema/ImmutableNormalizedNodeStreamWriter.java | 5 +++-- .../transform/QNameTransformingStreamWriter.java | 4 ++-- 11 files changed, 29 insertions(+), 20 deletions(-) diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ForwardingNormalizedNodeStreamAttributeWriter.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ForwardingNormalizedNodeStreamAttributeWriter.java index 92d96857be..08104f8c06 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ForwardingNormalizedNodeStreamAttributeWriter.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ForwardingNormalizedNodeStreamAttributeWriter.java @@ -24,8 +24,8 @@ public abstract class ForwardingNormalizedNodeStreamAttributeWriter extends Forw } @Override - public void leafSetEntryNode(final Object value, final Map attributes) throws IOException { - delegate().leafSetEntryNode(value, attributes); + public void leafSetEntryNode(final QName name, final Object value, final Map attributes) throws IOException { + delegate().leafSetEntryNode(name, value, attributes); } @Override diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ForwardingNormalizedNodeStreamWriter.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ForwardingNormalizedNodeStreamWriter.java index 60e8abfbe3..7377b34eb6 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ForwardingNormalizedNodeStreamWriter.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ForwardingNormalizedNodeStreamWriter.java @@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.data.api.schema.stream; import com.google.common.collect.ForwardingObject; import java.io.IOException; +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -33,8 +34,8 @@ public abstract class ForwardingNormalizedNodeStreamWriter extends ForwardingObj } @Override - public void leafSetEntryNode(final Object value) throws IOException { - delegate().leafSetEntryNode(value); + public void leafSetEntryNode(final QName name, final Object value) throws IOException { + delegate().leafSetEntryNode(name, value); } @Override diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/LoggingNormalizedNodeStreamWriter.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/LoggingNormalizedNodeStreamWriter.java index 121a654a5e..b6bb7a941c 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/LoggingNormalizedNodeStreamWriter.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/LoggingNormalizedNodeStreamWriter.java @@ -11,6 +11,7 @@ import com.google.common.annotations.Beta; import com.google.common.base.Strings; import java.util.ArrayDeque; import java.util.Deque; +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -109,7 +110,7 @@ public final class LoggingNormalizedNodeStreamWriter implements NormalizedNodeSt } @Override - public void leafSetEntryNode(final Object value) { + public void leafSetEntryNode(final QName name, final Object value) { LOG.debug("{}{}({}) ", ind(), value, value.getClass().getSimpleName()); } diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamAttributeWriter.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamAttributeWriter.java index 5074acaa17..f28d75c82f 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamAttributeWriter.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamAttributeWriter.java @@ -19,7 +19,7 @@ public interface NormalizedNodeStreamAttributeWriter extends NormalizedNodeStrea void leafNode(YangInstanceIdentifier.NodeIdentifier name, Object value, Map attributes) throws IOException; - void leafSetEntryNode(Object value, Map attributes) throws IOException; + void leafSetEntryNode(QName name, Object value, Map attributes) throws IOException; void startContainerNode(YangInstanceIdentifier.NodeIdentifier name, int childSizeHint, Map attributes) throws IOException; diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamWriter.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamWriter.java index 98725c9aa9..c0312864dc 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamWriter.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamWriter.java @@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.data.api.schema.stream; import java.io.Closeable; import java.io.Flushable; import java.io.IOException; +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -49,7 +50,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent *
  • leaf-list - Leaf list start is emitted using * {@link #startLeafSet(NodeIdentifier, int)}. Leaf list end is emitted using * {@link #endNode()}. Leaf list entries are emmited using - * {@link #leafSetEntryNode(Object)}. + * {@link #leafSetEntryNode(QName, Object)}. * *
  • anyxml - AN node event is emitted using * {@link #leafNode(NodeIdentifier, Object)}. {@link #endNode()} MUST NOT BE emitted @@ -117,7 +118,7 @@ public interface NormalizedNodeStreamWriter extends Closeable, Flushable { * Emits a start of leaf set (leaf-list). *

    * Emits start of leaf set, during writing leaf set event, only - * {@link #leafSetEntryNode(Object)} calls are valid. Leaf set event is + * {@link #leafSetEntryNode(QName, Object)} calls are valid. Leaf set event is * finished by calling {@link #endNode()}. * * @param name @@ -143,7 +144,7 @@ public interface NormalizedNodeStreamWriter extends Closeable, Flushable { * Emits a start of leaf set (leaf-list). *

    * Emits start of leaf set, during writing leaf set event, only - * {@link #leafSetEntryNode(Object)} calls are valid. Leaf set event is + * {@link #leafSetEntryNode(QName, Object)} calls are valid. Leaf set event is * finished by calling {@link #endNode()}. * * @param name @@ -167,6 +168,8 @@ public interface NormalizedNodeStreamWriter extends Closeable, Flushable { /** * Emits a leaf set entry node * + * @param name + * name of the node as defined in the schema. * @param value * Value of leaf set entry node. Supplied object MUST BE constant over time. * @throws IllegalArgumentException @@ -175,7 +178,7 @@ public interface NormalizedNodeStreamWriter extends Closeable, Flushable { * If node was emitted outside leaf set node. * @throws IOException if an underlying IO error occurs */ - void leafSetEntryNode(Object value) throws IOException; + void leafSetEntryNode(QName name, Object value) throws IOException; /** * diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriter.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriter.java index f2ff0d3ba3..abb8c811c6 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriter.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriter.java @@ -136,10 +136,12 @@ public class NormalizedNodeWriter implements Closeable, Flushable { private boolean wasProcessAsSimpleNode(final NormalizedNode node) throws IOException { if (node instanceof LeafSetEntryNode) { final LeafSetEntryNode nodeAsLeafList = (LeafSetEntryNode)node; + final QName name = nodeAsLeafList.getIdentifier().getNodeType(); if(writer instanceof NormalizedNodeStreamAttributeWriter) { - ((NormalizedNodeStreamAttributeWriter) writer).leafSetEntryNode(nodeAsLeafList.getValue(), nodeAsLeafList.getAttributes()); + ((NormalizedNodeStreamAttributeWriter) writer).leafSetEntryNode(name, nodeAsLeafList.getValue(), + nodeAsLeafList.getAttributes()); } else { - writer.leafSetEntryNode(nodeAsLeafList.getValue()); + writer.leafSetEntryNode(name, nodeAsLeafList.getValue()); } return true; } else if (node instanceof LeafNode) { diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java index aefb981f66..e5dc228b33 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java @@ -11,6 +11,7 @@ import com.google.common.base.Preconditions; import com.google.gson.stream.JsonWriter; import java.io.IOException; import java.net.URI; +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -104,7 +105,7 @@ public final class JSONNormalizedNodeStreamWriter implements NormalizedNodeStrea } @Override - public void leafSetEntryNode(final Object value) throws IOException { + public void leafSetEntryNode(final QName name, final Object value) throws IOException { final LeafListSchemaNode schema = tracker.leafSetEntryNode(); final JSONCodec codec = codecs.codecFor(schema); context.emittingChild(codecs.getSchemaContext(), writer); diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafListEntryNodeDataWithSchema.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafListEntryNodeDataWithSchema.java index d415dc0633..623b82af65 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafListEntryNodeDataWithSchema.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafListEntryNodeDataWithSchema.java @@ -19,6 +19,6 @@ class LeafListEntryNodeDataWithSchema extends SimpleNodeDataWithSchema { @Override public void write(final SchemaAwareNormalizedNodeStreamWriter writer) throws IOException { writer.nextDataSchemaNode(getSchema()); - writer.leafSetEntryNode(getValue()); + writer.leafSetEntryNode(getSchema().getQName(), getValue()); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XMLStreamNormalizedNodeStreamWriter.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XMLStreamNormalizedNodeStreamWriter.java index 757c9e23c1..4cfe0c3c39 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XMLStreamNormalizedNodeStreamWriter.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XMLStreamNormalizedNodeStreamWriter.java @@ -153,7 +153,7 @@ public final class XMLStreamNormalizedNodeStreamWriter implements NormalizedNode } @Override - public void leafSetEntryNode(final Object value, final Map attributes) throws IOException { + public void leafSetEntryNode(final QName name, final Object value, final Map attributes) throws IOException { final LeafListSchemaNode schema = tracker.leafSetEntryNode(); writeElement(schema.getQName(), schema, value, attributes); } @@ -205,7 +205,7 @@ public final class XMLStreamNormalizedNodeStreamWriter implements NormalizedNode } @Override - public void leafSetEntryNode(final Object value) throws IOException { + public void leafSetEntryNode(final QName name, final Object value) throws IOException { final LeafListSchemaNode schema = tracker.leafSetEntryNode(); writeElement(schema.getQName(), schema, value); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNormalizedNodeStreamWriter.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNormalizedNodeStreamWriter.java index a0f66a3638..73202be3ee 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNormalizedNodeStreamWriter.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNormalizedNodeStreamWriter.java @@ -11,6 +11,7 @@ import com.google.common.base.Preconditions; import java.util.ArrayDeque; import java.util.Collection; import java.util.Deque; +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -170,7 +171,7 @@ public class ImmutableNormalizedNodeStreamWriter implements SchemaAwareNormalize } @Override - public void leafSetEntryNode(final Object value) { + public void leafSetEntryNode(final QName name, final Object value) { if (getCurrent() instanceof ImmutableOrderedLeafSetNodeBuilder) { @SuppressWarnings("unchecked") ListNodeBuilder> builder = ((ImmutableOrderedLeafSetNodeBuilder) getCurrent()); @@ -187,7 +188,7 @@ public class ImmutableNormalizedNodeStreamWriter implements SchemaAwareNormalize } @Override - public void startOrderedLeafSet(final NodeIdentifier name,final int childSizeHint) { + public void startOrderedLeafSet(final NodeIdentifier name, final int childSizeHint) { checkDataNodeContainer(); final ListNodeBuilder> builder = Builders.orderedLeafSetBuilder(); builder.withNodeIdentifier(name); diff --git a/yang/yang-data-transform/src/main/java/org/opendaylight/yangtools/transform/QNameTransformingStreamWriter.java b/yang/yang-data-transform/src/main/java/org/opendaylight/yangtools/transform/QNameTransformingStreamWriter.java index ce508a48d3..7141f8e5ac 100644 --- a/yang/yang-data-transform/src/main/java/org/opendaylight/yangtools/transform/QNameTransformingStreamWriter.java +++ b/yang/yang-data-transform/src/main/java/org/opendaylight/yangtools/transform/QNameTransformingStreamWriter.java @@ -114,8 +114,8 @@ public abstract class QNameTransformingStreamWriter extends ForwardingObject imp } @Override - public void leafSetEntryNode(final Object value) throws IOException, IllegalArgumentException { - delegate().leafSetEntryNode(value); + public void leafSetEntryNode(final QName name, final Object value) throws IOException, IllegalArgumentException { + delegate().leafSetEntryNode(transform(name), value); } @Override -- 2.36.6