X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=data%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2Ftree%2FMandatoryLeafEnforcer.java;h=0100796a4f8387e7cc64ac181b79dec7a0658d46;hb=7862271a33b14d21ebf1e72aacd05d3e4687c6b1;hp=8b2d4da6a75fe7f232b67258d7ce578a4ce37a72;hpb=d3fcf5ed18efa48efff27b77b3e2a06cbb004626;p=yangtools.git diff --git a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MandatoryLeafEnforcer.java b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MandatoryLeafEnforcer.java index 8b2d4da6a7..0100796a4f 100644 --- a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MandatoryLeafEnforcer.java +++ b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MandatoryLeafEnforcer.java @@ -7,7 +7,6 @@ */ 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.collect.ImmutableList; @@ -17,7 +16,6 @@ import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; 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.TreeType; import org.opendaylight.yangtools.yang.data.spi.tree.TreeNode; @@ -33,58 +31,56 @@ import org.slf4j.LoggerFactory; final class MandatoryLeafEnforcer implements Immutable { private static final Logger LOG = LoggerFactory.getLogger(MandatoryLeafEnforcer.class); - private final ImmutableList mandatoryNodes; + private final ImmutableList mandatoryNodes; - private MandatoryLeafEnforcer(final ImmutableList mandatoryNodes) { + private MandatoryLeafEnforcer(final ImmutableList mandatoryNodes) { this.mandatoryNodes = requireNonNull(mandatoryNodes); } - static Optional forContainer(final DataNodeContainer schema, final DataTreeConfiguration treeConfig) { if (!treeConfig.isMandatoryNodesValidationEnabled()) { return Optional.empty(); } - final Builder builder = ImmutableList.builder(); + final Builder builder = ImmutableList.builder(); findMandatoryNodes(builder, YangInstanceIdentifier.empty(), schema, treeConfig.getTreeType()); - final ImmutableList mandatoryNodes = builder.build(); + final ImmutableList mandatoryNodes = builder.build(); return mandatoryNodes.isEmpty() ? Optional.empty() : Optional.of(new MandatoryLeafEnforcer(mandatoryNodes)); } void enforceOnData(final NormalizedNode data) { - for (final YangInstanceIdentifier id : mandatoryNodes) { - checkArgument(NormalizedNodes.findNode(data, id).isPresent(), - "Node %s is missing mandatory descendant %s", data.getIdentifier(), id); - } + mandatoryNodes.forEach(node -> node.enforceOnData(data)); } void enforceOnTreeNode(final TreeNode tree) { enforceOnData(tree.getData()); } - private static void findMandatoryNodes(final Builder builder, - final YangInstanceIdentifier id, final DataNodeContainer schema, final TreeType type) { + private static void findMandatoryNodes(final Builder builder, + final YangInstanceIdentifier id, final DataNodeContainer schema, final TreeType type) { for (final DataSchemaNode child : schema.getChildNodes()) { if (SchemaAwareApplyOperation.belongsToTree(type, child)) { if (child instanceof ContainerSchemaNode) { final ContainerSchemaNode container = (ContainerSchemaNode) child; if (!container.isPresenceContainer()) { - findMandatoryNodes(builder, id.node(NodeIdentifier.create(child.getQName())), container, type); + findMandatoryNodes(builder, + id.node(NodeIdentifier.create(container.getQName())), container, type); } } else { boolean needEnforce = child instanceof MandatoryAware && ((MandatoryAware) child).isMandatory(); if (!needEnforce && child instanceof ElementCountConstraintAware) { - needEnforce = ((ElementCountConstraintAware) child) - .getElementCountConstraint().map(constraint -> { - final Integer min = constraint.getMinElements(); - return min != null && min > 0; - }).orElse(Boolean.FALSE).booleanValue(); + needEnforce = ((ElementCountConstraintAware) child).getElementCountConstraint() + .map(constraint -> { + final Integer min = constraint.getMinElements(); + return min != null && min > 0; + }) + .orElse(Boolean.FALSE); } if (needEnforce) { - final YangInstanceIdentifier childId = id.node(NodeIdentifier.create(child.getQName())); - LOG.debug("Adding mandatory child {}", childId); - builder.add(childId.toOptimized()); + final MandatoryDescendant desc = MandatoryDescendant.create(id, schema, child); + LOG.debug("Adding mandatory child {}", desc); + builder.add(desc); } } }