Add faster NormalizedNodes.findNode() alternatives 56/93356/1
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 25 Oct 2020 20:10:03 +0000 (21:10 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 25 Oct 2020 22:15:56 +0000 (23:15 +0100)
End users are going through iterators needlessly when they want
to touch just a single PathArgument. Add methods which side-step
the intermediate List.

Change-Id: I6baed8fe882e14b09d60b3c7d76f425d0f7bcd7f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit ddafdb33751c016127ca5747831da150728248f1)

yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodes.java

index 5706bd327805aea2d10a164655c8fffb9bb0be4a..08661bf0d019ae3c5a7288e584fdddcaec0719b8 100644 (file)
@@ -18,6 +18,7 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 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;
@@ -66,11 +67,21 @@ public final class NormalizedNodes {
         return currentNode;
     }
 
+    public static Optional<NormalizedNode<?, ?>> findNode(final Optional<NormalizedNode<?, ?>> parent,
+            final PathArgument pathArg) {
+        return parent.flatMap(node -> getDirectChild(node, pathArg));
+    }
+
     public static Optional<NormalizedNode<?, ?>> findNode(final Optional<NormalizedNode<?, ?>> parent,
             final PathArgument... relativePath) {
         return findNode(parent, Arrays.asList(relativePath));
     }
 
+    public static Optional<NormalizedNode<?, ?>> findNode(final @Nullable NormalizedNode<?, ?> parent,
+            final PathArgument pathArg) {
+        return parent == null ? Optional.empty() : getDirectChild(parent, pathArg);
+    }
+
     public static Optional<NormalizedNode<?, ?>> findNode(final NormalizedNode<?, ?> parent,
             final Iterable<PathArgument> relativePath) {
         return findNode(Optional.ofNullable(parent), relativePath);