DefaultQuery captures the codec context, hence it is useful for
intra-implementation transforms. This includes the ability to
transform the result set from DOM.
JIRA: MDSAL-605
Change-Id: I565d1ec5070653d45bb6340e79799612fc06d61c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
import static java.util.Objects.requireNonNull;
import static java.util.Objects.requireNonNull;
+import com.google.common.annotations.Beta;
import com.google.common.base.MoreObjects;
import com.google.common.base.MoreObjects;
-import org.eclipse.jdt.annotation.NonNull;
+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.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.yangtools.yang.binding.DataObject;
import org.opendaylight.mdsal.dom.api.query.DOMQuery;
import org.opendaylight.mdsal.dom.api.query.DOMQueryLike;
import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-final class DefaultQuery<T extends DataObject> implements QueryExpression<T>, DOMQueryLike {
- private final @NonNull DOMQuery domQuery;
+@Beta
+@NonNullByDefault
+public final class DefaultQuery<T extends DataObject> implements QueryExpression<T>, DOMQueryLike {
+ private final BindingCodecTree codec;
+ private final DOMQuery domQuery;
- DefaultQuery(final DOMQuery domQuery) {
+ DefaultQuery(final BindingCodecTree codec, final DOMQuery domQuery) {
+ this.codec = requireNonNull(codec);
this.domQuery = requireNonNull(domQuery);
}
this.domQuery = requireNonNull(domQuery);
}
+ public QueryResult<T> toQueryResult(
+ final List<? extends Entry<YangInstanceIdentifier, NormalizedNode<?, ?>>> domResult) {
+ return new DefaultQueryResult<>(codec, domResult);
+ }
+
@Override
public String toString() {
return MoreObjects.toStringHelper(this).add("dom", domQuery).toString();
@Override
public String toString() {
return MoreObjects.toStringHelper(this).add("dom", domQuery).toString();
final YangInstanceIdentifier relTarget = absTarget.relativeTo(absoluteSelect)
.orElseThrow(() -> new IllegalStateException(absoluteSelect + " is not an ancestor of " + absTarget));
final YangInstanceIdentifier relTarget = absTarget.relativeTo(absoluteSelect)
.orElseThrow(() -> new IllegalStateException(absoluteSelect + " is not an ancestor of " + absTarget));
- return new BoundMethod(relTarget, targetCodec.yangPathArgumentChild(new NodeIdentifier(child.getQName())));
+ return new BoundMethod(relTarget, targetCodec.yangPathArgumentChild(NodeIdentifier.create(child.getQName())));
}
void addPredicate(final DOMQueryPredicate predicate) {
}
void addPredicate(final DOMQueryPredicate predicate) {
}
<T extends DataObject> @NonNull QueryExpression<T> buildQuery() {
}
<T extends DataObject> @NonNull QueryExpression<T> buildQuery() {
- return new DefaultQuery<>(new DOMQuery(root, relativeSelect, predicates));
+ return new DefaultQuery<>(codec, new DOMQuery(root, relativeSelect, predicates));
}
private @NonNull YangInstanceIdentifier fromBinding(final InstanceIdentifier<?> bindingId) {
}
private @NonNull YangInstanceIdentifier fromBinding(final InstanceIdentifier<?> bindingId) {
import org.opendaylight.mdsal.binding.api.query.QueryResult;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
import org.opendaylight.mdsal.binding.api.query.QueryResult;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
-import org.opendaylight.mdsal.dom.api.query.DOMQuery;
-import org.opendaylight.mdsal.dom.api.query.DOMQueryLike;
import org.opendaylight.mdsal.dom.spi.query.DOMQueryEvaluator;
import org.opendaylight.yangtools.yang.binding.ChildOf;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.mdsal.dom.spi.query.DOMQueryEvaluator;
import org.opendaylight.yangtools.yang.binding.ChildOf;
import org.opendaylight.yangtools.yang.binding.DataObject;
@Beta
public final class SimpleQueryExecutor implements QueryExecutor {
@Beta
public final class SimpleQueryExecutor implements QueryExecutor {
- private final BindingCodecTree codec;
private final NormalizedNode<?, ?> root;
private final NormalizedNode<?, ?> root;
- public SimpleQueryExecutor(final BindingCodecTree codec, final NormalizedNode<?, ?> root) {
- this.codec = requireNonNull(codec);
+ public SimpleQueryExecutor(final NormalizedNode<?, ?> root) {
this.root = requireNonNull(root);
}
@Override
public <T extends @NonNull DataObject> QueryResult<T> executeQuery(final QueryExpression<T> query) {
this.root = requireNonNull(root);
}
@Override
public <T extends @NonNull DataObject> QueryResult<T> executeQuery(final QueryExpression<T> query) {
- checkArgument(query instanceof DOMQueryLike, "Unsupported expression %s", query);
- final DOMQuery domQuery = ((DOMQueryLike) query).asDOMQuery();
- return new DefaultQueryResult<>(codec, DOMQueryEvaluator.evaluateOnRoot(domQuery, root));
+ checkArgument(query instanceof DefaultQuery, "Unsupported expression %s", query);
+ final DefaultQuery<T> defaultQuery = (DefaultQuery<T>) query;
+ return defaultQuery.toQueryResult(DOMQueryEvaluator.evaluateOnRoot(defaultQuery.asDOMQuery(), root));
}
public static @NonNull Builder builder(final BindingCodecTree codec) {
}
public static @NonNull Builder builder(final BindingCodecTree codec) {
@Override
public SimpleQueryExecutor build() {
@Override
public SimpleQueryExecutor build() {
- return new SimpleQueryExecutor(codec, rootBuilder.build());
+ return new SimpleQueryExecutor(rootBuilder.build());