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%2FListEntryModificationStrategy.java;h=825a77ddedab8394d332b95ca8b6a9517dbfd3d2;hb=39d6912a0df959abf070bcec53d2157f938eb7fc;hp=30b17b1c0e4aa76eebbaa6c9d16bb3b23ead3fde;hpb=5500c3ce51088ed6de1adedd35f52662a8304b1e;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ListEntryModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ListEntryModificationStrategy.java index 30b17b1c0e..825a77dded 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ListEntryModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ListEntryModificationStrategy.java @@ -7,51 +7,69 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.tree; -import static com.google.common.base.Preconditions.checkArgument; -import com.google.common.base.Optional; +import static java.util.Objects.requireNonNull; + +import java.util.Optional; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; -final class ListEntryModificationStrategy extends AbstractDataNodeContainerModificationStrategy { - private final MandatoryLeafEnforcer enforcer; +class ListEntryModificationStrategy extends DataNodeContainerModificationStrategy { + private static final class EnforcingMandatory extends ListEntryModificationStrategy { + private final MandatoryLeafEnforcer enforcer; - ListEntryModificationStrategy(final ListSchemaNode schema, final TreeType treeType) { - super(schema, MapEntryNode.class, treeType); - enforcer = MandatoryLeafEnforcer.forContainer(schema, treeType); - } + EnforcingMandatory(final ListSchemaNode schemaNode, final DataTreeConfiguration treeConfig, + final MandatoryLeafEnforcer enforcer) { + super(schemaNode, treeConfig); + this.enforcer = requireNonNull(enforcer); + } - @Override - protected TreeNode applyMerge(final ModifiedNode modification, final TreeNode currentMeta, final Version version) { - final TreeNode ret = super.applyMerge(modification, currentMeta, version); - enforcer.enforceOnTreeNode(ret); - return ret; - } + @Override + void additionalVerifyValueChildren(final NormalizedNode writtenValue) { + enforcer.enforceOnData(writtenValue); + } - @Override - protected TreeNode applyWrite(final ModifiedNode modification, final Optional currentMeta, - final Version version) { - final TreeNode ret = super.applyWrite(modification, currentMeta, version); - enforcer.enforceOnTreeNode(ret); - return ret; + @Override + protected TreeNode applyMerge(final ModifiedNode modification, final TreeNode currentMeta, + final Version version) { + final TreeNode ret = super.applyMerge(modification, currentMeta, version); + enforcer.enforceOnTreeNode(ret); + return ret; + } + + @Override + protected TreeNode applyWrite(final ModifiedNode modification, final NormalizedNode newValue, + final Optional currentMeta, final Version version) { + final TreeNode ret = super.applyWrite(modification, newValue, currentMeta, version); + enforcer.enforceOnTreeNode(ret); + return ret; + } + + @Override + protected TreeNode applyTouch(final ModifiedNode modification, final TreeNode currentMeta, + final Version version) { + final TreeNode ret = super.applyTouch(modification, currentMeta, version); + enforcer.enforceOnTreeNode(ret); + return ret; + } } - @Override - protected TreeNode applyTouch(final ModifiedNode modification, final TreeNode currentMeta, final Version version) { - final TreeNode ret = super.applyTouch(modification, currentMeta, version); - enforcer.enforceOnTreeNode(ret); - return ret; + private static final NormalizedNodeContainerSupport SUPPORT = + new NormalizedNodeContainerSupport<>(MapEntryNode.class, ImmutableMapEntryNodeBuilder::create, + ImmutableMapEntryNodeBuilder::create); + + ListEntryModificationStrategy(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) { + super(SUPPORT, schema, treeConfig); } - @Override - @SuppressWarnings("rawtypes") - protected DataContainerNodeBuilder createBuilder(final NormalizedNode original) { - checkArgument(original instanceof MapEntryNode); - return ImmutableMapEntryNodeBuilder.create((MapEntryNode) original); + static ListEntryModificationStrategy of(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) { + final Optional enforcer = MandatoryLeafEnforcer.forContainer(schema, treeConfig); + return enforcer.isPresent() ? new EnforcingMandatory(schema, treeConfig, enforcer.get()) + : new ListEntryModificationStrategy(schema, treeConfig); } -} \ No newline at end of file +}