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%2FInMemoryDataTreeSnapshot.java;h=7cc443281c57f8e22a365643ed7e9e1582312a89;hb=8f2876d895936b36aba1fc3ec65b18900e559184;hp=7c1c1719a462d0419d3cb029b0ecc0a054b61d27;hpb=c09f1b86f83b288bd412c480c2c7b27ee2174258;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeSnapshot.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeSnapshot.java index 7c1c1719a4..7cc443281c 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeSnapshot.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeSnapshot.java @@ -1,25 +1,36 @@ +/* + * 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 static com.google.common.base.Preconditions.checkArgument; +import static java.util.Objects.requireNonNull; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +import java.util.Optional; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes; +import org.opendaylight.yangtools.yang.data.api.schema.tree.CursorAwareDataTreeSnapshot; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshotCursor; import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeUtils; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -final class InMemoryDataTreeSnapshot implements DataTreeSnapshot { - private final ModificationApplyOperation applyOper; +final class InMemoryDataTreeSnapshot extends AbstractCursorAware implements CursorAwareDataTreeSnapshot { + private final RootModificationApplyOperation applyOper; private final SchemaContext schemaContext; private final TreeNode rootNode; InMemoryDataTreeSnapshot(final SchemaContext schemaContext, final TreeNode rootNode, - final ModificationApplyOperation applyOper) { - this.schemaContext = Preconditions.checkNotNull(schemaContext); - this.rootNode = Preconditions.checkNotNull(rootNode); - this.applyOper = Preconditions.checkNotNull(applyOper); + final RootModificationApplyOperation applyOper) { + this.schemaContext = requireNonNull(schemaContext); + this.rootNode = requireNonNull(rootNode); + this.applyOper = requireNonNull(applyOper); } TreeNode getRootNode() { @@ -31,8 +42,8 @@ final class InMemoryDataTreeSnapshot implements DataTreeSnapshot { } @Override - public Optional> readNode(final InstanceIdentifier path) { - return NormalizedNodeUtils.findNode(rootNode.getData(), path); + public Optional> readNode(final YangInstanceIdentifier path) { + return NormalizedNodes.findNode(rootNode.getData(), path); } @Override @@ -40,9 +51,20 @@ final class InMemoryDataTreeSnapshot implements DataTreeSnapshot { return new InMemoryDataTreeModification(this, applyOper); } + @Override + public DataTreeSnapshotCursor createCursor(@Nonnull final YangInstanceIdentifier path) { + final Optional> maybeRoot = NormalizedNodes.findNode(rootNode.getData(), path); + if (!maybeRoot.isPresent()) { + return null; + } + + final NormalizedNode root = maybeRoot.get(); + checkArgument(root instanceof NormalizedNodeContainer, "Child %s is not a container", path); + return openCursor(new InMemoryDataTreeSnapshotCursor(this, path, (NormalizedNodeContainer)root)); + } + @Override public String toString() { return rootNode.getSubtreeVersion().toString(); } - -} \ No newline at end of file +}