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%2FMinMaxElementsValidation.java;h=8e1e91c5633060d19c12e420622351199ea91dc2;hb=bf009ab944ceb87cbd348ee5b1e23eaefe2577da;hp=8da73070418f99b124faf18161629e4f3f8a9852;hpb=20df7021c844ccf06d1378f615c2988fff60edee;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MinMaxElementsValidation.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MinMaxElementsValidation.java index 8da7307041..8e1e91c563 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MinMaxElementsValidation.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/MinMaxElementsValidation.java @@ -10,6 +10,7 @@ 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.base.MoreObjects.ToStringHelper; import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -25,43 +26,36 @@ import org.opendaylight.yangtools.yang.model.api.ElementCountConstraintAware; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -final class MinMaxElementsValidation extends DelegatingModificationApplyOperation { +final class MinMaxElementsValidation + extends ModificationApplyOperation { private static final Logger LOG = LoggerFactory.getLogger(MinMaxElementsValidation.class); - private final SchemaAwareApplyOperation delegate; + private final SchemaAwareApplyOperation delegate; private final int minElements; private final int maxElements; - private MinMaxElementsValidation(final SchemaAwareApplyOperation delegate, final Integer minElements, + private MinMaxElementsValidation(final SchemaAwareApplyOperation delegate, final Integer minElements, final Integer maxElements) { this.delegate = requireNonNull(delegate); this.minElements = minElements != null ? minElements : 0; this.maxElements = maxElements != null ? maxElements : Integer.MAX_VALUE; } - static ModificationApplyOperation from(final SchemaAwareApplyOperation delegate, final DataSchemaNode schema) { - if (!(schema instanceof ElementCountConstraintAware)) { - return delegate; - } - final Optional optConstraint = ((ElementCountConstraintAware) schema) - .getElementCountConstraint(); + static ModificationApplyOperation from( + final SchemaAwareApplyOperation delegate) { + final Optional optConstraint = delegate.getSchema().getElementCountConstraint(); if (!optConstraint.isPresent()) { return delegate; } final ElementCountConstraint constraint = optConstraint.get(); - return new MinMaxElementsValidation(delegate, constraint.getMinElements(), constraint.getMaxElements()); - } - - @Override - ModificationApplyOperation delegate() { - return delegate; + return new MinMaxElementsValidation<>(delegate, constraint.getMinElements(), constraint.getMaxElements()); } @Override - Optional apply(final ModifiedNode modification, final Optional storeMeta, + Optional apply(final ModifiedNode modification, final Optional storeMeta, final Version version) { - Optional ret = modification.getValidatedNode(this, storeMeta); + Optional ret = modification.getValidatedNode(this, storeMeta); if (ret == null) { // Deal with the result moving on us ret = delegate.apply(modification, storeMeta, version); @@ -75,7 +69,7 @@ final class MinMaxElementsValidation extends DelegatingModificationApplyOperatio @Override void checkApplicable(final ModificationPath path, final NodeModification modification, - final Optional current, final Version version) throws DataValidationFailedException { + final Optional current, final Version version) throws DataValidationFailedException { delegate.checkApplicable(path, modification, current, version); if (!(modification instanceof ModifiedNode)) { @@ -86,7 +80,7 @@ final class MinMaxElementsValidation extends DelegatingModificationApplyOperatio // We need to actually perform the operation to deal with merge in a sane manner. We know the modification // is immutable, so the result of validation will probably not change. Note we should not be checking number - final Optional maybeApplied = delegate.apply(modified, current, version); + final Optional maybeApplied = delegate.apply(modified, current, version); if (maybeApplied.isPresent()) { // We only enforce min/max on present data and rely on MandatoryLeafEnforcer to take care of the empty case validateMinMaxElements(path, maybeApplied.get().getData()); @@ -107,6 +101,36 @@ final class MinMaxElementsValidation extends DelegatingModificationApplyOperatio checkChildren(modification); } + @Override + public Optional getChild(final PathArgument child) { + return delegate.getChild(child); + } + + @Override + ChildTrackingPolicy getChildPolicy() { + return delegate.getChildPolicy(); + } + + @Override + void mergeIntoModifiedNode(final ModifiedNode node, final NormalizedNode value, final Version version) { + delegate.mergeIntoModifiedNode(node, value, version); + } + + @Override + void quickVerifyStructure(final NormalizedNode modification) { + delegate.quickVerifyStructure(modification); + } + + @Override + void recursivelyVerifyStructure(final NormalizedNode value) { + delegate.recursivelyVerifyStructure(value); + } + + @Override + ToStringHelper addToStringAttributes(final ToStringHelper helper) { + return helper.add("min", minElements).add("max", maxElements).add("delegate", delegate); + } + private void validateMinMaxElements(final ModificationPath path, final NormalizedNode value) throws DataValidationFailedException { final PathArgument id = value.getIdentifier(); @@ -132,7 +156,7 @@ final class MinMaxElementsValidation extends DelegatingModificationApplyOperatio private static int numOfChildrenFromValue(final NormalizedNode value) { if (value instanceof NormalizedNodeContainer) { - return ((NormalizedNodeContainer) value).getValue().size(); + return ((NormalizedNodeContainer) value).size(); } else if (value instanceof UnkeyedListNode) { return ((UnkeyedListNode) value).getSize(); }