From 999ce186cee071f729878287fa1517a8cf1ac86e Mon Sep 17 00:00:00 2001 From: Tony Tkacik Date: Thu, 11 Sep 2014 13:53:45 +0200 Subject: [PATCH] Bug 1761: Fixed missing module name prefix for augmentations. Migration to more state tracking introduced regression where module name prefix was left out for containers and lists which were augmented, which was inconsistent with case augmentations, which were serialized properly. Draft draft-lhotka-netmod-yang-json-02 allows previous behaviour (without module names for augmented items), but that may cause changing textual representation after conflicting augmentation is introduced, so we opted to always report module name for top level items of augmentation, which is also allowed from spec. Change-Id: Icbb1b2aeed1a154a06e7f90f0dacc199a7df6bcc Signed-off-by: Tony Tkacik Signed-off-by: Robert Varga --- .../gson/JSONNormalizedNodeStreamWriter.java | 7 +++---- .../codec/gson/JSONStreamWriterContext.java | 21 ++++++++++++++----- .../gson/JSONStreamWriterListContext.java | 2 +- .../JSONStreamWriterNamedObjectContext.java | 5 ++--- 4 files changed, 22 insertions(+), 13 deletions(-) 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 643e9de9ad..8fcc596ab4 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,11 +11,9 @@ import com.google.common.base.CharMatcher; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.gson.stream.JsonWriter; - import java.io.IOException; import java.io.Writer; import java.net.URI; - 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; @@ -136,7 +134,7 @@ public class JSONNormalizedNodeStreamWriter implements NormalizedNodeStreamWrite final JSONCodec codec = codecs.codecFor(schema.getType()); context.emittingChild(codecs.getSchemaContext(), writer, indent); - context.writeJsonIdentifier(codecs.getSchemaContext(), writer, name.getNodeType()); + context.writeChildJsonIdentifier(codecs.getSchemaContext(), writer, name.getNodeType()); writeValue(codec.serialize(value), codec.needQuotes()); } @@ -211,11 +209,12 @@ public class JSONNormalizedNodeStreamWriter implements NormalizedNodeStreamWrite @Override public void anyxmlNode(final NodeIdentifier name, final Object value) throws IOException { + @SuppressWarnings("unused") final AnyXmlSchemaNode schema = tracker.anyxmlNode(name); // FIXME: should have a codec based on this :) context.emittingChild(codecs.getSchemaContext(), writer, indent); - context.writeJsonIdentifier(codecs.getSchemaContext(), writer, name.getNodeType()); + context.writeChildJsonIdentifier(codecs.getSchemaContext(), writer, name.getNodeType()); writeValue(String.valueOf(value), true); } diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterContext.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterContext.java index 1a5181a578..a3ad80dfb3 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterContext.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterContext.java @@ -8,13 +8,10 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import com.google.common.base.Preconditions; - import java.io.IOException; import java.io.Writer; import java.net.URI; - import javax.annotation.Nonnull; - import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -50,7 +47,7 @@ abstract class JSONStreamWriterContext { } /** - * Write a JSON node identifier, optionally prefixing it with the module name + * Write a child JSON node identifier, optionally prefixing it with the module name * corresponding to its namespace. * * @param schema Schema context @@ -58,7 +55,7 @@ abstract class JSONStreamWriterContext { * @param qname Namespace/name tuple * @throws IOException when the writer reports it */ - protected final void writeJsonIdentifier(final SchemaContext schema, final Writer writer, final QName qname) throws IOException { + final void writeChildJsonIdentifier(final SchemaContext schema, final Writer writer, final QName qname) throws IOException { writer.append('"'); // Prepend module name if namespaces do not match @@ -75,6 +72,19 @@ abstract class JSONStreamWriterContext { writer.append("\":"); } + /** + * Write our JSON node identifier, optionally prefixing it with the module name + * corresponding to its namespace. + * + * @param schema Schema context + * @param writer Output writer + * @param qname Namespace/name tuple + * @throws IOException when the writer reports it + */ + protected final void writeMyJsonIdentifier(final SchemaContext schema, final Writer writer, final QName qname) throws IOException { + parent.writeChildJsonIdentifier(schema, writer, qname); + } + /** * Return the namespace associated with current node. * @@ -158,4 +168,5 @@ abstract class JSONStreamWriterContext { } return parent; } + } diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterListContext.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterListContext.java index ed7bd092c9..9c0be476b1 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterListContext.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterListContext.java @@ -24,7 +24,7 @@ final class JSONStreamWriterListContext extends JSONStreamWriterQNameContext { @Override protected void emitStart(final SchemaContext schema, final Writer writer) throws IOException { - writeJsonIdentifier(schema, writer, getQName()); + writeMyJsonIdentifier(schema, writer, getQName()); writer.append('['); } diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterNamedObjectContext.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterNamedObjectContext.java index f5e5d48777..91c6ca70ae 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterNamedObjectContext.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONStreamWriterNamedObjectContext.java @@ -9,7 +9,6 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import java.io.IOException; import java.io.Writer; - import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -25,7 +24,7 @@ final class JSONStreamWriterNamedObjectContext extends JSONStreamWriterObjectCon @Override protected void emitStart(final SchemaContext schema, final Writer writer) throws IOException { - writeJsonIdentifier(schema, writer, getQName()); + writeMyJsonIdentifier(schema, writer, getQName()); super.emitStart(schema, writer); } -} \ No newline at end of file +} -- 2.36.6