BUG 1975 - yang unkeyed list is transformed to map node
[yangtools.git] / yang / yang-data-operations / src / main / java / org / opendaylight / yangtools / yang / data / operations / AbstractContainerNodeModification.java
index fd6b9c6ab183bc1f13ddc5f5715b331fdde67c1f..3534a563fa46c4e121cac9087a20d2b8454c8e53 100644 (file)
@@ -23,6 +23,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
 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.UnkeyedListNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
@@ -174,6 +175,7 @@ abstract class AbstractContainerNodeModification<S, N extends DataContainerNode<
         private static final LeafSetNodeModification LEAF_SET_NODE_MODIFICATION = new LeafSetNodeModification();
         private static final AugmentationNodeModification AUGMENTATION_NODE_MODIFICATION = new AugmentationNodeModification();
         private static final MapNodeModification MAP_NODE_MODIFICATION = new MapNodeModification();
+        private static final UnkeyedListNodeModification UNKEYED_LIST_NODE_MODIFICATION = new UnkeyedListNodeModification();
         private static final ContainerNodeModification CONTAINER_NODE_MODIFICATION = new ContainerNodeModification();
         private static final ChoiceNodeModification CHOICE_NODE_MODIFICATION = new ChoiceNodeModification();
 
@@ -190,7 +192,11 @@ abstract class AbstractContainerNodeModification<S, N extends DataContainerNode<
             } else if (schemaChild instanceof AugmentationSchema) {
                 return onAugmentationNode((AugmentationSchema) schemaChild, actual, modification, operations);
             } else if (schemaChild instanceof ListSchemaNode) {
-                return onMapNode((ListSchemaNode) schemaChild, actual, modification, operations);
+                if (((ListSchemaNode)schemaChild).getKeyDefinition().isEmpty()) {
+                    return onUnkeyedNode((ListSchemaNode) schemaChild, actual, modification, operations);
+                } else {
+                    return onMapNode((ListSchemaNode) schemaChild, actual, modification, operations);
+                }
             } else if (schemaChild instanceof org.opendaylight.yangtools.yang.model.api.ChoiceNode) {
                 return onChoiceNode((org.opendaylight.yangtools.yang.model.api.ChoiceNode) schemaChild, actual,
                         modification, operations);
@@ -220,6 +226,16 @@ abstract class AbstractContainerNodeModification<S, N extends DataContainerNode<
                     (Optional<MapNode>) modification, operations);
         }
 
+        private static Optional<? extends DataContainerChild<?, ?>> onUnkeyedNode(ListSchemaNode schemaChild,
+                Optional<? extends DataContainerChild<?, ?>> actual,
+                        Optional<? extends DataContainerChild<?, ?>> modification, OperationStack operations)
+                                throws DataModificationException {
+            checkType(actual, UnkeyedListNode.class);
+            checkType(modification, UnkeyedListNode.class);
+            return UNKEYED_LIST_NODE_MODIFICATION.modify(schemaChild, (Optional<UnkeyedListNode>) actual,
+                    (Optional<UnkeyedListNode>) modification, operations);
+        }
+
         private static Optional<? extends DataContainerChild<?, ?>> onAugmentationNode(AugmentationSchema schemaChild,
                 Optional<? extends DataContainerChild<?, ?>> actual,
                 Optional<? extends DataContainerChild<?, ?>> modification, OperationStack operations)