From 94336a79d974543e50cd5e9047d6bd148e4ddbda Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 5 Jun 2020 15:54:51 +0200 Subject: [PATCH] Add MultipleEntryDataWithSchema interface We are sharing essentially the same code in both JSON and XML parsers, where we really to make this common code exposed from appropriate NodeDataWithSchema. Centralizing the interface contract and implementations allows us to ditch external users of CompositeNodeDataWithSchema.addChild(), which is now deprecated. Change-Id: I5aca3d3eecba3f9e6ffee4b9ee15e70afa47aed6 Signed-off-by: Robert Varga --- .../data/codec/gson/JsonParserStream.java | 13 +++------- .../yang/data/codec/xml/XmlParserStream.java | 12 +++------ .../util/CompositeNodeDataWithSchema.java | 1 + .../data/util/LeafListNodeDataWithSchema.java | 10 ++++++- .../util/ListEntryNodeDataWithSchema.java | 3 ++- .../data/util/ListNodeDataWithSchema.java | 10 +++++-- .../util/MultipleEntryDataWithSchema.java | 26 +++++++++++++++++++ 7 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/MultipleEntryDataWithSchema.java 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 e67804bef7..877173b4eb 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 @@ -37,11 +37,10 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre import org.opendaylight.yangtools.yang.data.util.AbstractNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.AnyXmlNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.CompositeNodeDataWithSchema; -import org.opendaylight.yangtools.yang.data.util.LeafListEntryNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.LeafListNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.LeafNodeDataWithSchema; -import org.opendaylight.yangtools.yang.data.util.ListEntryNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.ListNodeDataWithSchema; +import org.opendaylight.yangtools.yang.data.util.MultipleEntryDataWithSchema; import org.opendaylight.yangtools.yang.data.util.OperationAsContainer; import org.opendaylight.yangtools.yang.data.util.ParserStreamUtils; import org.opendaylight.yangtools.yang.data.util.SimpleNodeDataWithSchema; @@ -327,16 +326,10 @@ public final class JsonParserStream implements Closeable, Flushable { } private static AbstractNodeDataWithSchema newArrayEntry(final AbstractNodeDataWithSchema parent) { - AbstractNodeDataWithSchema newChild; - if (parent instanceof ListNodeDataWithSchema) { - newChild = ListEntryNodeDataWithSchema.forSchema(((ListNodeDataWithSchema) parent).getSchema()); - } else if (parent instanceof LeafListNodeDataWithSchema) { - newChild = new LeafListEntryNodeDataWithSchema(((LeafListNodeDataWithSchema) parent).getSchema()); - } else { + if (!(parent instanceof MultipleEntryDataWithSchema)) { throw new IllegalStateException("Found an unexpected array nested under " + parent.getSchema().getQName()); } - ((CompositeNodeDataWithSchema) parent).addChild(newChild); - return newChild; + return ((MultipleEntryDataWithSchema) parent).newChildEntry(); } private void setValue(final AbstractNodeDataWithSchema parent, final String value) { diff --git a/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java b/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java index acd9a11d4d..8da82a28e0 100644 --- a/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java +++ b/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java @@ -66,6 +66,7 @@ import org.opendaylight.yangtools.yang.data.util.LeafNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.ListEntryNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.ListNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.MountPointData; +import org.opendaylight.yangtools.yang.data.util.MultipleEntryDataWithSchema; import org.opendaylight.yangtools.yang.data.util.OperationAsContainer; import org.opendaylight.yangtools.yang.data.util.ParserStreamUtils; import org.opendaylight.yangtools.yang.data.util.SimpleNodeDataWithSchema; @@ -628,15 +629,8 @@ public final class XmlParserStream implements Closeable, Flushable { } private static AbstractNodeDataWithSchema newEntryNode(final AbstractNodeDataWithSchema parent) { - final AbstractNodeDataWithSchema newChild; - if (parent instanceof ListNodeDataWithSchema) { - newChild = ListEntryNodeDataWithSchema.forSchema(((ListNodeDataWithSchema) parent).getSchema()); - } else { - verify(parent instanceof LeafListNodeDataWithSchema, "Unexpected parent %s", parent); - newChild = new LeafListEntryNodeDataWithSchema(((LeafListNodeDataWithSchema) parent).getSchema()); - } - ((CompositeNodeDataWithSchema) parent).addChild(newChild); - return newChild; + verify(parent instanceof MultipleEntryDataWithSchema, "Unexpected parent %s", parent); + return ((MultipleEntryDataWithSchema) parent).newChildEntry(); } @Override diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/CompositeNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/CompositeNodeDataWithSchema.java index ef4faae660..8b79165cf9 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/CompositeNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/CompositeNodeDataWithSchema.java @@ -60,6 +60,7 @@ public class CompositeNodeDataWithSchema extends Abstr return newChild == null ? addCompositeChild(schema) : newChild; } + @Deprecated public void addChild(final AbstractNodeDataWithSchema newChild) { children.add(newChild); } diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListNodeDataWithSchema.java index 9636ec0fda..ceb4d661af 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListNodeDataWithSchema.java @@ -19,7 +19,8 @@ import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; *

* Represents a YANG leaf-list node. */ -public class LeafListNodeDataWithSchema extends CompositeNodeDataWithSchema { +public class LeafListNodeDataWithSchema extends CompositeNodeDataWithSchema + implements MultipleEntryDataWithSchema { public LeafListNodeDataWithSchema(final LeafListSchemaNode schema) { super(schema); } @@ -37,4 +38,11 @@ public class LeafListNodeDataWithSchema extends CompositeNodeDataWithSchema keyDef = schema.getKeyDefinition(); return keyDef.isEmpty() ? new Unkeyed(schema) : new Keyed(schema, keyDef); } diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListNodeDataWithSchema.java index 3e22edf600..65f967d4af 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListNodeDataWithSchema.java @@ -19,8 +19,8 @@ import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; *

* Represents a YANG list node. */ -public class ListNodeDataWithSchema extends CompositeNodeDataWithSchema { - +public class ListNodeDataWithSchema extends CompositeNodeDataWithSchema + implements MultipleEntryDataWithSchema { public ListNodeDataWithSchema(final ListSchemaNode schema) { super(schema); } @@ -41,4 +41,10 @@ public class ListNodeDataWithSchema extends CompositeNodeDataWithSchema Entry AbstractNodeDataWithSchema type + */ +@Beta +public interface MultipleEntryDataWithSchema> { + /** + * Create a new child entry. + * + * @return A new child entry. + */ + @NonNull T newChildEntry(); +} -- 2.36.6