X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=restconf%2Frestconf-nb-rfc8040%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Frestconf%2Fnb%2Frfc8040%2Frests%2Futils%2FReadDataTransactionUtil.java;h=aca94271bdf65807d8fad4654ed045cdcb1dbda2;hb=c7e371eb1e23ba3b86747a27172acca78a449706;hp=fc55fa764909993f87ad47d49254d721f9e56df7;hpb=427ce04fcab7307276f66192c9ee25b0b35a89e6;p=netconf.git diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java index fc55fa7649..aca94271bd 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ReadDataTransactionUtil.java @@ -51,14 +51,21 @@ import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; 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.NormalizedNode; +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.UnkeyedListEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeAttrBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree; @@ -575,10 +582,19 @@ public final class ReadDataTransactionUtil { * data node of state data * @return {@link NormalizedNode} */ + @SuppressWarnings("unchecked") @Nonnull private static NormalizedNode prepareData(@Nonnull final NormalizedNode configDataNode, @Nonnull final NormalizedNode stateDataNode) { - if (configDataNode instanceof MapNode) { + if (configDataNode instanceof OrderedMapNode) { + final CollectionNodeBuilder builder = Builders + .orderedMapBuilder().withNodeIdentifier(((MapNode) configDataNode).getIdentifier()); + + mapValueToBuilder( + ((OrderedMapNode) configDataNode).getValue(), ((OrderedMapNode) stateDataNode).getValue(), builder); + + return builder.build(); + } else if (configDataNode instanceof MapNode) { final CollectionNodeBuilder builder = ImmutableNodes .mapNodeBuilder().withNodeIdentifier(((MapNode) configDataNode).getIdentifier()); @@ -620,8 +636,36 @@ public final class ReadDataTransactionUtil { return builder.build(); } else if (configDataNode instanceof LeafNode) { return ImmutableNodes.leafNode(configDataNode.getNodeType(), configDataNode.getValue()); + } else if (configDataNode instanceof OrderedLeafSetNode) { + final ListNodeBuilder> builder = Builders + .orderedLeafSetBuilder().withNodeIdentifier(((OrderedLeafSetNode) configDataNode).getIdentifier()); + + mapValueToBuilder(((OrderedLeafSetNode) configDataNode).getValue(), + ((OrderedLeafSetNode) stateDataNode).getValue(), builder); + return builder.build(); + } else if (configDataNode instanceof LeafSetNode) { + final ListNodeBuilder> builder = Builders + .leafSetBuilder().withNodeIdentifier(((LeafSetNode) configDataNode).getIdentifier()); + + mapValueToBuilder(((LeafSetNode) configDataNode).getValue(), + ((LeafSetNode) stateDataNode).getValue(), builder); + return builder.build(); + } else if (configDataNode instanceof UnkeyedListNode) { + final CollectionNodeBuilder builder = Builders + .unkeyedListBuilder().withNodeIdentifier(((UnkeyedListNode) configDataNode).getIdentifier()); + + mapValueToBuilder(((UnkeyedListNode) configDataNode).getValue(), + ((UnkeyedListNode) stateDataNode).getValue(), builder); + return builder.build(); + } else if (configDataNode instanceof UnkeyedListEntryNode) { + final DataContainerNodeAttrBuilder builder = Builders + .unkeyedListEntryBuilder().withNodeIdentifier(((UnkeyedListEntryNode) configDataNode).getIdentifier()); + + mapValueToBuilder(((UnkeyedListEntryNode) configDataNode).getValue(), + ((UnkeyedListEntryNode) stateDataNode).getValue(), builder); + return builder.build(); } else { - throw new RestconfDocumentedException("Bad type of node."); + throw new RestconfDocumentedException("Unexpected node type: " + configDataNode.getClass().getName()); } }