Rename Any{Data,Xml}SchemaNode to Any{data,xml}SchemaNode
[yangtools.git] / yang / yang-data-codec-gson / src / main / java / org / opendaylight / yangtools / yang / data / codec / gson / JsonParserStream.java
index 15925d29eeca17910ca2f729ffb2d57fe81c37cb..0ef409c10b81848233d20d1d46a4db4ec92e3c31 100644 (file)
@@ -24,7 +24,6 @@ import java.io.IOException;
 import java.net.URI;
 import java.util.AbstractMap.SimpleImmutableEntry;
 import java.util.ArrayDeque;
-import java.util.Collections;
 import java.util.Deque;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -32,7 +31,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 import javax.xml.transform.dom.DOMSource;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.odlext.model.api.YangModeledAnyXmlSchemaNode;
+import org.opendaylight.yangtools.odlext.model.api.YangModeledAnyxmlSchemaNode;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.util.AbstractNodeDataWithSchema;
@@ -43,16 +42,15 @@ 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.OperationAsContainer;
 import org.opendaylight.yangtools.yang.data.util.ParserStreamUtils;
-import org.opendaylight.yangtools.yang.data.util.RpcAsContainer;
 import org.opendaylight.yangtools.yang.data.util.SimpleNodeDataWithSchema;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode;
 import org.w3c.dom.Document;
@@ -89,7 +87,7 @@ public final class JsonParserStream implements Closeable, Flushable {
      * @return A new {@link JsonParserStream}
      * @throws NullPointerException if any of the arguments are null
      */
-    public static JsonParserStream create(final @NonNull NormalizedNodeStreamWriter writer,
+    public static @NonNull JsonParserStream create(final @NonNull NormalizedNodeStreamWriter writer,
             final @NonNull JSONCodecFactory codecFactory) {
         return new JsonParserStream(writer, codecFactory, codecFactory.getSchemaContext());
     }
@@ -104,50 +102,17 @@ public final class JsonParserStream implements Closeable, Flushable {
      * @return A new {@link JsonParserStream}
      * @throws NullPointerException if any of the arguments are null
      */
-    public static JsonParserStream create(final @NonNull NormalizedNodeStreamWriter writer,
+    public static @NonNull JsonParserStream create(final @NonNull NormalizedNodeStreamWriter writer,
             final @NonNull JSONCodecFactory codecFactory, final @NonNull SchemaNode parentNode) {
-        if (parentNode instanceof RpcDefinition) {
-            return new JsonParserStream(writer, codecFactory, new RpcAsContainer((RpcDefinition) parentNode));
+        final DataSchemaNode parent;
+        if (parentNode instanceof DataSchemaNode) {
+            parent = (DataSchemaNode) parentNode;
+        } else if (parentNode instanceof OperationDefinition) {
+            parent = OperationAsContainer.of((OperationDefinition) parentNode);
+        } else {
+            throw new IllegalArgumentException("Illegal parent node " + requireNonNull(parentNode));
         }
-        checkArgument(parentNode instanceof DataSchemaNode, "An instance of DataSchemaNode is expected, %s supplied",
-            parentNode);
-        return new JsonParserStream(writer, codecFactory, (DataSchemaNode) parentNode);
-    }
-
-    /**
-     * Create a new {@link JsonParserStream} backed by specified {@link NormalizedNodeStreamWriter}
-     * and {@link SchemaContext}. The stream will be logically rooted at the top of the supplied SchemaContext.
-     *
-     * @param writer NormalizedNodeStreamWriter to use for instantiation of normalized nodes
-     * @param schemaContext {@link SchemaContext} to use
-     * @return A new {@link JsonParserStream}
-     * @throws NullPointerException if any of the arguments are null
-     *
-     * @deprecated Use {@link #create(NormalizedNodeStreamWriter, JSONCodecFactory)} instead.
-     */
-    @Deprecated
-    public static JsonParserStream create(final @NonNull NormalizedNodeStreamWriter writer,
-            final @NonNull SchemaContext schemaContext) {
-        return create(writer, JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(schemaContext));
-    }
-
-    /**
-     * Create a new {@link JsonParserStream} backed by specified {@link NormalizedNodeStreamWriter}
-     * and {@link SchemaContext}. The stream will be logically rooted at the specified parent node.
-     *
-     * @param writer NormalizedNodeStreamWriter to use for instantiation of normalized nodes
-     * @param schemaContext {@link SchemaContext} to use
-     * @param parentNode Logical root node
-     * @return A new {@link JsonParserStream}
-     * @throws NullPointerException if any of the arguments are null
-     *
-     * @deprecated Use {@link #create(NormalizedNodeStreamWriter, JSONCodecFactory, SchemaNode)} instead.
-     */
-    @Deprecated
-    public static JsonParserStream create(final @NonNull NormalizedNodeStreamWriter writer,
-            final @NonNull SchemaContext schemaContext, final @NonNull SchemaNode parentNode) {
-        return create(writer, JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(schemaContext),
-            parentNode);
+        return new JsonParserStream(writer, codecFactory, parent);
     }
 
     public JsonParserStream parse(final JsonReader reader) {
@@ -159,7 +124,8 @@ public final class JsonParserStream implements Closeable, Flushable {
         try {
             reader.peek();
             isEmpty = false;
-            final CompositeNodeDataWithSchema compositeNodeDataWithSchema = new CompositeNodeDataWithSchema(parentNode);
+            final CompositeNodeDataWithSchema<?> compositeNodeDataWithSchema =
+                    new CompositeNodeDataWithSchema<>(parentNode);
             read(reader, compositeNodeDataWithSchema);
             compositeNodeDataWithSchema.write(writer);
 
@@ -233,7 +199,7 @@ public final class JsonParserStream implements Closeable, Flushable {
         parent.setValue(domSource);
     }
 
-    public void read(final JsonReader in, AbstractNodeDataWithSchema parent) throws IOException {
+    public void read(final JsonReader in, AbstractNodeDataWithSchema<?> parent) throws IOException {
         switch (in.peek()) {
             case STRING:
             case NUMBER:
@@ -252,7 +218,7 @@ public final class JsonParserStream implements Closeable, Flushable {
                     if (parent instanceof LeafNodeDataWithSchema) {
                         read(in, parent);
                     } else {
-                        final AbstractNodeDataWithSchema newChild = newArrayEntry(parent);
+                        final AbstractNodeDataWithSchema<?> newChild = newArrayEntry(parent);
                         read(in, newChild);
                     }
                 }
@@ -274,8 +240,8 @@ public final class JsonParserStream implements Closeable, Flushable {
                 while (in.hasNext()) {
                     final String jsonElementName = in.nextName();
                     DataSchemaNode parentSchema = parent.getSchema();
-                    if (parentSchema instanceof YangModeledAnyXmlSchemaNode) {
-                        parentSchema = ((YangModeledAnyXmlSchemaNode) parentSchema).getSchemaOfAnyXmlData();
+                    if (parentSchema instanceof YangModeledAnyxmlSchemaNode) {
+                        parentSchema = ((YangModeledAnyxmlSchemaNode) parentSchema).getSchemaOfAnyXmlData();
                     }
                     final Entry<String, URI> namespaceAndName = resolveNamespace(jsonElementName, parentSchema);
                     final String localName = namespaceAndName.getKey();
@@ -292,7 +258,7 @@ public final class JsonParserStream implements Closeable, Flushable {
                         localName, getCurrentNamespace(), parentSchema.getPath());
 
 
-                    final AbstractNodeDataWithSchema newChild = ((CompositeNodeDataWithSchema) parent)
+                    final AbstractNodeDataWithSchema<?> newChild = ((CompositeNodeDataWithSchema<?>) parent)
                             .addChild(childDataSchemaNodes);
                     if (newChild instanceof AnyXmlNodeDataWithSchema) {
                         readAnyXmlValue(in, (AnyXmlNodeDataWithSchema) newChild, jsonElementName);
@@ -308,27 +274,27 @@ public final class JsonParserStream implements Closeable, Flushable {
         }
     }
 
-    private static boolean isArray(final AbstractNodeDataWithSchema parent) {
+    private static boolean isArray(final AbstractNodeDataWithSchema<?> parent) {
         return parent instanceof ListNodeDataWithSchema || parent instanceof LeafListNodeDataWithSchema;
     }
 
-    private static AbstractNodeDataWithSchema newArrayEntry(final AbstractNodeDataWithSchema parent) {
-        AbstractNodeDataWithSchema newChild;
+    private static AbstractNodeDataWithSchema<?> newArrayEntry(final AbstractNodeDataWithSchema<?> parent) {
+        AbstractNodeDataWithSchema<?> newChild;
         if (parent instanceof ListNodeDataWithSchema) {
-            newChild = new ListEntryNodeDataWithSchema(parent.getSchema());
+            newChild = ListEntryNodeDataWithSchema.forSchema(((ListNodeDataWithSchema) parent).getSchema());
         } else if (parent instanceof LeafListNodeDataWithSchema) {
-            newChild = new LeafListEntryNodeDataWithSchema(parent.getSchema());
+            newChild = new LeafListEntryNodeDataWithSchema(((LeafListNodeDataWithSchema) parent).getSchema());
         } else {
             throw new IllegalStateException("Found an unexpected array nested under " + parent.getSchema().getQName());
         }
-        ((CompositeNodeDataWithSchema) parent).addChild(newChild);
+        ((CompositeNodeDataWithSchema<?>) parent).addChild(newChild);
         return newChild;
     }
 
-    private void setValue(final AbstractNodeDataWithSchema parent, final String value) {
+    private void setValue(final AbstractNodeDataWithSchema<?> parent, final String value) {
         checkArgument(parent instanceof SimpleNodeDataWithSchema, "Node %s is not a simple type",
                 parent.getSchema().getQName());
-        final SimpleNodeDataWithSchema parentSimpleNode = (SimpleNodeDataWithSchema) parent;
+        final SimpleNodeDataWithSchema<?> parentSimpleNode = (SimpleNodeDataWithSchema<?>) parent;
         checkArgument(parentSimpleNode.getValue() == null, "Node '%s' has already set its value to '%s'",
                 parentSimpleNode.getSchema().getQName(), parentSimpleNode.getValue());
 
@@ -365,8 +331,7 @@ public final class JsonParserStream implements Closeable, Flushable {
         }
 
         if (namespace == null) {
-            Set<URI> potentialUris = Collections.emptySet();
-            potentialUris = resolveAllPotentialNamespaces(nodeNamePart, dataSchemaNode);
+            final Set<URI> potentialUris = resolveAllPotentialNamespaces(nodeNamePart, dataSchemaNode);
             if (potentialUris.contains(getCurrentNamespace())) {
                 namespace = getCurrentNamespace();
             } else if (potentialUris.size() == 1) {