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%2FOperationWithModification.java;h=d22854dc889b21d06e57ca11928dd74e9281badf;hb=bf405586fc69c3781311cfb8ac19ba93b670ec8d;hp=8b39808b2c3e903d47e62163b2f8ce1484a3deca;hpb=a8dcbbbdacb575707070eea2690c0b536e6b6c4b;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/OperationWithModification.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/OperationWithModification.java index 8b39808b2c..d22854dc88 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/OperationWithModification.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/OperationWithModification.java @@ -12,7 +12,6 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; 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.tree.spi.TreeNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version; @@ -40,49 +39,16 @@ final class OperationWithModification { applyOperation.verifyStructure(value, false); } - private void recursiveMerge(final NormalizedNode data) { - if (data instanceof NormalizedNodeContainer) { - @SuppressWarnings({ "rawtypes", "unchecked" }) - final - NormalizedNodeContainer> dataContainer = (NormalizedNodeContainer) data; - - /* - * if there was write before on this node and it is of NormalizedNodeContainer type - * merge would overwrite our changes. So we create write modifications from data children to - * retain children created by past write operation. - * These writes will then be pushed down in the tree while there are merge modifications on these children - */ - if (modification.getOperation() == LogicalOperation.WRITE) { - @SuppressWarnings({ "rawtypes", "unchecked" }) - final - NormalizedNodeContainer> odlDataContainer = - (NormalizedNodeContainer) modification.getWrittenValue(); - for (final NormalizedNode child : odlDataContainer.getValue()) { - final PathArgument childId = child.getIdentifier(); - forChild(childId).write(child); - } - } - for (final NormalizedNode child : dataContainer.getValue()) { - final PathArgument childId = child.getIdentifier(); - forChild(childId).recursiveMerge(child); - } - } - - modification.merge(data); - } - - void merge(final NormalizedNode data) { + void merge(final NormalizedNode data, final Version version) { /* * A merge operation will end up overwriting parts of the tree, retaining others. We want to * make sure we do not validate the complete resulting structure, but rather just what was * written. In order to do that, we first pretend the data was written, run verification and * then perform the merge -- with the explicit assumption that adding the newly-validated * data with the previously-validated data will not result in invalid data. - * - * FIXME: Should be this moved to recursive merge and run for each node? */ - applyOperation.verifyStructure(data, false); - recursiveMerge(data); + applyOperation.verifyStructure(data, true); + applyOperation.mergeIntoModifiedNode(modification, data, version); } void delete() { @@ -139,14 +105,4 @@ final class OperationWithModification { final ModifiedNode modification) { return new OperationWithModification(operation, modification); } - - private OperationWithModification forChild(final PathArgument childId) { - final Optional maybeChildOp = applyOperation.getChild(childId); - Preconditions.checkArgument(maybeChildOp.isPresent(), "Attempted to apply operation to non-existent child %s", childId); - - final ModificationApplyOperation childOp = maybeChildOp.get(); - final ModifiedNode childMod = modification.modifyChild(childId, childOp.getChildPolicy()); - - return from(childOp, childMod); - } }