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=688020401c844106b936865092bc257038e1e4fc;hb=11f324d00534f75932df67ba737efe261271cb47;hp=6d3f9a3cbfe02f07621e1999ca783985f8d66c25;hpb=058f1eebd2c0ba53acbd6eda83f50af4b1ddb473;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 6d3f9a3cbf..688020401c 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,32 +1,46 @@ +/* + * 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 java.util.Optional; +import org.eclipse.jdt.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.NormalizedNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot; +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.model.api.SchemaContext; - -final class InMemoryDataTreeSnapshot implements DataTreeSnapshot { - private final RootModificationApplyOperation applyOper; - private final SchemaContext schemaContext; - private final TreeNode rootNode; - - InMemoryDataTreeSnapshot(final SchemaContext schemaContext, final TreeNode rootNode, - final RootModificationApplyOperation applyOper) { - this.schemaContext = Preconditions.checkNotNull(schemaContext); - this.rootNode = Preconditions.checkNotNull(rootNode); - this.applyOper = Preconditions.checkNotNull(applyOper); +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; + +final class InMemoryDataTreeSnapshot extends AbstractCursorAware implements CursorAwareDataTreeSnapshot, + EffectiveModelContextProvider { + private final @NonNull RootApplyStrategy applyOper; + private final @NonNull EffectiveModelContext schemaContext; + private final @NonNull TreeNode rootNode; + + InMemoryDataTreeSnapshot(final EffectiveModelContext schemaContext, final TreeNode rootNode, + final RootApplyStrategy applyOper) { + this.schemaContext = requireNonNull(schemaContext); + this.rootNode = requireNonNull(rootNode); + this.applyOper = requireNonNull(applyOper); } TreeNode getRootNode() { return rootNode; } - SchemaContext getSchemaContext() { + @Override + public EffectiveModelContext getEffectiveModelContext() { return schemaContext; } @@ -40,9 +54,16 @@ final class InMemoryDataTreeSnapshot implements DataTreeSnapshot { return new InMemoryDataTreeModification(this, applyOper); } + @Override + public Optional openCursor(final YangInstanceIdentifier path) { + return NormalizedNodes.findNode(rootNode.getData(), path).map(root -> { + 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 +}