X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=data%2Fyang-data-tree-ri%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Ftree%2Fimpl%2FUniqueValidation.java;fp=data%2Fyang-data-tree-ri%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Ftree%2Fimpl%2FUniqueValidation.java;h=08399c5012825012384822c9d8b8ea4ef05914d9;hb=8cd0549c8e84636272d33815db43468156f65973;hp=74788bc36ca8ad43f46bc707b239c2eb537d6ce3;hpb=607579e17b0c83f83b5d53e2334523715a337e01;p=yangtools.git diff --git a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/UniqueValidation.java b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/UniqueValidation.java index 74788bc36c..08399c5012 100644 --- a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/UniqueValidation.java +++ b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/UniqueValidation.java @@ -8,22 +8,19 @@ package org.opendaylight.yangtools.yang.data.tree.impl; import static com.google.common.base.Preconditions.checkState; -import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Stopwatch; +import com.google.common.base.VerifyException; import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableList; -import java.util.Collection; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -31,11 +28,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.tree.api.UniqueConstraintException; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; -import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant; -import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,20 +57,19 @@ final class UniqueValidation extends AbstractValidation { static ImmutableList> validatorsOf(final ListSchemaNode schema, final DataTreeConfiguration treeConfig) { - final Collection uniques = schema.getUniqueConstraints(); + final var uniques = schema.getUniqueConstraints(); if (!treeConfig.isUniqueIndexEnabled() || uniques.isEmpty()) { return ImmutableList.of(); } - final Stopwatch sw = Stopwatch.createStarted(); - final Map> paths = new HashMap<>(); - final ImmutableList> validators = uniques.stream() + final var sw = Stopwatch.createStarted(); + final var paths = new HashMap>(); + final var validators = uniques.stream() .map(unique -> UniqueValidator.of(unique.argument().stream() .map(descendant -> paths.computeIfAbsent(descendant, key -> toDescendantPath(schema, key))) .collect(ImmutableList.toImmutableList()))) - .collect(ImmutableList.toImmutableList()); + .collect(ImmutableList.>toImmutableList()); LOG.debug("Constructed {} validators in {}", validators.size(), sw); - return validators; } @@ -92,20 +86,24 @@ final class UniqueValidation extends AbstractValidation { private void enforceOnData(final NormalizedNode data, final ExceptionSupplier exceptionSupplier) throws T { - final Stopwatch sw = Stopwatch.createStarted(); - verify(data instanceof NormalizedNodeContainer, "Unexpected data %s", data); - final var children = ((NormalizedNodeContainer) data).body(); + final var sw = Stopwatch.createStarted(); + if (!(data instanceof NormalizedNodeContainer dataContainer)) { + throw new VerifyException("Unexpected data " + data.prettyTree()); + } + + final var children = dataContainer.body(); final var collected = HashMultimap., Object>create(validators.size(), children.size()); - for (NormalizedNode child : children) { - verify(child instanceof DataContainerNode, "Unexpected child %s", child); - final DataContainerNode cont = (DataContainerNode) child; + for (var child : children) { + if (!(child instanceof DataContainerNode cont)) { + throw new VerifyException("Unexpected child " + child); + } - final Map, Object> valueCache = new HashMap<>(); - for (UniqueValidator validator : validators) { + final var valueCache = new HashMap, Object>(); + for (var validator : validators) { final Object values = validator.extractValues(valueCache, cont); final Object masked = BinaryValue.wrap(values); if (!collected.put(validator, masked)) { - final Map index = validator.indexValues(values); + final var index = validator.indexValues(values); throw exceptionSupplier.get(cont.name() + " violates unique constraint on " + masked + " of " + index.keySet(), index); } @@ -122,18 +120,18 @@ final class UniqueValidation extends AbstractValidation { private static ImmutableList toDescendantPath(final ListSchemaNode parent, final Descendant descendant) { - final List qnames = descendant.getNodeIdentifiers(); - final ImmutableList.Builder builder = ImmutableList.builderWithExpectedSize(qnames.size()); - final Iterator it = descendant.getNodeIdentifiers().iterator(); + final var qnames = descendant.getNodeIdentifiers(); + final var builder = ImmutableList.builderWithExpectedSize(qnames.size()); + final var it = descendant.getNodeIdentifiers().iterator(); DataNodeContainer current = parent; while (true) { - final QName qname = it.next(); - final DataSchemaNode next = current.findDataChildByName(qname) + final var qname = it.next(); + final var next = current.findDataChildByName(qname) .orElseThrow(() -> new IllegalStateException("Cannot find component " + qname + " of " + descendant)); builder.add(NodeIdentifier.create(qname)); if (!it.hasNext()) { checkState(next instanceof TypedDataSchemaNode, "Unexpected schema %s for %s", next, descendant); - final ImmutableList ret = builder.build(); + final var ret = builder.build(); LOG.trace("Resolved {} to {}", descendant, ret); return ret; }