Bump MRI upstreams
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / services / singlelayer / SingleLayerExperimenterMultipartService.java
index 4aec8d08f5e30a7c113fc616dd2e87de0a52224c..7ab5c4daa062d1f1d892c4e6669ff37b7dd9b1ff 100644 (file)
@@ -10,12 +10,14 @@ package org.opendaylight.openflowplugin.impl.services.singlelayer;
 
 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 java.util.List;
-import java.util.concurrent.Future;
 import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
 import org.opendaylight.openflowplugin.impl.services.AbstractExperimenterMultipartService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestInput;
@@ -23,8 +25,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.ser
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.send.experimenter.mp.request.output.ExperimenterCoreMessageItemBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartRequestBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.experimenter.types.rev151020.multipart.reply.multipart.reply.body.MultipartReplyExperimenter;
-import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.experimenter.types.rev151020.multipart.request.multipart.request.body.MultipartRequestExperimenterBuilder;
+import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
@@ -39,7 +44,18 @@ public class SingleLayerExperimenterMultipartService extends AbstractExperimente
     }
 
     @Override
-    public Future<RpcResult<SendExperimenterMpRequestOutput>> handleAndReply(SendExperimenterMpRequestInput input) {
+    protected OfHeader buildRequest(final Xid xid, final SendExperimenterMpRequestInput input) {
+        return new MultipartRequestBuilder()
+            .setXid(xid.getValue())
+            .setVersion(getVersion())
+            .setRequestMore(false)
+            .setMultipartRequestBody(new MultipartRequestExperimenterBuilder(input).build())
+            .build();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<SendExperimenterMpRequestOutput>> handleAndReply(
+            SendExperimenterMpRequestInput input) {
         final SettableFuture<RpcResult<SendExperimenterMpRequestOutput>> future = SettableFuture.create();
 
         Futures.addCallback(handleServiceCall(input), new FutureCallback<RpcResult<List<MultipartReply>>>() {
@@ -54,27 +70,28 @@ public class SingleLayerExperimenterMultipartService extends AbstractExperimente
                                 .map(MultipartReply::getMultipartReplyBody)
                                 .filter(MultipartReplyExperimenter.class::isInstance)
                                 .map(experimenter -> new ExperimenterCoreMessageItemBuilder()
-                                    .setExperimenterMessageOfChoice(MultipartReplyExperimenter.class
-                                        .cast(experimenter)
+                                    .setExperimenterMessageOfChoice(((MultipartReplyExperimenter) experimenter)
                                         .getExperimenterMessageOfChoice())
                                     .build())
                                 .collect(Collectors.toList()))
                             .build())
                         .build());
                 } else {
-                    LOG.warn("OnSuccess, rpc result unsuccessful, multipart response for rpc sendExperimenterMpRequest was unsuccessful.");
-                    future.set(RpcResultBuilder.<SendExperimenterMpRequestOutput>failed().withRpcErrors(result.getErrors()).build());
+                    LOG.warn("OnSuccess, rpc result unsuccessful,"
+                            + " multipart response for rpc sendExperimenterMpRequest was unsuccessful.");
+                    future.set(RpcResultBuilder.<SendExperimenterMpRequestOutput>failed()
+                            .withRpcErrors(result.getErrors()).build());
                 }
             }
 
             @Override
-            public void onFailure(final Throwable t) {
-                LOG.warn("Failure multipart response for Experimenter-Mp request. Exception: {}", t);
-                future.set(RpcResultBuilder.<SendExperimenterMpRequestOutput>failed().withError(ErrorType.RPC, "Future error", t).build());
+            public void onFailure(final Throwable throwable) {
+                LOG.warn("Failure multipart response for Experimenter-Mp request", throwable);
+                future.set(RpcResultBuilder.<SendExperimenterMpRequestOutput>failed()
+                        .withError(ErrorType.RPC, "Future error", throwable).build());
             }
-        });
+        }, MoreExecutors.directExecutor());
 
         return future;
     }
-
 }