X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fapi%2Fschema%2Ftree%2Fspi%2FTreeNodeFactory.java;h=05af016687b2dca742d7285224702f43402b86a1;hb=f57da82ed313a3c17a5f8b2a7ee3ec5bb5ff4263;hp=4f0a2201d7c58aa59770e80099c1b68bd4608871;hpb=e8582f5d9750a6eaa258143ac6f78c352c8e79c3;p=yangtools.git diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNodeFactory.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNodeFactory.java index 4f0a2201d7..05af016687 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNodeFactory.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/spi/TreeNodeFactory.java @@ -7,6 +7,9 @@ */ package org.opendaylight.yangtools.yang.data.api.schema.tree.spi; +import java.util.HashMap; +import java.util.Map; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.OrderedNodeContainer; @@ -20,6 +23,70 @@ public final class TreeNodeFactory { throw new UnsupportedOperationException("Utility class should not be instantiated"); } + /** + * Method creates and returns Container root Node and whole subtree for each child node specified in children nodes. + *
+ * Reason why is method used recursively is that for each child in children nodes there is call to + * {@link TreeNodeFactory#createTreeNodeRecursively}. Each call to createTreeNodeRecursively + * calls either {@link #createNormalizedNodeRecursively} or {@link #createOrderedNodeRecursively} + * which depends on type of child node. + *
The root node that is returned holds reference to data node and whole subtree of children also containing references + * to data nodes. + * + * @param version version of indexed data + * @param data reference to data node + * @param children direct children of root node that is being created + * @return Root node with reference to data node and whole subtree of child nodes + */ + @Deprecated + private static AbstractContainerNode createNodeRecursively(final Version version, final NormalizedNode data, + final Iterable> children) { + + final Map map = new HashMap<>(); + for (NormalizedNode child : children) { + map.put(child.getIdentifier(), TreeNodeFactory.createTreeNodeRecursively(child, version)); + } + + return new MaterializedContainerNode(data, version, map, version); + } + + /** + * Method creates and returns Normalized Node Container as root and recursively creates whole subtree + * from all of the container child iterables stored in {@link org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer#getValue()} + *
+ * The reason why is this method called recursively is that in background method calls {@link TreeNodeFactory#createTreeNodeRecursively} + * for each child stored in NormalizedNode and after each child is created the method calls again {@link #createNormalizedNodeRecursively} method + * until all of the children are resolved. + * + * @param version version of indexed data + * @param container Normalized Node Container + * @return Normalized Node Container as root and all whole subtree created from container iterables. + * + */ + @Deprecated + private static AbstractContainerNode createNormalizedNodeRecursively(final Version version, + final NormalizedNodeContainer> container) { + return createNodeRecursively(version, container, container.getValue()); + } + + /** + * Method creates and returns Ordered Node Container as root and recursively creates whole subtree + * from all of the container child iterables stored in {@link org.opendaylight.yangtools.yang.data.api.schema.OrderedNodeContainer#getValue()} + *
+ * The reason why is this method called recursively is that in background method calls {@link TreeNodeFactory#createTreeNodeRecursively} + * for each child stored in NormalizedNode and after each child is created the method calls again {@link #createNormalizedNodeRecursively} method + * until all of the children are resolved. + * + * @param version version of indexed data + * @param container Ordered Node Container + * @return Normalized Ordered Container as root and all whole subtree created from container iterables. + */ + @Deprecated + private static AbstractContainerNode createOrderedNodeRecursively(final Version version, + final OrderedNodeContainer> container) { + return createNodeRecursively(version, container, container.getValue()); + } + /** * Create a new AbstractTreeNode from a data node, descending recursively as needed. * This method should only ever be used for new data. @@ -27,18 +94,21 @@ public final class TreeNodeFactory { * @param data data node * @param version data node version * @return new AbstractTreeNode instance, covering the data tree provided + * + * @deprecated Use lazy node initialization via {@link #createTreeNode(NormalizedNode, Version)}. */ - public static final TreeNode createTreeNodeRecursively(final NormalizedNode data, final Version version) { + @Deprecated + public static TreeNode createTreeNodeRecursively(final NormalizedNode data, final Version version) { if (data instanceof NormalizedNodeContainer) { @SuppressWarnings("unchecked") NormalizedNodeContainer> container = (NormalizedNodeContainer>) data; - return ContainerNode.createNormalizedNodeRecursively(version, container); + return createNormalizedNodeRecursively(version, container); } if (data instanceof OrderedNodeContainer) { @SuppressWarnings("unchecked") OrderedNodeContainer> container = (OrderedNodeContainer>) data; - return ContainerNode.createOrderedNodeRecursively(version, container); + return createOrderedNodeRecursively(version, container); } return new ValueNode(data, version); @@ -51,16 +121,18 @@ public final class TreeNodeFactory { * @param version data node version * @return new AbstractTreeNode instance, covering the data tree provided */ - public static final TreeNode createTreeNode(final NormalizedNode data, final Version version) { + public static TreeNode createTreeNode(final NormalizedNode data, final Version version) { if (data instanceof NormalizedNodeContainer) { @SuppressWarnings("unchecked") - NormalizedNodeContainer> container = (NormalizedNodeContainer>) data; - return ContainerNode.createNormalizedNode(version, container); + final NormalizedNodeContainer> container = + (NormalizedNodeContainer>) data; + return new SimpleContainerNode(container, version); } if (data instanceof OrderedNodeContainer) { @SuppressWarnings("unchecked") - OrderedNodeContainer> container = (OrderedNodeContainer>) data; - return ContainerNode.createOrderedNode(version, container); + final OrderedNodeContainer> container = + (OrderedNodeContainer>) data; + return new SimpleContainerNode(container, version); } return new ValueNode(data, version); }