Bug 2180 - schema aware builders for ordered list and leaf-list are 49/12249/1
authorJan Hajnar <jhajnar@cisco.com>
Wed, 22 Oct 2014 13:39:08 +0000 (15:39 +0200)
committerTony Tkacik <ttkacik@cisco.com>
Mon, 27 Oct 2014 09:33:46 +0000 (09:33 +0000)
absent

* added builders that provide ordered list and ordered leaf-list nodes
* added tests to check ordered node parsing

NOTE: this patch is based on patches by Tony Burke<tony@iservice.com>

Change-Id: I351e841c9fd1e02678b94598f7f5d46ab00a8334
Signed-off-by: Jan Hajnar <jhajnar@cisco.com>
Signed-off-by: Tony Burke <tony@iservice.com>
(cherry picked from commit 9b67d090d24d46f137e022d934d3f5e163147548)

yang/yang-data-composite-node/src/test/java/org/opendaylight/yangtools/yang/data/composite/node/schema/parser/Bug2180Test.java [new file with mode: 0644]
yang/yang-data-composite-node/src/test/resources/cnsn-to-normalized-node/yang/bug2180-test-model.yang [new file with mode: 0644]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/Builders.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedLeafSetNodeSchemaAwareBuilder.java [new file with mode: 0644]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedMapNodeBuilder.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedMapNodeSchemaAwareBuilder.java [new file with mode: 0644]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/parser/LeafSetNodeBaseParser.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/parser/MapNodeBaseParser.java

diff --git a/yang/yang-data-composite-node/src/test/java/org/opendaylight/yangtools/yang/data/composite/node/schema/parser/Bug2180Test.java b/yang/yang-data-composite-node/src/test/java/org/opendaylight/yangtools/yang/data/composite/node/schema/parser/Bug2180Test.java
new file mode 100644 (file)
index 0000000..c3f48bd
--- /dev/null
@@ -0,0 +1,77 @@
+package org.opendaylight.yangtools.yang.data.composite.node.schema.parser;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.data.api.Node;
+import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode;
+import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
+import org.opendaylight.yangtools.yang.data.api.schema.OrderedLeafSetNode;
+import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException;
+import org.opendaylight.yangtools.yang.data.composite.node.schema.TestUtils;
+import org.opendaylight.yangtools.yang.data.composite.node.schema.cnsn.parser.CnSnToNormalizedNodeParserFactory;
+import org.opendaylight.yangtools.yang.data.impl.schema.transform.ToNormalizedNodeParser;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Module;
+
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Set;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class Bug2180Test {
+    private Module simpleContainerModule;
+    private Module bug2111TestModule;
+
+    @Before
+    public void init() throws URISyntaxException {
+        Set<Module> modules = TestUtils.loadModulesFrom("/cnsn-to-normalized-node/yang");
+        simpleContainerModule = TestUtils.resolveModule("simple-container-yang", modules);
+        bug2111TestModule = TestUtils.resolveModule("bug2180-test-module", modules);
+    }
+
+    @Test
+    public void orderedListParseTest() throws DataValidationFailedException, URISyntaxException {
+        ContainerSchemaNode topContainerSchemaNode = (ContainerSchemaNode) TestUtils.resolveDataSchemaNode("top", bug2111TestModule);
+        ListSchemaNode aceListSchemaNode = (ListSchemaNode) topContainerSchemaNode.getDataChildByName("ordered-list");
+        ToNormalizedNodeParser<Node<?>, MapNode, ListSchemaNode> mapNodeParser =
+                CnSnToNormalizedNodeParserFactory.getInstance().getMapNodeParser();
+        MapNode mapNode = mapNodeParser.parse(new ArrayList<Node<?>>(), aceListSchemaNode);
+        assertTrue(mapNode instanceof OrderedMapNode);
+    }
+
+    @Test
+    public void unorderedListParseTest() throws DataValidationFailedException, URISyntaxException {
+        ContainerSchemaNode topContainerSchemaNode = (ContainerSchemaNode) TestUtils.resolveDataSchemaNode("cont", simpleContainerModule);
+        ListSchemaNode aceListSchemaNode = (ListSchemaNode) topContainerSchemaNode.getDataChildByName("lst2");
+        ToNormalizedNodeParser<Node<?>, MapNode, ListSchemaNode> mapNodeParser =
+                CnSnToNormalizedNodeParserFactory.getInstance().getMapNodeParser();
+        MapNode mapNode = mapNodeParser.parse(new ArrayList<Node<?>>(), aceListSchemaNode);
+        assertFalse(mapNode instanceof OrderedMapNode);
+    }
+
+    @Test
+    public void orderedLeafListParseTest() throws DataValidationFailedException, URISyntaxException {
+        ContainerSchemaNode topContainerSchemaNode = (ContainerSchemaNode) TestUtils.resolveDataSchemaNode("top", bug2111TestModule);
+        LeafListSchemaNode aceListSchemaNode = (LeafListSchemaNode) topContainerSchemaNode.getDataChildByName("ordered-leaf-list");
+        ToNormalizedNodeParser<Node<?>, LeafSetNode<?>, LeafListSchemaNode> leafSetNodeParser =
+                CnSnToNormalizedNodeParserFactory.getInstance().getLeafSetNodeParser();
+        LeafSetNode<?> leafSetNode = leafSetNodeParser.parse(new ArrayList<Node<?>>(), aceListSchemaNode);
+        assertTrue(leafSetNode instanceof OrderedLeafSetNode);
+    }
+
+    @Test
+    public void unorderedLeafListParseTest() throws DataValidationFailedException, URISyntaxException {
+        ContainerSchemaNode topContainerSchemaNode = (ContainerSchemaNode) TestUtils.resolveDataSchemaNode("cont", simpleContainerModule);
+        LeafListSchemaNode aceListSchemaNode = (LeafListSchemaNode) topContainerSchemaNode.getDataChildByName("lflst1");
+        ToNormalizedNodeParser<Node<?>, LeafSetNode<?>, LeafListSchemaNode> leafSetNodeParser =
+                CnSnToNormalizedNodeParserFactory.getInstance().getLeafSetNodeParser();
+        LeafSetNode<?> leafSetNode = leafSetNodeParser.parse(new ArrayList<Node<?>>(), aceListSchemaNode);
+        assertFalse(leafSetNode instanceof OrderedLeafSetNode);
+    }
+
+}
diff --git a/yang/yang-data-composite-node/src/test/resources/cnsn-to-normalized-node/yang/bug2180-test-model.yang b/yang/yang-data-composite-node/src/test/resources/cnsn-to-normalized-node/yang/bug2180-test-model.yang
new file mode 100644 (file)
index 0000000..c8c699d
--- /dev/null
@@ -0,0 +1,26 @@
+module bug2180-test-module {
+  yang-version 1;
+
+  namespace "urn:opendaylight:params:xml:ns:yang:controller:md:sal:bug2180:test";
+
+  prefix bug2180-test-module;
+
+  revision 2014-10-22 {
+    description "creating base model for netmod";
+  }
+
+  container top {
+    list ordered-list {
+      key id;
+      ordered-by user;
+      leaf id{
+        type string;
+      }
+    }
+
+    leaf-list ordered-leaf-list {
+      type string;
+      ordered-by user;      
+    }
+  }
+}
\ No newline at end of file
index 1491a14788dc04cd712ac026a854289d6db7a19d..2ee7ee174e31a65b9370f89665958198698cfb03 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema;
 
+import org.opendaylight.yangtools.yang.data.api.Node;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.Node;
 import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
@@ -45,7 +46,9 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMa
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeSchemaAwareBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeSchemaAwareBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedMapNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedMapNodeSchemaAwareBuilder;
 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.model.api.AnyXmlSchemaNode;
@@ -96,6 +99,10 @@ public final class Builders {
         return ImmutableOrderedLeafSetNodeBuilder.create();
     }
 
+    public static <T> ListNodeBuilder<T,LeafSetEntryNode<T>> orderedLeafSetBuilder(final LeafListSchemaNode schema) {
+        return ImmutableOrderedLeafSetNodeSchemaAwareBuilder.<T>create(schema);
+    }
+
     public static <T> ListNodeBuilder<T,LeafSetEntryNode<T>> leafSetBuilder(final LeafSetNode<T> node) {
         return ImmutableLeafSetNodeBuilder.create(node);
     }
@@ -143,6 +150,10 @@ public final class Builders {
         return ImmutableOrderedMapNodeBuilder.create();
     }
 
+    public static CollectionNodeBuilder<MapEntryNode, OrderedMapNode> orderedMapBuilder(final ListSchemaNode schema) {
+        return ImmutableOrderedMapNodeSchemaAwareBuilder.create(schema);
+    }
+
     public static CollectionNodeBuilder<UnkeyedListEntryNode, UnkeyedListNode> unkeyedListBuilder() {
         return ImmutableUnkeyedListNodeBuilder.create();
     }
diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedLeafSetNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedLeafSetNodeSchemaAwareBuilder.java
new file mode 100644 (file)
index 0000000..5d46718
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl;
+
+import com.google.common.collect.Sets;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
+import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException;
+import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
+
+import com.google.common.base.Preconditions;
+
+public final class ImmutableOrderedLeafSetNodeSchemaAwareBuilder<T> extends ImmutableOrderedLeafSetNodeBuilder<T> {
+
+    private final LeafListSchemaNode schema;
+
+    private ImmutableOrderedLeafSetNodeSchemaAwareBuilder(final LeafListSchemaNode schema) {
+        this.schema = Preconditions.checkNotNull(schema);
+        super.withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(schema.getQName()));
+    }
+
+    public ImmutableOrderedLeafSetNodeSchemaAwareBuilder(final LeafListSchemaNode schema, final ImmutableOrderedLeafSetNode<T> node) {
+        super(node);
+        this.schema = Preconditions.checkNotNull(schema);
+        // FIXME: Preconditions.checkArgument(schema.getQName().equals(node.getIdentifier()));
+        super.withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(schema.getQName()));
+    }
+
+    public static <T> ListNodeBuilder<T, LeafSetEntryNode<T>> create(final LeafListSchemaNode schema) {
+        return new ImmutableOrderedLeafSetNodeSchemaAwareBuilder<>(schema);
+    }
+
+    public static <T> ListNodeBuilder<T, LeafSetEntryNode<T>> create(final LeafListSchemaNode schema, final LeafSetNode<T> node) {
+        if (!(node instanceof ImmutableOrderedLeafSetNode<?>)) {
+            throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass()));
+        }
+
+        return new ImmutableOrderedLeafSetNodeSchemaAwareBuilder<T>(schema, (ImmutableOrderedLeafSetNode<T>) node);
+    }
+
+    @Override
+    public ListNodeBuilder<T, LeafSetEntryNode<T>> withChildValue(final T value) {
+        // TODO check value type
+        return super.withChildValue(value);
+    }
+
+    @Override
+    public ListNodeBuilder<T, LeafSetEntryNode<T>> withChild(final LeafSetEntryNode<T> child) {
+        Preconditions.checkArgument(schema.getQName().equals(child.getNodeType()),
+                "Incompatible node type, should be: %s, is: %s", schema.getQName(), child.getNodeType());
+        // TODO check value type using TypeProvider ?
+        DataValidationException.checkLegalChild(schema.getQName().equals(child.getNodeType()), child.getIdentifier(), schema, Sets.newHashSet(schema.getQName()));
+        return super.withChild(child);
+    }
+
+    @Override
+    public ListNodeBuilder<T, LeafSetEntryNode<T>> withNodeIdentifier(final YangInstanceIdentifier.NodeIdentifier nodeIdentifier) {
+        throw new UnsupportedOperationException("Node identifier created from schema");
+    }
+}
index 272a678438580a7202b80805ebcf0239bab9b30d..e7d68d992894f7a87b39039b12cf58545f847723 100644 (file)
@@ -7,22 +7,22 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl;
 
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
+import com.google.common.base.Optional;
+import com.google.common.collect.Iterables;
 import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
+import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableNormalizedNode;
 
-import com.google.common.base.Optional;
-import com.google.common.collect.Iterables;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 
 public class ImmutableOrderedMapNodeBuilder
         implements CollectionNodeBuilder<MapEntryNode, OrderedMapNode> {
@@ -46,7 +46,7 @@ public class ImmutableOrderedMapNodeBuilder
         return new ImmutableOrderedMapNodeBuilder();
     }
 
-    public static CollectionNodeBuilder<MapEntryNode, OrderedMapNode> create(final OrderedMapNode node) {
+    public static CollectionNodeBuilder<MapEntryNode, OrderedMapNode> create(final MapNode node) {
         if (!(node instanceof ImmutableOrderedMapNode)) {
             throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass()));
         }
diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedMapNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOrderedMapNodeSchemaAwareBuilder.java
new file mode 100644 (file)
index 0000000..25d6dab
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Sets;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
+import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
+import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException;
+import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+
+import com.google.common.base.Preconditions;
+
+public class ImmutableOrderedMapNodeSchemaAwareBuilder extends ImmutableOrderedMapNodeBuilder {
+
+    private final ListSchemaNode schema;
+
+    protected ImmutableOrderedMapNodeSchemaAwareBuilder(final ListSchemaNode schema) {
+        this.schema = Preconditions.checkNotNull(schema);
+        super.withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(schema.getQName()));
+    }
+
+    protected ImmutableOrderedMapNodeSchemaAwareBuilder(final ListSchemaNode schema, final ImmutableOrderedMapNode node) {
+        super(node);
+        this.schema = Preconditions.checkNotNull(schema);
+        super.withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(schema.getQName()));
+    }
+
+    public static CollectionNodeBuilder<MapEntryNode, OrderedMapNode> create(final ListSchemaNode schema) {
+        return new ImmutableOrderedMapNodeSchemaAwareBuilder(schema);
+    }
+
+    public static CollectionNodeBuilder<MapEntryNode, OrderedMapNode> create(final ListSchemaNode schema,
+        final MapNode node) {
+        if (!(node instanceof ImmutableOrderedMapNode)) {
+            throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass()));
+        }
+
+        return new ImmutableOrderedMapNodeSchemaAwareBuilder(schema, (ImmutableOrderedMapNode) node);
+    }
+
+    @Override
+    public CollectionNodeBuilder<MapEntryNode, OrderedMapNode> withChild(final MapEntryNode child) {
+        DataValidationException.checkLegalChild(schema.getQName().equals(child.getNodeType()), child.getIdentifier(), schema, Sets.newHashSet(schema.getQName()));
+        return super.withChild(child);
+    }
+
+    @Override
+    public CollectionNodeBuilder<MapEntryNode, OrderedMapNode> withNodeIdentifier(final YangInstanceIdentifier.NodeIdentifier nodeIdentifier) {
+        throw new UnsupportedOperationException("Node identifier created from schema");
+    }
+}
index aaa2f219537fd6ba8e3f39187d38dadb51c171ee..4cdae37f3554f18f13d4f99872f3235f7839c310 100644 (file)
@@ -27,7 +27,8 @@ public abstract class LeafSetNodeBaseParser<E> implements
     @Override
     public final LeafSetNode<?> parse(Iterable<E> childNodes, LeafListSchemaNode schema) {
 
-        ListNodeBuilder<Object, LeafSetEntryNode<Object>> leafListBuilder = Builders.leafSetBuilder(schema);
+        ListNodeBuilder<Object, LeafSetEntryNode<Object>> leafListBuilder =
+          (schema.isUserOrdered() ? Builders.orderedLeafSetBuilder(schema) : Builders.leafSetBuilder(schema));
         for (E childNode : childNodes) {
             LeafSetEntryNode<?> builtChild = getLeafSetEntryNodeParser().parse(
                     Collections.singletonList(childNode), schema);
index 6aeb1edbd6dd29908f146163b24f2384f0dbb513..581d5f4b781633d4f0da8509d25a38781fbcc6cb 100644 (file)
@@ -7,15 +7,16 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser;
 
-import java.util.Collections;
-
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
+import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.transform.ToNormalizedNodeParser;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 
+import java.util.Collections;
+
 /**
  * Abstract(base) parser for MapNodes, parses elements of type E.
  *
@@ -25,14 +26,25 @@ public abstract class MapNodeBaseParser<E> implements ToNormalizedNodeParser<E,
 
     @Override
     public final MapNode parse(Iterable<E> childNodes, ListSchemaNode schema) {
-        CollectionNodeBuilder<MapEntryNode, MapNode> listBuilder = Builders.mapBuilder(schema);
+        if (schema.isUserOrdered()) {
+            CollectionNodeBuilder<MapEntryNode, OrderedMapNode> listBuilder = Builders.orderedMapBuilder(schema);
 
-        for (E childNode : childNodes) {
-            MapEntryNode listChild = getMapEntryNodeParser().parse(Collections.singletonList(childNode), schema);
-            listBuilder.withChild(listChild);
-        }
+            for (E childNode : childNodes) {
+                MapEntryNode listChild = getMapEntryNodeParser().parse(Collections.singletonList(childNode), schema);
+                listBuilder.withChild(listChild);
+            }
+
+            return listBuilder.build();
+        } else {
+            CollectionNodeBuilder<MapEntryNode, MapNode> listBuilder = Builders.mapBuilder(schema);
 
-        return listBuilder.build();
+            for (E childNode : childNodes) {
+                MapEntryNode listChild = getMapEntryNodeParser().parse(Collections.singletonList(childNode), schema);
+                listBuilder.withChild(listChild);
+            }
+
+            return listBuilder.build();
+        }
     }
 
     /**