X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=yangtools.git;a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2Ftree%2FMandatoryLeafEnforcer.java;h=6c99d3bb5890169f9cf41a96a2a866d3649287c8;hp=90ae47c9865183f29534d5ffa733894c9e5616ee;hb=6bcc983bf8875a85e329991f60127b6a6d29cb57;hpb=9d74a74a9d46ff8c6878bc7d76994782d938cddc diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MandatoryLeafEnforcer.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MandatoryLeafEnforcer.java index 90ae47c986..6c99d3bb58 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MandatoryLeafEnforcer.java +++ b/yang/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.api.schema.tree.spi.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); } } }