Disconnect NetconfDeviceRpc from DOMRpcService
[netconf.git] / plugins / netconf-client-mdsal / src / main / java / org / opendaylight / netconf / client / mdsal / spi / NetconfDeviceRpc.java
index 565ddabb50593df9493cc41146287c5827f67bff..63e965a05a23efc7f2550f39cfe3a925ada81c9e 100644 (file)
@@ -7,27 +7,12 @@
  */
 package org.opendaylight.netconf.client.mdsal.spi;
 
-import static java.util.Objects.requireNonNull;
-
-import com.google.common.collect.Collections2;
-import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.MoreExecutors;
-import com.google.common.util.concurrent.SettableFuture;
-import org.opendaylight.mdsal.dom.api.DOMRpcAvailabilityListener;
-import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier;
-import org.opendaylight.mdsal.dom.api.DOMRpcImplementationNotAvailableException;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.dom.api.DOMRpcResult;
-import org.opendaylight.mdsal.dom.api.DefaultDOMRpcException;
-import org.opendaylight.netconf.api.messages.NetconfMessage;
+import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceCommunicator;
 import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices.Rpcs;
 import org.opendaylight.netconf.client.mdsal.api.RpcTransformer;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.concepts.NoOpListenerRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
@@ -36,53 +21,15 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
  * {@link ContainerNode}.
  */
 public final class NetconfDeviceRpc implements Rpcs.Normalized {
-    private final RemoteDeviceCommunicator communicator;
-    private final RpcTransformer<ContainerNode, DOMRpcResult> transformer;
-    private final EffectiveModelContext modelContext;
+    private final @NonNull NetconfDeviceDOMRpcService domRpcService;
 
     public NetconfDeviceRpc(final EffectiveModelContext modelContext, final RemoteDeviceCommunicator communicator,
             final RpcTransformer<ContainerNode, DOMRpcResult> transformer) {
-        this.modelContext = requireNonNull(modelContext);
-        this.communicator = communicator;
-        this.transformer = transformer;
+        domRpcService = new NetconfDeviceDOMRpcService(modelContext, communicator, transformer);
     }
 
     @Override
-    @SuppressWarnings("checkstyle:IllegalCatch")
-    public ListenableFuture<DOMRpcResult> invokeRpc(final QName type, final ContainerNode input) {
-        final var delegateFuture = communicator.sendRequest(transformer.toRpcRequest(type, input), type);
-
-        final var ret = SettableFuture.<DOMRpcResult>create();
-        Futures.addCallback(delegateFuture, new FutureCallback<>() {
-            @Override
-            public void onSuccess(final RpcResult<NetconfMessage> result) {
-                final DOMRpcResult rpcResult;
-                try {
-                    rpcResult = transformer.toRpcResult(result, type);
-                } catch (Exception cause) {
-                    ret.setException(new DefaultDOMRpcException(
-                        "Unable to parse rpc reply. type: " + type + " input: " + input, cause));
-                    return;
-                }
-
-                ret.set(rpcResult);
-            }
-
-            @Override
-            public void onFailure(final Throwable cause) {
-                ret.setException(new DOMRpcImplementationNotAvailableException(cause, "Unable to invoke rpc %s", type));
-            }
-
-        }, MoreExecutors.directExecutor());
-        return ret;
-    }
-
-    @Override
-    public <T extends DOMRpcAvailabilityListener> ListenerRegistration<T> registerRpcListener(final T listener) {
-        listener.onRpcAvailable(Collections2.transform(modelContext.getOperations(),
-            input -> DOMRpcIdentifier.create(input.getQName())));
-
-        // NOOP, no rpcs appear and disappear in this implementation
-        return NoOpListenerRegistration.of(listener);
+    public DOMRpcService domRpcService() {
+        return domRpcService;
     }
 }