X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2Ftree%2FInMemoryDataTreeFactory.java;h=a60497fd448117d9e14a4f9652062b8fd85a5f36;hb=0464eb37c7b6fd7becca5cc819b1a758f18d3c89;hp=62eb30ff0ab54fef9b3519f273b547960989256e;hpb=b43b9ed6f627a4a1d2ecc6081ed4f0024761e4a3;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeFactory.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeFactory.java index 62eb30ff0a..a60497fd44 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeFactory.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeFactory.java @@ -7,12 +7,19 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.tree; +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.NodeIdentifierWithPredicates; +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.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeFactory; +import org.opendaylight.yangtools.yang.data.api.schema.tree.TipProducingDataTree; +import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNodeFactory; import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version; -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.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.model.api.SchemaContext; /** @@ -20,17 +27,44 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext; */ public final class InMemoryDataTreeFactory implements DataTreeFactory { private static final InMemoryDataTreeFactory INSTANCE = new InMemoryDataTreeFactory(); + private final NormalizedNode rootContainer = ImmutableNodes.containerNode(SchemaContext.NAME); private InMemoryDataTreeFactory() { // Never instantiated externally } + @Deprecated @Override - public InMemoryDataTree create() { - final NodeIdentifier root = new NodeIdentifier(SchemaContext.NAME); - final NormalizedNode data = Builders.containerBuilder().withNodeIdentifier(root).build(); + public TipProducingDataTree create() { + return create(TreeType.OPERATIONAL); + } + + @Override + public TipProducingDataTree create(final TreeType treeType) { + return new InMemoryDataTree(TreeNodeFactory.createTreeNode(rootContainer, Version.initial()), + treeType, YangInstanceIdentifier.EMPTY, null); + } + + @Override + public TipProducingDataTree create(final TreeType treeType, final YangInstanceIdentifier rootPath) { + if (rootPath.isEmpty()) { + return create(treeType); + } + final NormalizedNode root; + final PathArgument arg = rootPath.getLastPathArgument(); + if (arg instanceof NodeIdentifier) { + root = rootContainer; + } else if (arg instanceof NodeIdentifierWithPredicates) { + final DataContainerNodeBuilder b = ImmutableNodes.mapEntryBuilder(); + b.withNodeIdentifier((NodeIdentifierWithPredicates) arg); + root = b.build(); + } else { + + // FIXME: implement augmentations and leaf-lists + throw new IllegalArgumentException("Unsupported root node " + arg); + } - return new InMemoryDataTree(TreeNodeFactory.createTreeNode(data, Version.initial()), null); + return new InMemoryDataTree(TreeNodeFactory.createTreeNode(root, Version.initial()), treeType, rootPath, null); } /** @@ -38,7 +72,7 @@ public final class InMemoryDataTreeFactory implements DataTreeFactory { * * @return Data tree factory instance. */ - public static final InMemoryDataTreeFactory getInstance() { + public static InMemoryDataTreeFactory getInstance() { return INSTANCE; } }