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%2FTreeNodeUtils.java;h=491594d1c4649c7370f74b5be036fb1bb60a14e6;hb=46411ea371ef4ffe7813e1091691ae249404536c;hp=2df4ffd581c2adfb3d78a0f98744c4deea9aac7c;hpb=ece16db3db0f3599ee0ab92899ac42316414e032;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/TreeNodeUtils.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/TreeNodeUtils.java index 2df4ffd581..491594d1c4 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/TreeNodeUtils.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/TreeNodeUtils.java @@ -7,19 +7,16 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.tree; -import java.util.AbstractMap.SimpleEntry; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; - import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; +import java.util.AbstractMap.SimpleEntry; +import java.util.Iterator; +import java.util.Map; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.tree.StoreTreeNode; /** @@ -37,23 +34,27 @@ public final class TreeNodeUtils { * @param path Path to the node * @return Optional with node if the node is present in tree, {@link Optional#absent()} otherwise. */ - public static > Optional findNode(final T tree, final InstanceIdentifier path) { + public static > Optional findNode(final T tree, final YangInstanceIdentifier path) { Optional current = Optional. of(tree); - Iterator pathIter = path.getPath().iterator(); + Iterator pathIter = path.getPathArguments().iterator(); while (current.isPresent() && pathIter.hasNext()) { current = current.get().getChild(pathIter.next()); } return current; } - public static > T findNodeChecked(final T tree, final InstanceIdentifier path) { + public static > T findNodeChecked(final T tree, final YangInstanceIdentifier path) { T current = tree; - List nested = new ArrayList<>(path.getPath().size()); - for(PathArgument pathArg : path.getPath()) { + + int i = 1; + for(PathArgument pathArg : path.getPathArguments()) { Optional potential = current.getChild(pathArg); - nested.add(pathArg); - Preconditions.checkArgument(potential.isPresent(),"Child %s is not present in tree.",nested); + if (!potential.isPresent()) { + throw new IllegalArgumentException(String.format("Child %s is not present in tree.", + Iterables.toString(Iterables.limit(path.getPathArguments(), i)))); + } current = potential.get(); + ++i; } return current; } @@ -66,24 +67,24 @@ public final class TreeNodeUtils { * @return Map.Entry Entry with key which is path to closest parent and value is parent node. * */ - public static > Map.Entry findClosest(final T tree, final InstanceIdentifier path) { + public static > Map.Entry findClosest(final T tree, final YangInstanceIdentifier path) { return findClosestsOrFirstMatch(tree, path, Predicates.alwaysFalse()); } - public static > Map.Entry findClosestsOrFirstMatch(final T tree, final InstanceIdentifier path, final Predicate predicate) { + public static > Map.Entry findClosestsOrFirstMatch(final T tree, final YangInstanceIdentifier path, final Predicate predicate) { Optional parent = Optional.of(tree); Optional current = Optional. of(tree); int nesting = 0; - Iterator pathIter = path.getPath().iterator(); + Iterator pathIter = path.getPathArguments().iterator(); while (current.isPresent() && pathIter.hasNext() && !predicate.apply(current.get())) { parent = current; current = current.get().getChild(pathIter.next()); nesting++; } if(current.isPresent()) { - final InstanceIdentifier currentPath = new InstanceIdentifier(path.getPath().subList(0, nesting)); - return new SimpleEntry(currentPath,current.get()); + final YangInstanceIdentifier currentPath = YangInstanceIdentifier.create(Iterables.limit(path.getPathArguments(), nesting)); + return new SimpleEntry(currentPath,current.get()); } /* @@ -93,9 +94,8 @@ public final class TreeNodeUtils { * present. At any rate we check state just to be on the safe side. */ Preconditions.checkState(nesting > 0); - final InstanceIdentifier parentPath = new InstanceIdentifier(path.getPath().subList(0, nesting - 1)); - - return new SimpleEntry(parentPath,parent.get()); + final YangInstanceIdentifier parentPath = YangInstanceIdentifier.create(Iterables.limit(path.getPathArguments(), nesting - 1)); + return new SimpleEntry(parentPath,parent.get()); } public static > Optional getChild(final Optional parent,final PathArgument child) {