Updating cluster RPC code making it work
[controller.git] / opendaylight / md-sal / sal-remoterpc-connector / src / main / java / org / opendaylight / controller / remote / rpc / RemoteRpcImplementation.java
index 43aa5b7e85a4a3da136de723210c5e3ae3f34cca..75db0b7299408453a3825a0fca5bebb1c62c3dbf 100644 (file)
@@ -7,21 +7,18 @@ import org.opendaylight.controller.remote.rpc.messages.ErrorResponse;
 import org.opendaylight.controller.remote.rpc.messages.InvokeRoutedRpc;
 import org.opendaylight.controller.remote.rpc.messages.InvokeRpc;
 import org.opendaylight.controller.remote.rpc.messages.RpcResponse;
-import org.opendaylight.controller.sal.common.util.RpcErrors;
-import org.opendaylight.controller.sal.common.util.Rpcs;
+import org.opendaylight.controller.remote.rpc.utils.XmlUtils;
 import org.opendaylight.controller.sal.core.api.RoutedRpcDefaultImplementation;
 import org.opendaylight.controller.sal.core.api.RpcImplementation;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Set;
 
@@ -37,7 +34,7 @@ public class RemoteRpcImplementation implements RpcImplementation,
   }
 
   @Override
-  public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, InstanceIdentifier identifier, CompositeNode input) {
+  public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, YangInstanceIdentifier identifier, CompositeNode input) {
     InvokeRoutedRpc rpcMsg = new InvokeRoutedRpc(rpc, identifier, input);
 
     return executeMsg(rpcMsg);
@@ -56,22 +53,33 @@ public class RemoteRpcImplementation implements RpcImplementation,
   }
 
   private ListenableFuture<RpcResult<CompositeNode>> executeMsg(Object rpcMsg) {
-    CompositeNode result = null;
-    Collection<RpcError> errors = errors = new ArrayList<>();
+    ListenableFuture<RpcResult<CompositeNode>> listenableFuture = null;
+
     try {
       Object response = ActorUtil.executeLocalOperation(rpcBroker, rpcMsg, ActorUtil.ASK_DURATION, ActorUtil.AWAIT_DURATION);
       if(response instanceof RpcResponse) {
+
         RpcResponse rpcResponse = (RpcResponse) response;
-        result = XmlUtils.xmlToCompositeNode(rpcResponse.getResultCompositeNode());
+        CompositeNode result = XmlUtils.xmlToCompositeNode(rpcResponse.getResultCompositeNode());
+        listenableFuture = Futures.immediateFuture(RpcResultBuilder.success(result).build());
+
       } else if(response instanceof ErrorResponse) {
+
         ErrorResponse errorResponse = (ErrorResponse) response;
         Exception e = errorResponse.getException();
-        errors.add(RpcErrors.getRpcError(null, null, null, null, e.getMessage(), null, e.getCause()));
+        final RpcResultBuilder<CompositeNode> failed = RpcResultBuilder.failed();
+        failed.withError(null, null, e.getMessage(), null, null, e.getCause());
+        listenableFuture = Futures.immediateFuture(failed.build());
+
       }
     } catch (Exception e) {
       LOG.error("Error occurred while invoking RPC actor {}", e.toString());
-      errors.add(RpcErrors.getRpcError(null, null, null, null, e.getMessage(), null, e.getCause()));
+
+      final RpcResultBuilder<CompositeNode> failed = RpcResultBuilder.failed();
+      failed.withError(null, null, e.getMessage(), null, null, e.getCause());
+      listenableFuture = Futures.immediateFuture(failed.build());
     }
-    return Futures.immediateFuture(Rpcs.getRpcResult(true, result, errors));
+
+    return listenableFuture;
   }
 }