From: Robert Varga Date: Fri, 9 Oct 2015 17:14:51 +0000 (+0200) Subject: BUG-4261: convert JSON parser to pass down SchemaNode information X-Git-Tag: release/beryllium~200 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=1c941bb84d8368330484616ee16365fc0e216bc6;p=yangtools.git BUG-4261: convert JSON parser to pass down SchemaNode information Change-Id: I2519e3b77d88394c425e79610208a7c8d4a98b9f Signed-off-by: Robert Varga --- diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractNodeDataWithSchema.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractNodeDataWithSchema.java index d448d12ee6..fd4fabfe89 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractNodeDataWithSchema.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractNodeDataWithSchema.java @@ -12,7 +12,7 @@ import com.google.common.base.Preconditions; import java.io.IOException; import java.util.Objects; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.SchemaAwareNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; /** @@ -40,7 +40,7 @@ abstract class AbstractNodeDataWithSchema { * @param writer Target writer * @throws IOException reported when thrown by the writer. */ - public abstract void write(final NormalizedNodeStreamWriter writer) throws IOException; + public abstract void write(final SchemaAwareNormalizedNodeStreamWriter writer) throws IOException; protected final NodeIdentifier provideNodeIdentifier() { return NodeIdentifier.create(schema.getQName()); diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/AnyXmlNodeDataWithSchema.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/AnyXmlNodeDataWithSchema.java index 2c674d6e46..76a960bfd8 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/AnyXmlNodeDataWithSchema.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/AnyXmlNodeDataWithSchema.java @@ -8,8 +8,7 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import java.io.IOException; - -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.SchemaAwareNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; class AnyXmlNodeDataWithSchema extends SimpleNodeDataWithSchema { @@ -19,7 +18,8 @@ class AnyXmlNodeDataWithSchema extends SimpleNodeDataWithSchema { } @Override - public void write(final NormalizedNodeStreamWriter writer) throws IOException { + public void write(final SchemaAwareNormalizedNodeStreamWriter writer) throws IOException { + writer.nextDataSchemaNode(getSchema()); // FIXME: should be changed according to format of value writer.anyxmlNode(provideNodeIdentifier(), getValue()); } diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ChoiceNodeDataWithSchema.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ChoiceNodeDataWithSchema.java index b7ab6fa19b..b246959835 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ChoiceNodeDataWithSchema.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ChoiceNodeDataWithSchema.java @@ -8,7 +8,7 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import java.io.IOException; -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.SchemaAwareNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -39,7 +39,8 @@ class ChoiceNodeDataWithSchema extends CompositeNodeDataWithSchema { } @Override - public void write(final NormalizedNodeStreamWriter writer) throws IOException { + public void write(final SchemaAwareNormalizedNodeStreamWriter writer) throws IOException { + writer.nextDataSchemaNode(getSchema()); writer.startChoiceNode(provideNodeIdentifier(), childSizeHint()); super.write(writer); writer.endNode(); diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/CompositeNodeDataWithSchema.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/CompositeNodeDataWithSchema.java index 66abf9bebf..23654dbb6d 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/CompositeNodeDataWithSchema.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/CompositeNodeDataWithSchema.java @@ -16,7 +16,7 @@ import java.util.Collection; import java.util.Deque; import java.util.List; import java.util.Map.Entry; -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.SchemaAwareNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.SchemaUtils; import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; @@ -174,13 +174,14 @@ class CompositeNodeDataWithSchema extends AbstractNodeDataWithSchema { } @Override - public void write(final NormalizedNodeStreamWriter writer) throws IOException { + public void write(final SchemaAwareNormalizedNodeStreamWriter writer) throws IOException { for (AbstractNodeDataWithSchema child : children) { child.write(writer); } for (Entry> augmentationToChild : augmentationsToChild.asMap().entrySet()) { final Collection childsFromAgumentation = augmentationToChild.getValue(); if (!childsFromAgumentation.isEmpty()) { + // FIXME: can we get the augmentation schema? writer.startAugmentationNode(SchemaUtils.getNodeIdentifierForAugmentation(augmentationToChild.getKey())); for (AbstractNodeDataWithSchema nodeDataWithSchema : childsFromAgumentation) { diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ContainerNodeDataWithSchema.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ContainerNodeDataWithSchema.java index b473e9e8a1..68371878fe 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ContainerNodeDataWithSchema.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ContainerNodeDataWithSchema.java @@ -8,8 +8,7 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import java.io.IOException; - -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.SchemaAwareNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; class ContainerNodeDataWithSchema extends CompositeNodeDataWithSchema { @@ -19,7 +18,8 @@ class ContainerNodeDataWithSchema extends CompositeNodeDataWithSchema { } @Override - public void write(final NormalizedNodeStreamWriter writer) throws IOException { + public void write(final SchemaAwareNormalizedNodeStreamWriter writer) throws IOException { + writer.nextDataSchemaNode(getSchema()); writer.startContainerNode(provideNodeIdentifier(), childSizeHint()); super.write(writer); writer.endNode(); diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonParserStream.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonParserStream.java index da5315bba1..e44b5989fd 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonParserStream.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonParserStream.java @@ -27,7 +27,9 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.schema.stream.DataSchemaNodeAwareAdaptor; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.SchemaAwareNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; @@ -45,14 +47,14 @@ import org.opendaylight.yangtools.yang.model.api.SchemaNode; @Beta public final class JsonParserStream implements Closeable, Flushable { private final Deque namespaces = new ArrayDeque<>(); - private final NormalizedNodeStreamWriter writer; + private final SchemaAwareNormalizedNodeStreamWriter writer; private final JSONCodecFactory codecs; private final SchemaContext schema; private final DataSchemaNode parentNode; private JsonParserStream(final NormalizedNodeStreamWriter writer, final SchemaContext schemaContext, final DataSchemaNode parentNode) { this.schema = Preconditions.checkNotNull(schemaContext); - this.writer = Preconditions.checkNotNull(writer); + this.writer = DataSchemaNodeAwareAdaptor.forWriter(writer); this.codecs = JSONCodecFactory.create(schemaContext); this.parentNode = parentNode; } 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 7063be6753..d415dc0633 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 @@ -8,8 +8,7 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import java.io.IOException; - -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.SchemaAwareNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; class LeafListEntryNodeDataWithSchema extends SimpleNodeDataWithSchema { @@ -18,7 +17,8 @@ class LeafListEntryNodeDataWithSchema extends SimpleNodeDataWithSchema { } @Override - public void write(final NormalizedNodeStreamWriter writer) throws IOException { + public void write(final SchemaAwareNormalizedNodeStreamWriter writer) throws IOException { + writer.nextDataSchemaNode(getSchema()); writer.leafSetEntryNode(getValue()); } } diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafListNodeDataWithSchema.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafListNodeDataWithSchema.java index 20a607d5fe..8357be54a9 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafListNodeDataWithSchema.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafListNodeDataWithSchema.java @@ -8,8 +8,7 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import java.io.IOException; - -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.SchemaAwareNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; class LeafListNodeDataWithSchema extends CompositeNodeDataWithSchema { @@ -18,7 +17,8 @@ class LeafListNodeDataWithSchema extends CompositeNodeDataWithSchema { } @Override - public void write(final NormalizedNodeStreamWriter writer) throws IOException { + public void write(final SchemaAwareNormalizedNodeStreamWriter writer) throws IOException { + writer.nextDataSchemaNode(getSchema()); writer.startLeafSet(provideNodeIdentifier(), childSizeHint()); super.write(writer); writer.endNode(); diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafNodeDataWithSchema.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafNodeDataWithSchema.java index fc8c814c3f..32263d68dc 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafNodeDataWithSchema.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/LeafNodeDataWithSchema.java @@ -8,8 +8,7 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import java.io.IOException; - -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.SchemaAwareNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; class LeafNodeDataWithSchema extends SimpleNodeDataWithSchema { @@ -19,8 +18,8 @@ class LeafNodeDataWithSchema extends SimpleNodeDataWithSchema { } @Override - public void write(final NormalizedNodeStreamWriter writer) throws IOException { + public void write(final SchemaAwareNormalizedNodeStreamWriter writer) throws IOException { + writer.nextDataSchemaNode(getSchema()); writer.leafNode(provideNodeIdentifier(), getValue()); } - } diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ListEntryNodeDataWithSchema.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ListEntryNodeDataWithSchema.java index 315ce97e49..e3581354ad 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ListEntryNodeDataWithSchema.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ListEntryNodeDataWithSchema.java @@ -8,17 +8,15 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import com.google.common.base.Preconditions; - import java.io.IOException; import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; - import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.SchemaAwareNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; @@ -51,9 +49,10 @@ class ListEntryNodeDataWithSchema extends CompositeNodeDataWithSchema { } @Override - public void write(final NormalizedNodeStreamWriter writer) throws IOException { + public void write(final SchemaAwareNormalizedNodeStreamWriter writer) throws IOException { final Collection keyDef = ((ListSchemaNode) getSchema()).getKeyDefinition(); if (keyDef.isEmpty()) { + writer.nextDataSchemaNode(getSchema()); writer.startUnkeyedListItem(provideNodeIdentifier(), childSizeHint()); super.write(writer); writer.endNode(); @@ -68,6 +67,7 @@ class ListEntryNodeDataWithSchema extends CompositeNodeDataWithSchema { predicates.put(qname, qNameToKeys.get(qname).getValue()); } + writer.nextDataSchemaNode(getSchema()); writer.startMapEntryNode( new NodeIdentifierWithPredicates(getSchema().getQName(), predicates), childSizeHint()); diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ListNodeDataWithSchema.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ListNodeDataWithSchema.java index 2c5311417b..abbf1eaec4 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ListNodeDataWithSchema.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/ListNodeDataWithSchema.java @@ -8,8 +8,7 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import java.io.IOException; - -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.SchemaAwareNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; @@ -20,8 +19,9 @@ class ListNodeDataWithSchema extends CompositeNodeDataWithSchema { } @Override - public void write(final NormalizedNodeStreamWriter writer) throws IOException { + public void write(final SchemaAwareNormalizedNodeStreamWriter writer) throws IOException { final ListSchemaNode schema = (ListSchemaNode) getSchema(); + writer.nextDataSchemaNode(schema); if (schema.getKeyDefinition().isEmpty()) { writer.startUnkeyedList(provideNodeIdentifier(), childSizeHint()); } else if(schema.isUserOrdered()) {