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;
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