Bug 5019: Add QName param to NormalizedNodeWriter#leafSetEntryNode 11/33611/2
authorTom Pantelis <tpanteli@brocade.com>
Thu, 21 Jan 2016 15:35:29 +0000 (10:35 -0500)
committerGerrit Code Review <gerrit@opendaylight.org>
Fri, 29 Jan 2016 09:05:40 +0000 (09:05 +0000)
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 <tpanteli@brocade.com>
Signed-off-by: Robert Varga <rovarga@cisco.com>
(cherry picked from commit d9193a3ec0a76392097f04d14d0547a7c00d5d27)

yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ForwardingNormalizedNodeStreamAttributeWriter.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ForwardingNormalizedNodeStreamWriter.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/LoggingNormalizedNodeStreamWriter.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamAttributeWriter.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamWriter.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriter.java
yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java
yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafListEntryNodeDataWithSchema.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XMLStreamNormalizedNodeStreamWriter.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNormalizedNodeStreamWriter.java
yang/yang-data-transform/src/main/java/org/opendaylight/yangtools/transform/QNameTransformingStreamWriter.java

index 92d96857be28eb58d2009ecdd8eda06b1deedc76..08104f8c064050f236e0c3bfba3405b0ce6ef235 100644 (file)
@@ -24,8 +24,8 @@ public abstract class ForwardingNormalizedNodeStreamAttributeWriter extends Forw
     }
 
     @Override
-    public void leafSetEntryNode(final Object value, final Map<QName, String> attributes) throws IOException {
-        delegate().leafSetEntryNode(value, attributes);
+    public void leafSetEntryNode(final QName name, final Object value, final Map<QName, String> attributes) throws IOException {
+        delegate().leafSetEntryNode(name, value, attributes);
     }
 
     @Override
index 60e8abfbe3fd7c324a951f6283eb3a51bec4d72a..7377b34eb65e36314d67f82a42fb15a723cd6d31 100644 (file)
@@ -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
index 121a654a5eadc9ff1926297e34a03276dd648735..b6bb7a941cc8976249d9619de4dbd4a56058b6a2 100644 (file)
@@ -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());
     }
 
index 5074acaa176c0a8fd0be7bcbcb13020b8d8f05b9..f28d75c82fe440a32bcf956f4ba9d56cfa256726 100644 (file)
@@ -19,7 +19,7 @@ public interface NormalizedNodeStreamAttributeWriter extends NormalizedNodeStrea
 
     void leafNode(YangInstanceIdentifier.NodeIdentifier name, Object value, Map<QName, String> attributes) throws IOException;
 
-    void leafSetEntryNode(Object value, Map<QName, String> attributes) throws IOException;
+    void leafSetEntryNode(QName name, Object value, Map<QName, String> attributes) throws IOException;
 
     void startContainerNode(YangInstanceIdentifier.NodeIdentifier name, int childSizeHint, Map<QName, String> attributes) throws IOException;
 
index 98725c9aa932d2c443c8c2735d169ef86a78de8b..c0312864dc1536e29e3c57ee7b2c825b6fc9550d 100644 (file)
@@ -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
  * <li><code>leaf-list</code> - 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)}.
  *
  * <li><code>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).
      * <p>
      * 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).
      * <p>
      * 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 <code>leaf set</code> node.
      * @throws IOException if an underlying IO error occurs
      */
-    void leafSetEntryNode(Object value) throws IOException;
+    void leafSetEntryNode(QName name, Object value) throws IOException;
 
     /**
      *
index f2ff0d3ba34421fe1f7069fe490dc6515a3daa03..abb8c811c64c05096ff737a46e4efebaed2be224 100644 (file)
@@ -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) {
index aefb981f66affb0e79580e7e0d08d068c9dbe767..e5dc228b334a3dd88802f2a74d56cbb5c916a652 100644 (file)
@@ -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<Object> codec = codecs.codecFor(schema);
         context.emittingChild(codecs.getSchemaContext(), writer);
index d415dc06334fa766245ad43cad4428a944fd08a6..623b82af651eed408cc4062225020ccb086993fb 100644 (file)
@@ -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());
     }
 }
index 757c9e23c15d1eedd9ed3d7893e49906cc9af898..4cfe0c3c39ade04f3611c7306ce929953e03c829 100644 (file)
@@ -153,7 +153,7 @@ public final class XMLStreamNormalizedNodeStreamWriter implements NormalizedNode
     }
 
     @Override
-    public void leafSetEntryNode(final Object value, final Map<QName, String> attributes) throws IOException {
+    public void leafSetEntryNode(final QName name, final Object value, final Map<QName, String> 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);
     }
index a0f66a36386bf9bd9c10a668e4f345411f0f0656..73202be3eea184bbe59fbbca57dd7f229f390a02 100644 (file)
@@ -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<Object, LeafSetEntryNode<Object>> builder = ((ImmutableOrderedLeafSetNodeBuilder<Object>) 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<Object, LeafSetEntryNode<Object>> builder = Builders.orderedLeafSetBuilder();
         builder.withNodeIdentifier(name);
index ce508a48d35679e87cfd085df9711308196b27e8..7141f8e5ace751d89b238d69f9887df62b25eb08 100644 (file)
@@ -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