Merge "bug 3126 - shift to new notification service"
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / services / OFJResult2RequestCtxFuture.java
index 8624f746ab8d38613db96d48d6abce4460ffc022..1605ff5e22030c291aeef3311e43f7e9d7e5fc6c 100644 (file)
@@ -8,21 +8,22 @@
 
 package org.opendaylight.openflowplugin.impl.services;
 
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
+import org.opendaylight.openflowplugin.impl.callback.BaseCallback;
+
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
-import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Created by Martin Bobak <mbobak@cisco.com> on 26.3.2015.
  */
 public class OFJResult2RequestCtxFuture<T> {
 
+    private static final Logger LOG = LoggerFactory.getLogger(OFJResult2RequestCtxFuture.class);
     private final RequestContext<T> requestContext;
     private final DeviceContext deviceContext;
 
@@ -31,29 +32,7 @@ public class OFJResult2RequestCtxFuture<T> {
         this.deviceContext = deviceContext;
     }
 
-    public <F> void processResultFromOfJava(final Future<RpcResult<F>> futureResultFromOfLib) {
-        try {
-            final RpcResult<F> rpcResult = futureResultFromOfLib.get(requestContext.getWaitTimeout(), TimeUnit.MILLISECONDS);
-            if (!rpcResult.isSuccessful()) {
-                requestContext.getFuture().set(
-                        RpcResultBuilder.<T> failed().withRpcErrors(rpcResult.getErrors()).build());
-                RequestContextUtil.closeRequstContext(requestContext);
-            } else {
-                deviceContext.hookRequestCtx(requestContext.getXid(), requestContext);
-            }
-        } catch (InterruptedException | ExecutionException | TimeoutException e) {
-            requestContext.getFuture().set(
-                    RpcResultBuilder
-                            .<T> failed()
-                            .withError(RpcError.ErrorType.APPLICATION, "",
-                                    "Flow modification on device wasn't successfull.").build());
-            RequestContextUtil.closeRequstContext(requestContext);
-        } catch (final Exception e) {
-            requestContext.getFuture().set(
-                    RpcResultBuilder.<T> failed()
-                            .withError(RpcError.ErrorType.APPLICATION, "", "Flow translation to OF JAVA failed.")
-                            .build());
-            RequestContextUtil.closeRequstContext(requestContext);
-        }
+    public <F> void processResultFromOfJava(final ListenableFuture<RpcResult<F>> futureResultFromOfLib) {
+        Futures.addCallback(futureResultFromOfLib, new BaseCallback<>(deviceContext, requestContext, futureResultFromOfLib));
     }
-}
+}
\ No newline at end of file