Add NormalizedNodes.findNode(NormalizedNode, SchemaPath) 24/65424/6
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 11 Nov 2017 01:20:25 +0000 (02:20 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 13 Nov 2017 10:39:43 +0000 (11:39 +0100)
This is a lazy version of the Iterable<PathArgument> method, with
PathArguments being lazily computed.

Change-Id: I1f0b7ae881adb29b5aafd09b69db9e52fd97449f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodes.java

index c560e1fd94dc183dd9788554a2f96132b3bf7c03..4b50010c0dfa10b6902b4850e174da74d42560af 100644 (file)
@@ -7,10 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.data.api.schema;
 
+import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.Beta;
 import com.google.common.base.Strings;
+import com.google.common.collect.Iterables;
 import com.google.common.collect.Maps;
 import java.util.Arrays;
 import java.util.Iterator;
@@ -19,9 +21,11 @@ import java.util.Optional;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
 /**
  * A set of utility methods for interacting with {@link NormalizedNode} objects.
@@ -63,6 +67,13 @@ public final class NormalizedNodes {
         return findNode(Optional.ofNullable(parent), relativePath);
     }
 
+    public static Optional<NormalizedNode<?, ?>> findNode(final NormalizedNode<?, ?> parent,
+            final SchemaPath relativePath) {
+        checkArgument(!relativePath.isAbsolute(), "%s is not a relative path", relativePath);
+        return findNode(Optional.ofNullable(parent), Iterables.transform(relativePath.getPathFromRoot(),
+            NodeIdentifier::new));
+    }
+
     public static Optional<NormalizedNode<?, ?>> findNode(final NormalizedNode<?, ?> parent,
             final PathArgument... relativePath) {
         return findNode(parent, Arrays.asList(relativePath));