From: Robert Varga Date: Thu, 11 Dec 2014 17:03:14 +0000 (+0100) Subject: Prune empty nodes from transaction when it is sealed X-Git-Tag: release/lithium~395 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=fe30cc8cfb0e1945ced3902e98ef886d1bf869d8;p=yangtools.git Prune empty nodes from transaction when it is sealed When we seal() a ModifiedNode tree, check also whether we have unmodified children and prune them. Also turn a SUBTREE_MODIFIED with empty nodes into an UNMODIFIED node. Change-Id: I077d23023fdbfb4ab232ed826cc32b4541779e87 Signed-off-by: Robert Varga --- diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ModifiedNode.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ModifiedNode.java index e74066c240..ecda366de0 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ModifiedNode.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ModifiedNode.java @@ -11,6 +11,9 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; import javax.annotation.Nonnull; import javax.annotation.concurrent.NotThreadSafe; import org.opendaylight.yangtools.concepts.Identifiable; @@ -20,9 +23,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType; import org.opendaylight.yangtools.yang.data.api.schema.tree.StoreTreeNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode; -import java.util.LinkedHashMap; -import java.util.Map; - /** * Node Modification Node and Tree * @@ -60,7 +60,7 @@ final class ModifiedNode implements StoreTreeNode, Identifiable snapshotCache; private NormalizedNode value; - private ModifiedNode(final PathArgument identifier, final Optional original, boolean isOrdered) { + private ModifiedNode(final PathArgument identifier, final Optional original, final boolean isOrdered) { this.identifier = identifier; this.original = original; @@ -130,7 +130,7 @@ final class ModifiedNode implements StoreTreeNode, Identifiable, Identifiable it = children.values().iterator(); + while (it.hasNext()) { + final ModifiedNode child = it.next(); child.seal(); + + if (child.modificationType == ModificationType.UNMODIFIED) { + it.remove(); + } + } + + // A SUBTREE_MODIFIED node without any children is a no-op + if (modificationType == ModificationType.SUBTREE_MODIFIED && children.isEmpty()) { + updateModificationType(ModificationType.UNMODIFIED); } } @@ -252,7 +270,7 @@ final class ModifiedNode implements StoreTreeNode, Identifiable