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%2FChoiceModificationStrategy.java;h=125fa1f92ed3962752119f85ed9453b68475cfce;hb=679a3b2027fd416dc3a19ec602dffa42cb680767;hp=ddf81930e185efff154fedf795336912355082a5;hpb=c07aad0f89c57a66089df3c431c1767ab4a04eea;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ChoiceModificationStrategy.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ChoiceModificationStrategy.java index ddf81930e1..125fa1f92e 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ChoiceModificationStrategy.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/ChoiceModificationStrategy.java @@ -29,8 +29,10 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; 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.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableChoiceNodeBuilder; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; @@ -39,17 +41,18 @@ import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; final class ChoiceModificationStrategy extends AbstractNodeContainerModificationStrategy { - private final Map childNodes; + private final ImmutableMap childNodes; // FIXME: enforce leaves not coming from two case statements at the same time - private final Map> exclusions; - private final Map caseEnforcers; + private final ImmutableMap> exclusions; + private final ImmutableMap caseEnforcers; + private final ChoiceNode emptyNode; - ChoiceModificationStrategy(final ChoiceSchemaNode schemaNode, final DataTreeConfiguration treeConfig) { + ChoiceModificationStrategy(final ChoiceSchemaNode schema, final DataTreeConfiguration treeConfig) { super(ChoiceNode.class, treeConfig); final Builder childBuilder = ImmutableMap.builder(); final Builder enforcerBuilder = ImmutableMap.builder(); - for (final CaseSchemaNode caze : schemaNode.getCases().values()) { + for (final CaseSchemaNode caze : schema.getCases().values()) { final CaseEnforcer enforcer = CaseEnforcer.forTree(caze, treeConfig); if (enforcer != null) { for (final Entry e : enforcer.getChildEntries()) { @@ -72,6 +75,21 @@ final class ChoiceModificationStrategy extends AbstractNodeContainerModification Collections2.filter(caseEnforcers.values(), Predicates.not(Predicates.equalTo(e))))); } exclusions = ImmutableMap.copyOf(exclusionsBuilder); + emptyNode = ImmutableNodes.choiceNode(schema.getQName()); + } + + + @Override + Optional apply(final ModifiedNode modification, final Optional storeMeta, + final Version version) { + return AutomaticLifecycleMixin.apply(super::apply, emptyNode, modification, storeMeta, version); + } + + @Override + void checkApplicable(final ModificationPath path, final NodeModification modification, + final Optional current, final Version version) throws DataValidationFailedException { + AutomaticLifecycleMixin.checkApplicable(super::checkApplicable, emptyNode, path, modification, current, + version); } @Override