Bug 5019: Add QName param to NormalizedNodeWriter#leafSetEntryNode
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / schema / ImmutableNormalizedNodeStreamWriter.java
index a8d1d723debced755e0c8dbde6fb74fb1b0f15c6..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;
@@ -25,6 +26,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
+import org.opendaylight.yangtools.yang.data.api.schema.YangModeledAnyXmlNode;
 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.builder.api.CollectionNodeBuilder;
@@ -39,12 +41,15 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableCo
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedMapNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListEntryNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableYangModeledAnyXmlNodeBuilder;
 import org.opendaylight.yangtools.yang.data.util.LeafInterner;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.YangModeledAnyXmlSchemaNode;
 
 /**
  *
@@ -166,14 +171,30 @@ public class ImmutableNormalizedNodeStreamWriter implements SchemaAwareNormalize
     }
 
     @Override
-    public void leafSetEntryNode(final Object value) {
-        Preconditions.checkArgument(getCurrent() instanceof ImmutableLeafSetNodeBuilder<?>);
-        @SuppressWarnings("unchecked")
-        final ListNodeBuilder<Object, LeafSetEntryNode<Object>> builder = ((ImmutableLeafSetNodeBuilder<Object>) getCurrent());
-        builder.withChildValue(value);
+    public void leafSetEntryNode(final QName name, final Object value) {
+        if (getCurrent() instanceof ImmutableOrderedLeafSetNodeBuilder) {
+            @SuppressWarnings("unchecked")
+            ListNodeBuilder<Object, LeafSetEntryNode<Object>> builder = ((ImmutableOrderedLeafSetNodeBuilder<Object>) getCurrent());
+            builder.withChildValue(value);
+        } else if (getCurrent() instanceof ImmutableLeafSetNodeBuilder) {
+            @SuppressWarnings("unchecked")
+            ListNodeBuilder<Object, LeafSetEntryNode<Object>> builder = ((ImmutableLeafSetNodeBuilder<Object>) getCurrent());
+            builder.withChildValue(value);
+        } else {
+            throw new IllegalArgumentException("LeafSetEntryNode is not valid for parent " + getCurrent());
+        }
+
         nextSchema = null;
     }
 
+    @Override
+    public void startOrderedLeafSet(final NodeIdentifier name, final int childSizeHint) {
+        checkDataNodeContainer();
+        final ListNodeBuilder<Object, LeafSetEntryNode<Object>> builder = Builders.orderedLeafSetBuilder();
+        builder.withNodeIdentifier(name);
+        enter(builder);
+    }
+
     @Override
     public void anyxmlNode(final NodeIdentifier name, final Object value) {
         checkDataNodeContainer();
@@ -189,6 +210,18 @@ public class ImmutableNormalizedNodeStreamWriter implements SchemaAwareNormalize
         enter(builder.withNodeIdentifier(name));
     }
 
+    @Override
+    public void startYangModeledAnyXmlNode(final NodeIdentifier name, final int childSizeHint) {
+        checkDataNodeContainer();
+
+        Preconditions.checkArgument(nextSchema instanceof YangModeledAnyXmlSchemaNode,
+                "Schema of this node should be instance of YangModeledAnyXmlSchemaNode");
+        final DataContainerNodeAttrBuilder<NodeIdentifier, YangModeledAnyXmlNode> builder = UNKNOWN_SIZE == childSizeHint ? ImmutableYangModeledAnyXmlNodeBuilder
+                .create((YangModeledAnyXmlSchemaNode) nextSchema) : ImmutableYangModeledAnyXmlNodeBuilder.create(
+                (YangModeledAnyXmlSchemaNode) nextSchema, childSizeHint);
+        enter(builder.withNodeIdentifier(name));
+    }
+
     @Override
     public void startUnkeyedList(final NodeIdentifier name, final int childSizeHint) {
         checkDataNodeContainer();
@@ -200,8 +233,8 @@ public class ImmutableNormalizedNodeStreamWriter implements SchemaAwareNormalize
 
     @Override
     public void startUnkeyedListItem(final NodeIdentifier name, final int childSizeHint) {
-        Preconditions.checkArgument(getCurrent() instanceof ImmutableUnkeyedListNodeBuilder);
-
+        Preconditions.checkArgument((getCurrent() instanceof NormalizedNodeResultBuilder)
+                || getCurrent() instanceof ImmutableUnkeyedListNodeBuilder);
         final DataContainerNodeAttrBuilder<NodeIdentifier, UnkeyedListEntryNode> builder = UNKNOWN_SIZE == childSizeHint ?
                 ImmutableUnkeyedListEntryNodeBuilder.create() : ImmutableUnkeyedListEntryNodeBuilder.create(childSizeHint);
         enter(builder.withNodeIdentifier(name));