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%2FPresenceContainerModificationStrategy.java;h=4becd4f709dfce301d85d5ae0f0ca43775154524;hb=5500c3ce51088ed6de1adedd35f52662a8304b1e;hp=54bdb21bb738a5ab7a267e63eab8006d9473e274;hpb=0f2fbdce65031716667d54c77804a992c8f4080f;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/PresenceContainerModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/PresenceContainerModificationStrategy.java index 54bdb21bb7..4becd4f709 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/PresenceContainerModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/PresenceContainerModificationStrategy.java @@ -8,25 +8,43 @@ package org.opendaylight.yangtools.yang.data.impl.schema.tree; -import static com.google.common.base.Preconditions.checkArgument; - -import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import com.google.common.base.Optional; import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; +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.model.api.ContainerSchemaNode; -final class PresenceContainerModificationStrategy extends - AbstractDataNodeContainerModificationStrategy { +/** + * Presence container modification strategy. In addition to {@link ContainerModificationStrategy} it also enforces + * presence of mandatory leaves. + */ +final class PresenceContainerModificationStrategy extends ContainerModificationStrategy { + private final MandatoryLeafEnforcer enforcer; + PresenceContainerModificationStrategy(final ContainerSchemaNode schemaNode, final TreeType treeType) { - super(schemaNode, ContainerNode.class, treeType); + super(schemaNode, treeType); + enforcer = MandatoryLeafEnforcer.forContainer(schemaNode, treeType); + } + + @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 Optional currentMeta, + final Version version) { + final TreeNode ret = super.applyWrite(modification, currentMeta, version); + enforcer.enforceOnTreeNode(ret); + return ret; } @Override - @SuppressWarnings("rawtypes") - protected DataContainerNodeBuilder createBuilder(final NormalizedNode original) { - checkArgument(original instanceof ContainerNode); - return ImmutableContainerNodeBuilder.create((ContainerNode) original); + 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; } -} \ No newline at end of file +}