Better encapsulate search state 02/93402/1
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 26 Oct 2020 14:05:25 +0000 (15:05 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 27 Oct 2020 00:39:29 +0000 (01:39 +0100)
'remaining' is a bit unclear, make sure to push down initialization
down a bit.

JIRA: MDSAL-610
Change-Id: Id607bd444e58eaaa288e8f0fc505d20ec31bed75
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 301b7c196bb7950f5ccc3ea1c1f4a915301e4730)

dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/query/DOMQueryEvaluator.java

index 3ca3ba8a40c2742362a6d207f018637a2a97e979..7cb1b95a8782c114291af247f7b0ed5337fe01a6 100644 (file)
@@ -45,8 +45,7 @@ public final class DOMQueryEvaluator {
      */
     public static DOMQueryResult evaluateOn(final DOMQuery query, final NormalizedNode<?, ?> queryRoot) {
         final YangInstanceIdentifier path = query.getSelect();
-        return path.isEmpty() ? evalSingle(queryRoot, query)
-            : evalPath(new ArrayDeque<>(path.getPathArguments()), queryRoot, query);
+        return path.isEmpty() ? evalSingle(queryRoot, query) : evalPath(queryRoot, query);
     }
 
     /**
@@ -71,11 +70,16 @@ public final class DOMQueryEvaluator {
         return evaluateOn(query, evalRoot);
     }
 
-    private static DOMQueryResult evalPath(final ArrayDeque<PathArgument> remaining, final NormalizedNode<?, ?> data,
-            final DOMQuery query) {
+    private static DOMQueryResult evalSingle(final NormalizedNode<?, ?> data, final DOMQuery query) {
+        return matches(data, query) ? DOMQueryResult.of()
+                : DOMQueryResult.of(new SimpleImmutableEntry<>(query.getRoot(), data));
+    }
+
+    private static DOMQueryResult evalPath(final NormalizedNode<?, ?> queryRoot, final DOMQuery query) {
         // FIXME: this is eager evaluation, we should be doing lazy traversal
         final List<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> result = new ArrayList<>();
-        evalPath(result, new ArrayDeque<>(query.getRoot().getPathArguments()), remaining, data, query);
+        evalPath(result, new ArrayDeque<>(query.getRoot().getPathArguments()),
+            new ArrayDeque<>(query.getSelect().getPathArguments()), queryRoot, query);
         return DOMQueryResult.of(result);
     }
 
@@ -110,11 +114,6 @@ public final class DOMQueryEvaluator {
         path.removeLast();
     }
 
-    private static DOMQueryResult evalSingle(final NormalizedNode<?, ?> data, final DOMQuery query) {
-        return matches(data, query) ? DOMQueryResult.of()
-                : DOMQueryResult.of(new SimpleImmutableEntry<>(query.getRoot(), data));
-    }
-
     private static boolean matches(final NormalizedNode<?, ?> data, final DOMQuery query) {
         for (DOMQueryPredicate pred : query.getPredicates()) {
             // Okay, now we need to deal with predicates, but do it in a smart fashion, so we do not end up iterating