Hide EagerDOMQueryResult behind DOMQueryResult.of() 67/93367/1
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 26 Oct 2020 02:54:40 +0000 (03:54 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 26 Oct 2020 02:56:13 +0000 (03:56 +0100)
Most users might not want to depend on dom.spi just for an immutable
holder. Add DOMQueryResult.of() methods and use them as replacements
for EagerDOMQueryResult.of().

JIRA: MDSAL-605
Change-Id: I96f81cc105b9890638769b2f2185e961c0fd1885
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractForwardedTransaction.java
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/query/DOMQueryResult.java
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/query/SimpleDOMQueryResult.java [moved from dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/query/EagerDOMQueryResult.java with 56% similarity]
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/query/DOMQueryEvaluator.java
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/store/DOMStoreReadTransaction.java

index 7bcd2823daa7a14006e2c91dae36fb1e9e81e864..851d18aef03eb9b5f4c50c85f774771753ef2331 100644 (file)
@@ -25,7 +25,6 @@ import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction;
 import org.opendaylight.mdsal.dom.api.query.DOMQuery;
 import org.opendaylight.mdsal.dom.api.query.DOMQueryResult;
 import org.opendaylight.mdsal.dom.spi.query.DOMQueryEvaluator;
-import org.opendaylight.mdsal.dom.spi.query.EagerDOMQueryResult;
 import org.opendaylight.yangtools.concepts.Delegator;
 import org.opendaylight.yangtools.concepts.Identifiable;
 import org.opendaylight.yangtools.yang.binding.DataObject;
@@ -102,7 +101,7 @@ abstract class AbstractForwardedTransaction<T extends DOMDataTreeTransaction> im
         LOG.trace("Fallback evaluation of {} on {}", domQuery, readOps);
         return readOps.read(store, domQuery.getRoot())
             .transform(
-                node -> node.map(data -> DOMQueryEvaluator.evaluateOn(domQuery, data)).orElse(EagerDOMQueryResult.of()),
+                node -> node.map(data -> DOMQueryEvaluator.evaluateOn(domQuery, data)).orElse(DOMQueryResult.of()),
                 // TODO: execute on a dedicated thread pool
                 MoreExecutors.directExecutor());
     }
index d6a567eb66bc48f1503d123bf32137cb2cf105ef..fea48a9bd77fcce3ea0d72a3c1055e241068112d 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.mdsal.dom.api.query;
 
 import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
 import java.util.List;
 import java.util.Map.Entry;
 import java.util.stream.Collectors;
@@ -36,4 +37,16 @@ public interface DOMQueryResult extends Iterable<Entry<YangInstanceIdentifier, N
     default List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items() {
         return stream().collect(Collectors.toUnmodifiableList());
     }
+
+    static DOMQueryResult of() {
+        return SimpleDOMQueryResult.EMPTY_INSTANCE;
+    }
+
+    static DOMQueryResult of(final Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> item) {
+        return new SimpleDOMQueryResult(ImmutableList.of(item));
+    }
+
+    static DOMQueryResult of(final List<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items) {
+        return items.isEmpty() ? of() : new SimpleDOMQueryResult(items);
+    }
 }
similarity index 56%
rename from dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/query/EagerDOMQueryResult.java
rename to dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/query/SimpleDOMQueryResult.java
index b562526c96783b3c61e50044001d946e667fdb29..2969b5f18c37e93d6cd5470eb6364099713f5275 100644 (file)
@@ -5,41 +5,30 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-package org.opendaylight.mdsal.dom.spi.query;
+package org.opendaylight.mdsal.dom.api.query;
 
-import com.google.common.annotations.Beta;
+import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map.Entry;
 import java.util.Spliterator;
 import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.opendaylight.mdsal.dom.api.query.DOMQueryResult;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
-@Beta
 @NonNullByDefault
-public final class EagerDOMQueryResult implements DOMQueryResult {
-    private static final EagerDOMQueryResult EMPTY_INSTANCE = new EagerDOMQueryResult(ImmutableList.of());
+final class SimpleDOMQueryResult implements DOMQueryResult {
+    static final SimpleDOMQueryResult EMPTY_INSTANCE = new SimpleDOMQueryResult(ImmutableList.of());
 
     private final ImmutableList<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items;
 
-    private EagerDOMQueryResult(final List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items) {
-        this.items = ImmutableList.copyOf(items);
+    SimpleDOMQueryResult(final ImmutableList<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items) {
+        this.items = items;
     }
 
-    public static EagerDOMQueryResult of() {
-        return EMPTY_INSTANCE;
-    }
-
-    public static EagerDOMQueryResult of(final Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> item) {
-        return new EagerDOMQueryResult(ImmutableList.of(item));
-    }
-
-    public static EagerDOMQueryResult of(
-            final List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items) {
-        return items.isEmpty() ? of() : new EagerDOMQueryResult(items);
+    SimpleDOMQueryResult(final List<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items) {
+        this(ImmutableList.copyOf(items));
     }
 
     @Override
@@ -56,4 +45,9 @@ public final class EagerDOMQueryResult implements DOMQueryResult {
     public List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items() {
         return items;
     }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this).add("items", items).toString();
+    }
 }
index 61e8fed5b254bfe4b4f6956b68f78328fecd1cd9..3ca3ba8a40c2742362a6d207f018637a2a97e979 100644 (file)
@@ -64,7 +64,7 @@ public final class DOMQueryEvaluator {
         for (PathArgument arg : query.getRoot().getPathArguments()) {
             final Optional<NormalizedNode<?, ?>> next = NormalizedNodes.findNode(root, arg);
             if (next.isEmpty()) {
-                return EagerDOMQueryResult.of();
+                return DOMQueryResult.of();
             }
             evalRoot = next.orElseThrow();
         }
@@ -76,7 +76,7 @@ public final class DOMQueryEvaluator {
         // 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);
-        return EagerDOMQueryResult.of(result);
+        return DOMQueryResult.of(result);
     }
 
     private static void evalPath(final List<Entry<YangInstanceIdentifier, NormalizedNode<?,?>>> result,
@@ -111,8 +111,8 @@ public final class DOMQueryEvaluator {
     }
 
     private static DOMQueryResult evalSingle(final NormalizedNode<?, ?> data, final DOMQuery query) {
-        return matches(data, query) ? EagerDOMQueryResult.of()
-                : EagerDOMQueryResult.of(new SimpleImmutableEntry<>(query.getRoot(), data));
+        return matches(data, query) ? DOMQueryResult.of()
+                : DOMQueryResult.of(new SimpleImmutableEntry<>(query.getRoot(), data));
     }
 
     private static boolean matches(final NormalizedNode<?, ?> data, final DOMQuery query) {
index b5e41e3f74454fe3d809da9cc6c6c2603f3e4602..9282334b8de68fec385f614318724a86ba13669b 100644 (file)
@@ -15,7 +15,6 @@ import org.opendaylight.mdsal.common.api.ReadFailedException;
 import org.opendaylight.mdsal.dom.api.query.DOMQuery;
 import org.opendaylight.mdsal.dom.api.query.DOMQueryResult;
 import org.opendaylight.mdsal.dom.spi.query.DOMQueryEvaluator;
-import org.opendaylight.mdsal.dom.spi.query.EagerDOMQueryResult;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
@@ -84,7 +83,7 @@ public interface DOMStoreReadTransaction extends DOMStoreTransaction {
      */
     default @NonNull FluentFuture<DOMQueryResult> execute(final DOMQuery query) {
         return read(query.getRoot()).transform(
-            node -> node.map(data -> DOMQueryEvaluator.evaluateOn(query, data)).orElse(EagerDOMQueryResult.of()),
+            node -> node.map(data -> DOMQueryEvaluator.evaluateOn(query, data)).orElse(DOMQueryResult.of()),
             MoreExecutors.directExecutor());
     }
 }