X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=inline;f=yang%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2Ftree%2FMandatoryLeafEnforcer.java;h=90ae47c9865183f29534d5ffa733894c9e5616ee;hb=35fed4fb3caf6a7462f680de806389701d78bd6c;hp=2bbcfccf0dd5dc8ebb4f372b981ce8c091faa192;hpb=679a3b2027fd416dc3a19ec602dffa42cb680767;p=yangtools.git 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 2bbcfccf0d..90ae47c986 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 @@ -12,6 +12,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; +import java.util.Optional; import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -29,37 +30,39 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; // TODO: would making this Serializable be useful (for Functions and similar?) -abstract class MandatoryLeafEnforcer implements Immutable { - private static final class Strict extends MandatoryLeafEnforcer { - private final ImmutableList mandatoryNodes; +final class MandatoryLeafEnforcer implements Immutable { + private static final Logger LOG = LoggerFactory.getLogger(MandatoryLeafEnforcer.class); - Strict(final ImmutableList mandatoryNodes) { - this.mandatoryNodes = requireNonNull(mandatoryNodes); - } + private final ImmutableList mandatoryNodes; - @Override - 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); - } + 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(); + findMandatoryNodes(builder, YangInstanceIdentifier.empty(), schema, treeConfig.getTreeType()); + final ImmutableList mandatoryNodes = builder.build(); + return mandatoryNodes.isEmpty() ? Optional.empty() : Optional.of(new MandatoryLeafEnforcer(mandatoryNodes)); } - private static final Logger LOG = LoggerFactory.getLogger(MandatoryLeafEnforcer.class); - private static final MandatoryLeafEnforcer NOOP_ENFORCER = new MandatoryLeafEnforcer() { - @Override - void enforceOnData(final NormalizedNode normalizedNode) { - // Intentional no-op + 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); } - }; + } - final void enforceOnTreeNode(final TreeNode tree) { + void enforceOnTreeNode(final TreeNode tree) { enforceOnData(tree.getData()); } - abstract void enforceOnData(NormalizedNode normalizedNode); - private static void findMandatoryNodes(final Builder builder, final YangInstanceIdentifier id, final DataNodeContainer schema, final TreeType type) { for (final DataSchemaNode child : schema.getChildNodes()) { @@ -87,15 +90,4 @@ abstract class MandatoryLeafEnforcer implements Immutable { } } } - - static MandatoryLeafEnforcer forContainer(final DataNodeContainer schema, final DataTreeConfiguration treeConfig) { - if (!treeConfig.isMandatoryNodesValidationEnabled()) { - return NOOP_ENFORCER; - } - - final Builder builder = ImmutableList.builder(); - findMandatoryNodes(builder, YangInstanceIdentifier.EMPTY, schema, treeConfig.getTreeType()); - final ImmutableList mandatoryNodes = builder.build(); - return mandatoryNodes.isEmpty() ? NOOP_ENFORCER : new Strict(mandatoryNodes); - } }