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%2FInMemoryDataTreeModification.java;h=cf9b2c3377c92f46daf21b8361bccd345e603335;hb=fce70654f7d387a8454c8441459ffff03ad0f1a2;hp=9bf2d3fdfc9072afa4cbadc43b2abca95e37d393;hpb=a8dcbbbdacb575707070eea2690c0b536e6b6c4b;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeModification.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeModification.java index 9bf2d3fdfc..cf9b2c3377 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeModification.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeModification.java @@ -9,7 +9,6 @@ package org.opendaylight.yangtools.yang.data.impl.schema.tree; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.collect.Iterables; import java.util.Collection; import java.util.Map.Entry; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; @@ -76,7 +75,7 @@ final class InMemoryDataTreeModification extends AbstractCursorAware implements public void merge(final YangInstanceIdentifier path, final NormalizedNode data) { checkSealed(); checkIdentifierReferencesData(path, data); - resolveModificationFor(path).merge(data); + resolveModificationFor(path).merge(data, version); } @Override @@ -93,7 +92,8 @@ final class InMemoryDataTreeModification extends AbstractCursorAware implements * the requested path which has been modified. If no such node exists, * we use the node itself. */ - final Entry entry = StoreTreeNodes.findClosestsOrFirstMatch(rootNode, path, ModifiedNode.IS_TERMINAL_PREDICATE); + final Entry entry = StoreTreeNodes.findClosestsOrFirstMatch(rootNode, + path, ModifiedNode.IS_TERMINAL_PREDICATE); final YangInstanceIdentifier key = entry.getKey(); final ModifiedNode mod = entry.getValue(); @@ -113,8 +113,7 @@ final class InMemoryDataTreeModification extends AbstractCursorAware implements } try { - return resolveModificationStrategy(path).apply(modification, modification.getOriginal(), - version); + return resolveModificationStrategy(path).apply(modification, modification.getOriginal(), version); } catch (final Exception e) { LOG.error("Could not create snapshot for {}:{}", path, modification, e); throw e; @@ -155,12 +154,12 @@ final class InMemoryDataTreeModification extends AbstractCursorAware implements final Optional potential = operation.getChild(pathArg); if (!potential.isPresent()) { throw new SchemaValidationFailedException(String.format("Child %s is not present in schema tree.", - Iterables.toString(Iterables.limit(path.getPathArguments(), i)))); + path.getAncestor(i))); } operation = potential.get(); ++i; - modification = modification.modifyChild(pathArg, operation.getChildPolicy()); + modification = modification.modifyChild(pathArg, operation, version); } return OperationWithModification.from(operation, modification); @@ -271,13 +270,14 @@ final class InMemoryDataTreeModification extends AbstractCursorAware implements return openCursor(new InMemoryDataTreeModificationCursor(this, path, op)); } + @Override public void ready() { final boolean wasRunning = SEALED_UPDATER.compareAndSet(this, 0, 1); Preconditions.checkState(wasRunning, "Attempted to seal an already-sealed Data Tree."); AbstractReadyIterator current = AbstractReadyIterator.create(rootNode, strategyTree); do { - current = current.process(); + current = current.process(version); } while (current != null); } }