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%2FAbstractNodeContainerModificationStrategy.java;h=079b3b36e0265a0e8e754e5198728a775a82b470;hb=cf34c2838d0b6e4e1f87ab01ea28989a53834af2;hp=b0b6cecba8c3ec67cc73e1d78c6dea31ba5e1dd1;hpb=e9e1269514ffbb04e52e0125c195ed9623da18e8;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractNodeContainerModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractNodeContainerModificationStrategy.java index b0b6cecba8..079b3b36e0 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractNodeContainerModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AbstractNodeContainerModificationStrategy.java @@ -8,8 +8,10 @@ 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.Preconditions; +import com.google.common.base.MoreObjects; +import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Verify; import java.util.Collection; import java.util.Optional; @@ -29,18 +31,23 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; abstract class AbstractNodeContainerModificationStrategy extends SchemaAwareApplyOperation { - - private final Class> nodeClass; + private final NormalizedNodeContainerSupport support; private final boolean verifyChildrenStructure; - protected AbstractNodeContainerModificationStrategy(final Class> nodeClass, + AbstractNodeContainerModificationStrategy(final NormalizedNodeContainerSupport support, final DataTreeConfiguration treeConfig) { - this.nodeClass = Preconditions.checkNotNull(nodeClass , "nodeClass"); + this.support = requireNonNull(support); this.verifyChildrenStructure = treeConfig.getTreeType() == TreeType.CONFIGURATION; } + @Override + protected final ChildTrackingPolicy getChildPolicy() { + return support.childPolicy; + } + @Override void verifyStructure(final NormalizedNode writtenValue, final boolean verifyChildren) { + final Class nodeClass = support.requiredClass; checkArgument(nodeClass.isInstance(writtenValue), "Node %s is not of type %s", writtenValue, nodeClass); checkArgument(writtenValue instanceof NormalizedNodeContainer); if (verifyChildrenStructure && verifyChildren) { @@ -106,7 +113,7 @@ abstract class AbstractNodeContainerModificationStrategy extends SchemaAwareAppl mutable.setSubtreeVersion(version); @SuppressWarnings("rawtypes") - final NormalizedNodeContainerBuilder dataBuilder = createBuilder(newValue); + final NormalizedNodeContainerBuilder dataBuilder = support.createBuilder(newValue); final TreeNode result = mutateChildren(mutable, dataBuilder, version, modification.getChildren()); // We are good to go except one detail: this is a single logical write, but @@ -197,7 +204,7 @@ abstract class AbstractNodeContainerModificationStrategy extends SchemaAwareAppl // order of operation - parent changes are always resolved before // children ones, and having node in TOUCH means children was modified // before. - modification.updateValue(LogicalOperation.MERGE, createEmptyValue(value)); + modification.updateValue(LogicalOperation.MERGE, support.createEmptyValue(value)); return; case MERGE: // Merging into an existing node. Merge data children modifications (maybe recursively) and mark @@ -244,7 +251,7 @@ abstract class AbstractNodeContainerModificationStrategy extends SchemaAwareAppl final Collection children = modification.getChildren(); if (!children.isEmpty()) { @SuppressWarnings("rawtypes") - final NormalizedNodeContainerBuilder dataBuilder = createBuilder(currentMeta.getData()); + final NormalizedNodeContainerBuilder dataBuilder = support.createBuilder(currentMeta.getData()); final MutableTreeNode newMeta = currentMeta.mutable(); newMeta.setSubtreeVersion(version); final TreeNode ret = mutateChildren(newMeta, dataBuilder, version, children); @@ -319,8 +326,12 @@ abstract class AbstractNodeContainerModificationStrategy extends SchemaAwareAppl return verifyChildrenStructure; } - @SuppressWarnings("rawtypes") - protected abstract NormalizedNodeContainerBuilder createBuilder(NormalizedNode original); + @Override + public final String toString() { + return addToStringAttributes(MoreObjects.toStringHelper(this)).toString(); + } - protected abstract NormalizedNode createEmptyValue(NormalizedNode original); + ToStringHelper addToStringAttributes(final ToStringHelper helper) { + return helper.add("support", support).add("verifyChildren", verifyChildrenStructure); + } }