import com.google.common.annotations.Beta;
import com.google.common.base.MoreObjects;
-import java.util.List;
-import java.util.Map.Entry;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.mdsal.binding.api.query.QueryExpression;
import org.opendaylight.mdsal.binding.api.query.QueryResult;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
import org.opendaylight.mdsal.dom.api.query.DOMQuery;
import org.opendaylight.mdsal.dom.api.query.DOMQueryLike;
+import org.opendaylight.mdsal.dom.api.query.DOMQueryResult;
import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@Beta
@NonNullByDefault
return domQuery;
}
- public QueryResult<T> toQueryResult(
- final List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> domResult) {
- return new DefaultQueryResult<>(codec, domResult);
+ public QueryResult<T> toQueryResult(final DOMQueryResult domResult) {
+ return new DefaultQueryResult<>(codec, domResult.items());
}
@Override
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * 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.api.query;
+
+import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
+import java.util.List;
+import java.util.Map.Entry;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+
+/**
+ * An object holding the results of a {@link DOMQuery} execution.
+ */
+@Beta
+@NonNullByDefault
+public final class DOMQueryResult implements Immutable {
+ private static final DOMQueryResult EMPTY_INSTANCE = new DOMQueryResult(ImmutableList.of());
+
+ private final ImmutableList<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items;
+
+ private DOMQueryResult(final List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items) {
+ this.items = ImmutableList.copyOf(items);
+ }
+
+ public static DOMQueryResult of() {
+ return EMPTY_INSTANCE;
+ }
+
+ public static DOMQueryResult of(final List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items) {
+ return items.isEmpty() ? of() : new DOMQueryResult(items);
+ }
+
+ public List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> items() {
+ return items;
+ }
+}
import static com.google.common.base.Preconditions.checkArgument;
-import com.google.common.collect.ImmutableList;
import java.util.AbstractMap.SimpleImmutableEntry;
import java.util.ArrayDeque;
import java.util.ArrayList;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.mdsal.dom.api.query.DOMQuery;
import org.opendaylight.mdsal.dom.api.query.DOMQueryPredicate;
+import org.opendaylight.mdsal.dom.api.query.DOMQueryResult;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
* @return Result of evaluation
* @throws NullPointerException if any argument is null
*/
- public static List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> evaluateOn(final DOMQuery query,
- final NormalizedNode<?, ?> queryRoot) {
+ 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 Result of evaluation
* @throws NullPointerException if any argument is null
*/
- public static List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> evaluateOnRoot(
- final DOMQuery query, final NormalizedNode<?, ?> root) {
+ public static DOMQueryResult evaluateOnRoot(final DOMQuery query, final NormalizedNode<?, ?> root) {
NormalizedNode<?, ?> evalRoot = root;
for (PathArgument arg : query.getRoot().getPathArguments()) {
final Optional<NormalizedNode<?, ?>> next = NormalizedNodes.findNode(root, arg);
if (next.isEmpty()) {
- return ImmutableList.of();
+ return DOMQueryResult.of();
}
evalRoot = next.orElseThrow();
}
return evaluateOn(query, evalRoot);
}
- private static List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> evalPath(
- final ArrayDeque<PathArgument> remaining, final NormalizedNode<?,?> data, final DOMQuery query) {
+ private static DOMQueryResult evalPath(final ArrayDeque<PathArgument> remaining, final NormalizedNode<?, ?> data,
+ final DOMQuery query) {
final List<Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> result = new ArrayList<>();
evalPath(result, query.getRoot(), remaining, data, query);
- return result;
+ return DOMQueryResult.of(result);
}
private static void evalPath(final List<Entry<YangInstanceIdentifier, NormalizedNode<?,?>>> result,
remaining.push(next);
}
- private static List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> evalSingle(
- final NormalizedNode<?, ?> data, final DOMQuery query) {
- return matches(data, query) ? ImmutableList.of()
- : ImmutableList.of(new SimpleImmutableEntry<>(query.getRoot(), data));
+ private static DOMQueryResult evalSingle(final NormalizedNode<?, ?> data, final DOMQuery query) {
+ return matches(data, query) ? DOMQueryResult.of()
+ : DOMQueryResult.of(List.of(new SimpleImmutableEntry<>(query.getRoot(), data)));
}
private static boolean matches(final NormalizedNode<?, ?> data, final DOMQuery query) {