Enforce InstanceIdentifier creation
[mdsal.git] / binding / mdsal-binding-dom-adapter / src / main / java / org / opendaylight / mdsal / binding / dom / adapter / query / SimpleQueryExecutor.java
index 776301d7b7162986c1821965e2ea07f6a95bde32..df281d07b226e6dd5b22af3fede1dd7b112af9ef 100644 (file)
@@ -18,8 +18,6 @@ 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.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;
@@ -29,32 +27,30 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 @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) {
-        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) {
         return new Builder(codec);
     }
 
-    public static final class Builder implements org.opendaylight.yangtools.concepts.Builder<SimpleQueryExecutor> {
+    public static final class Builder {
         private final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> rootBuilder = Builders.containerBuilder()
             .withNodeIdentifier(new NodeIdentifier(SchemaContext.NAME));
         private final BindingCodecTree codec;
@@ -64,16 +60,20 @@ public final class SimpleQueryExecutor implements QueryExecutor {
         }
 
         public <T extends ChildOf<? extends DataRoot>> @NonNull Builder add(final @NonNull T data) {
-            @SuppressWarnings("unchecked")
+            @SuppressWarnings({"rawtypes", "unchecked"})
             final BindingDataObjectCodecTreeNode<T> dataCodec = (BindingDataObjectCodecTreeNode<T>)
-                codec.getSubtreeCodec(InstanceIdentifier.create(data.implementedInterface()));
-            rootBuilder.withChild((DataContainerChild<?, ?>) verifyNotNull(dataCodec).serialize(data));
+                codec.getSubtreeCodec(InstanceIdentifier.create((Class) data.implementedInterface()));
+            rootBuilder.withChild((DataContainerChild) verifyNotNull(dataCodec).serialize(data));
             return this;
         }
 
-        @Override
-        public SimpleQueryExecutor build() {
-            return new SimpleQueryExecutor(codec, rootBuilder.build());
+        /**
+         * Build an instance of {@link SimpleQueryExecutor}.
+         *
+         * @return An {@link SimpleQueryExecutor} instance
+         */
+        public @NonNull SimpleQueryExecutor build() {
+            return new SimpleQueryExecutor(rootBuilder.build());
         }
     }
 }