Merge "BUG-509: Move DataTree concepts into separate package"
[controller.git] / opendaylight / md-sal / sal-dom-broker / src / main / java / org / opendaylight / controller / md / sal / dom / store / impl / tree / data / InMemoryDataTreeSnapshot.java
1 package org.opendaylight.controller.md.sal.dom.store.impl.tree.data;
2
3 import org.opendaylight.controller.md.sal.dom.store.impl.tree.DataTreeSnapshot;
4 import org.opendaylight.controller.md.sal.dom.store.impl.tree.ModificationApplyOperation;
5 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
6 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
7 import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeUtils;
8 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
9
10 import com.google.common.base.Optional;
11 import com.google.common.base.Preconditions;
12
13 final class InMemoryDataTreeSnapshot implements DataTreeSnapshot {
14     private final SchemaContext schemaContext;
15     private final StoreMetadataNode rootNode;
16
17     InMemoryDataTreeSnapshot(final SchemaContext schemaContext, final StoreMetadataNode rootNode) {
18         this.schemaContext = Preconditions.checkNotNull(schemaContext);
19         this.rootNode = Preconditions.checkNotNull(rootNode);
20     }
21
22         StoreMetadataNode getRootNode() {
23         return rootNode;
24     }
25
26     SchemaContext getSchemaContext() {
27         return schemaContext;
28     }
29
30     @Override
31         public Optional<NormalizedNode<?, ?>> readNode(final InstanceIdentifier path) {
32         return NormalizedNodeUtils.findNode(rootNode.getData(), path);
33     }
34
35     @Override
36         public InMemoryDataTreeModification newModification(ModificationApplyOperation applyOper) {
37                 return new InMemoryDataTreeModification(this, applyOper);
38         }
39
40     @Override
41     public String toString() {
42         return rootNode.getSubtreeVersion().toString();
43     }
44
45 }