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%2Fleafref%2FLeafRefValidation.java;h=5dc9938b69ff2da062d663d77d1355c21b5ecd36;hb=1e8209bb1e52b827e0e1e783a9c11cb6b8241d12;hp=5a1ce760495e34a954fb3826f3c8f325c98775d4;hpb=19efe56f8f20f5692a100e765a581fbc8f0b4aca;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidation.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidation.java index 5a1ce76049..5dc9938b69 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidation.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefValidation.java @@ -53,15 +53,15 @@ public final class LeafRefValidation { private final Set validatedLeafRefCtx = new HashSet<>(); private final List errorsMessages = new ArrayList<>(); - private final NormalizedNode root; + private final NormalizedNode root; - private LeafRefValidation(final NormalizedNode root) { + private LeafRefValidation(final NormalizedNode root) { this.root = root; } public static void validate(final DataTreeCandidate tree, final LeafRefContext rootLeafRefCtx) throws LeafRefDataValidationFailedException { - final Optional> root = tree.getRootNode().getDataAfter(); + final Optional root = tree.getRootNode().getDataAfter(); if (root.isPresent()) { new LeafRefValidation(root.get()).validateChildren(rootLeafRefCtx, tree.getRootNode().getChildNodes()); } @@ -130,7 +130,7 @@ public final class LeafRefValidation { final QName childQName = childNode.getIdentifier().getNodeType(); LeafRefContext childReferencingCtx = referencingCtx.getReferencingChildByName(childQName); if (childReferencingCtx == null) { - final NormalizedNode data = childNode.getDataAfter().get(); + final NormalizedNode data = childNode.getDataAfter().get(); if (data instanceof MapEntryNode || data instanceof UnkeyedListEntryNode) { childReferencingCtx = referencingCtx; } @@ -148,7 +148,7 @@ public final class LeafRefValidation { final QName childQName = childNode.getIdentifier().getNodeType(); LeafRefContext childReferencedByCtx = referencedByCtx.getReferencedChildByName(childQName); if (childReferencedByCtx == null) { - final NormalizedNode data = childNode.getDataAfter().get(); + final NormalizedNode data = childNode.getDataAfter().get(); if (data instanceof MapEntryNode || data instanceof UnkeyedListEntryNode) { childReferencedByCtx = referencedByCtx; } @@ -157,7 +157,7 @@ public final class LeafRefValidation { return childReferencedByCtx; } - private void validateNodeData(final NormalizedNode node, final LeafRefContext referencedByCtx, + private void validateNodeData(final NormalizedNode node, final LeafRefContext referencedByCtx, final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { if (node instanceof LeafNode) { @@ -167,8 +167,8 @@ public final class LeafRefValidation { } else if (node instanceof ChoiceNode) { validateChoiceNodeData((ChoiceNode) node, referencedByCtx, referencingCtx, modificationType, current); } else if (node instanceof DataContainerNode) { - validateDataContainerNodeData((DataContainerNode) node, referencedByCtx, referencingCtx, - modificationType, current); + validateDataContainerNodeData((DataContainerNode) node, referencedByCtx, referencingCtx, modificationType, + current); } else if (node instanceof MapNode) { validateMapNodeData((MapNode) node, referencedByCtx, referencingCtx, modificationType, current); } @@ -190,7 +190,7 @@ public final class LeafRefValidation { final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { if (referencedByCtx != null || referencingCtx != null) { - for (final NormalizedNode leafSetEntry : node.getValue()) { + for (final NormalizedNode leafSetEntry : node.body()) { if (referencedByCtx != null && referencedByCtx.isReferenced()) { validateLeafRefTargetNodeData(leafSetEntry, referencedByCtx, modificationType); } @@ -204,8 +204,8 @@ public final class LeafRefValidation { private void validateChoiceNodeData(final ChoiceNode node, final LeafRefContext referencedByCtx, final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { - for (final DataContainerChild child : node.getValue()) { - final QName qname = child.getNodeType(); + for (final DataContainerChild child : node.body()) { + final QName qname = child.getIdentifier().getNodeType(); final LeafRefContext childReferencedByCtx = referencedByCtx == null ? null : findReferencedByCtxUnderChoice(referencedByCtx, qname); final LeafRefContext childReferencingCtx = referencingCtx == null ? null @@ -217,10 +217,10 @@ public final class LeafRefValidation { } } - private void validateDataContainerNodeData(final DataContainerNode node, final LeafRefContext referencedByCtx, + private void validateDataContainerNodeData(final DataContainerNode node, final LeafRefContext referencedByCtx, final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { - for (final DataContainerChild child : node.getValue()) { + for (final DataContainerChild child : node.body()) { if (child instanceof AugmentationNode) { validateNodeData(child, referencedByCtx, referencingCtx, modificationType, current.node( child.getIdentifier())); @@ -234,9 +234,9 @@ public final class LeafRefValidation { private void validateMapNodeData(final MapNode node, final LeafRefContext referencedByCtx, final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { - for (final MapEntryNode mapEntry : node.getValue()) { + for (final MapEntryNode mapEntry : node.asMap().values()) { final YangInstanceIdentifier mapEntryIdentifier = current.node(mapEntry.getIdentifier()); - for (final DataContainerChild child : mapEntry.getValue()) { + for (final DataContainerChild child : mapEntry.body()) { if (child instanceof AugmentationNode) { validateNodeData(child, referencedByCtx, referencingCtx, modificationType, current.node( child.getIdentifier())); @@ -248,10 +248,10 @@ public final class LeafRefValidation { } } - private void validateChildNodeData(final DataContainerChild child, final LeafRefContext referencedByCtx, + private void validateChildNodeData(final DataContainerChild child, final LeafRefContext referencedByCtx, final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { - final QName qname = child.getNodeType(); + final QName qname = child.getIdentifier().getNodeType(); final LeafRefContext childReferencedByCtx = referencedByCtx == null ? null : referencedByCtx.getReferencedChildByName(qname); final LeafRefContext childReferencingCtx = referencingCtx == null ? null @@ -284,16 +284,16 @@ public final class LeafRefValidation { return null; } - private void validateLeafRefTargetNodeData(final NormalizedNode leaf, final LeafRefContext + private void validateLeafRefTargetNodeData(final NormalizedNode leaf, final LeafRefContext referencedByCtx, final ModificationType modificationType) { if (!validatedLeafRefCtx.add(referencedByCtx)) { LOG.trace("Operation [{}] validate data of leafref TARGET node: name[{}] = value[{}] -> SKIP: Already " - + "validated", modificationType, referencedByCtx.getNodeName(), leaf.getValue()); + + "validated", modificationType, referencedByCtx.getNodeName(), leaf.body()); return; } LOG.trace("Operation [{}] validate data of leafref TARGET node: name[{}] = value[{}]", modificationType, - referencedByCtx.getNodeName(), leaf.getValue()); + referencedByCtx.getNodeName(), leaf.body()); final Set leafRefs = referencedByCtx.getAllReferencedByLeafRefCtxs().values().stream() .filter(LeafRefContext::isReferencing).collect(Collectors.toSet()); if (leafRefs.isEmpty()) { @@ -310,11 +310,11 @@ public final class LeafRefValidation { LOG.debug("Invalid leafref value [{}] allowed values {} by validation of leafref TARGET node: {} path " + "of invalid LEAFREF node: {} leafRef target path: {} {}", leafRefsValue, - leafRefTargetNodeValues, leaf.getNodeType(), leafRefContext.getCurrentNodePath(), + leafRefTargetNodeValues, leaf.getIdentifier(), leafRefContext.getCurrentNodePath(), leafRefContext.getAbsoluteLeafRefTargetPath(), FAILED); errorsMessages.add(String.format("Invalid leafref value [%s] allowed values %s by validation of leafref" + " TARGET node: %s path of invalid LEAFREF node: %s leafRef target path: %s %s", leafRefsValue, - leafRefTargetNodeValues, leaf.getNodeType(), leafRefContext.getCurrentNodePath(), + leafRefTargetNodeValues, leaf.getIdentifier(), leafRefContext.getCurrentNodePath(), leafRefContext.getAbsoluteLeafRefTargetPath(), FAILED)); }); @@ -325,42 +325,42 @@ public final class LeafRefValidation { return computeValues(root, createPath(context.getLeafRefNodePath()), null); } - private void validateLeafRefNodeData(final NormalizedNode leaf, final LeafRefContext referencingCtx, + private void validateLeafRefNodeData(final NormalizedNode leaf, final LeafRefContext referencingCtx, final ModificationType modificationType, final YangInstanceIdentifier current) { final Set values = computeValues(root, createPath(referencingCtx.getAbsoluteLeafRefTargetPath()), current); - if (values.contains(leaf.getValue())) { + if (values.contains(leaf.body())) { LOG.debug("Operation [{}] validate data of LEAFREF node: name[{}] = value[{}] {}", modificationType, - referencingCtx.getNodeName(), leaf.getValue(), SUCCESS); + referencingCtx.getNodeName(), leaf.body(), SUCCESS); return; } LOG.debug("Operation [{}] validate data of LEAFREF node: name[{}] = value[{}] {}", modificationType, - referencingCtx.getNodeName(), leaf.getValue(), FAILED); + referencingCtx.getNodeName(), leaf.body(), FAILED); LOG.debug("Invalid leafref value [{}] allowed values {} of LEAFREF node: {} leafRef target path: {}", - leaf.getValue(), values, leaf.getNodeType(), referencingCtx.getAbsoluteLeafRefTargetPath()); + leaf.body(), values, leaf.getIdentifier(), referencingCtx.getAbsoluteLeafRefTargetPath()); errorsMessages.add(String.format("Invalid leafref value [%s] allowed values %s of LEAFREF node: %s leafRef " - + "target path: %s", leaf.getValue(), values, leaf.getNodeType(), + + "target path: %s", leaf.body(), values, leaf.getIdentifier(), referencingCtx.getAbsoluteLeafRefTargetPath())); } - private Set computeValues(final NormalizedNode node, final Deque path, + private Set computeValues(final NormalizedNode node, final Deque path, final YangInstanceIdentifier current) { final HashSet values = new HashSet<>(); addValues(values, node, ImmutableList.of(), path, current); return values; } - private void addValues(final Set values, final NormalizedNode node, + private void addValues(final Set values, final NormalizedNode node, final List nodePredicates, final Deque path, final YangInstanceIdentifier current) { if (node instanceof ValueNode) { - values.add(node.getValue()); + values.add(node.body()); return; } if (node instanceof LeafSetNode) { - for (final NormalizedNode entry : ((LeafSetNode) node).getValue()) { - values.add(entry.getValue()); + for (final NormalizedNode entry : ((LeafSetNode) node).body()) { + values.add(entry.body()); } return; } @@ -372,10 +372,9 @@ public final class LeafRefValidation { final PathArgument pathArgument = new NodeIdentifier(next.getQName()); if (node instanceof DataContainerNode) { - processChildNode(values, (DataContainerNode) node, pathArgument, next.getQNamePredicates(), path, - current); + processChildNode(values, (DataContainerNode) node, pathArgument, next.getQNamePredicates(), path, current); } else if (node instanceof MapNode) { - Stream entries = ((MapNode) node).getValue().stream(); + Stream entries = ((MapNode) node).body().stream(); if (!nodePredicates.isEmpty() && current != null) { entries = entries.filter(createMapEntryPredicate(nodePredicates, current)); } @@ -385,22 +384,22 @@ public final class LeafRefValidation { } } - private void processChildNode(final Set values, final DataContainerNode parent, + private void processChildNode(final Set values, final DataContainerNode parent, final PathArgument arg, final List nodePredicates, final Deque path, final YangInstanceIdentifier current) { - final Optional> child = parent.getChild(arg); - if (!child.isPresent()) { + final DataContainerChild child = parent.childByArg(arg); + if (child == null) { // FIXME: YANGTOOLS-901. We have SchemaContext nearby, hence we should be able to cache how to get // to the leaf with with specified QName, without having to iterate through Choices/Augmentations. // That perhaps means we should not have QNameWithPredicates, but NodeIdentifierWithPredicates as // the path specification. - for (final DataContainerChild mixin : parent.getValue()) { + for (final DataContainerChild mixin : parent.body()) { if (mixin instanceof AugmentationNode || mixin instanceof ChoiceNode) { addValues(values, mixin, nodePredicates, path, current); } } } else { - addNextValues(values, child.get(), nodePredicates, path, current); + addNextValues(values, child, nodePredicates, path, current); } } @@ -423,7 +422,7 @@ public final class LeafRefValidation { }; } - private void addNextValues(final Set values, final NormalizedNode node, + private void addNextValues(final Set values, final NormalizedNode node, final List nodePredicates, final Deque path, final YangInstanceIdentifier current) { final QNameWithPredicate element = path.pop(); @@ -443,9 +442,9 @@ public final class LeafRefValidation { }).orElse(ImmutableSet.of()); } - private static Optional> findParentNode( - final Optional> root, final YangInstanceIdentifier path) { - Optional> currentNode = root; + private static Optional findParentNode( + final Optional root, final YangInstanceIdentifier path) { + Optional currentNode = root; final Iterator pathIterator = path.getPathArguments().iterator(); while (pathIterator.hasNext()) { final PathArgument childPathArgument = pathIterator.next();