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=d62094290c308059b7765c71ff61f3f5fd6ac01b;hb=f6eae2a11c570c1097eb9202debc7e36ce72ef6d;hp=887a4bfafad5e1e5113223223b8cd195150f6341;hpb=6c8e31286e3adaf52ed3decce3d78198ef88338a;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 887a4bfafa..d62094290c 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 @@ -1,12 +1,26 @@ +/* + * Copyright (c) 2014 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.tree; - -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier; +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.DataTreeConfiguration; +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; /** @@ -14,17 +28,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 } @Override - public InMemoryDataTree create() { - final NodeIdentifier root = new NodeIdentifier(SchemaContext.NAME); - final NormalizedNode data = Builders.containerBuilder().withNodeIdentifier(root).build(); + public TipProducingDataTree create(final TreeType treeType) { + return new InMemoryDataTree(TreeNodeFactory.createTreeNode(rootContainer, Version.initial()), + treeType, YangInstanceIdentifier.EMPTY, null); + } + + @Override + public TipProducingDataTree create(final DataTreeConfiguration treeConfig) { + return new InMemoryDataTree(TreeNodeFactory.createTreeNode(rootContainer, Version.initial()), + treeConfig, 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); } /** @@ -32,7 +73,7 @@ public final class InMemoryDataTreeFactory implements DataTreeFactory { * * @return Data tree factory instance. */ - public static final InMemoryDataTreeFactory getInstance() { + public static InMemoryDataTreeFactory getInstance() { return INSTANCE; } }