Bump odlparent to 5.0.0
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / services / batch / FlatBatchMeterAdapters.java
index e670bb1e98e7d6c12278eea0a52f9b08f26b15b4..584498dcbdc3527788e8fe7596d4b4747cd8cbeb 100644 (file)
@@ -13,11 +13,10 @@ import com.google.common.base.Function;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.JdkFutureAdapters;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Future;
-import javax.annotation.Nullable;
-import org.opendaylight.openflowplugin.impl.util.FlatBatchUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flat.batch.service.rev160321.ProcessFlatBatchOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flat.batch.service.rev160321.ProcessFlatBatchOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flat.batch.service.rev160321.process.flat.batch.input.batch.batch.choice.flat.batch.add.meter._case.FlatBatchAddMeter;
@@ -45,18 +44,19 @@ import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 
 /**
- * transform between FlatBatch API and meter batch API
+ * Transform between FlatBatch API and meter batch API.
  */
-public class FlatBatchMeterAdapters {
+public final class FlatBatchMeterAdapters {
 
     private FlatBatchMeterAdapters() {
-        throw new IllegalStateException("This class should not be instantiated.");
     }
 
     /**
+     * Adapt flat batch add meter.
      * @param planStep batch step containing changes of the same type
      * @param node     pointer for RPC routing
-     * @return input suitable for {@link org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.SalMetersBatchService#addMetersBatch(AddMetersBatchInput)}
+     * @return input suitable for {@link org.opendaylight.yang.gen.v1.urn
+     * .opendaylight.meters.service.rev160316.SalMetersBatchService#addMetersBatch(AddMetersBatchInput)}
      */
     public static AddMetersBatchInput adaptFlatBatchAddMeter(final BatchPlanStep planStep, final NodeRef node) {
         final List<BatchAddMeters> batchMeters = new ArrayList<>();
@@ -75,9 +75,11 @@ public class FlatBatchMeterAdapters {
     }
 
     /**
+     * Adapt flat batch remove meter.
      * @param planStep batch step containing changes of the same type
      * @param node     pointer for RPC routing
-     * @return input suitable for {@link org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.SalMetersBatchService#removeMetersBatch(RemoveMetersBatchInput)}
+     * @return input suitable for {@link org.opendaylight.yang.gen.v1.urn
+     * .opendaylight.meters.service.rev160316.SalMetersBatchService#removeMetersBatch(RemoveMetersBatchInput)}
      */
     public static RemoveMetersBatchInput adaptFlatBatchRemoveMeter(final BatchPlanStep planStep, final NodeRef node) {
         final List<BatchRemoveMeters> batchMeters = new ArrayList<>();
@@ -96,9 +98,11 @@ public class FlatBatchMeterAdapters {
     }
 
     /**
+     * Adapt flat batch update meter.
      * @param planStep batch step containing changes of the same type
      * @param node     pointer for RPC routing
-     * @return input suitable for {@link org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.SalMetersBatchService#updateMetersBatch(UpdateMetersBatchInput)}
+     * @return input suitable for {@link org.opendaylight.yang.gen.v1.urn
+     * .opendaylight.meters.service.rev160316.SalMetersBatchService#updateMetersBatch(UpdateMetersBatchInput)}
      */
     public static UpdateMetersBatchInput adaptFlatBatchUpdateMeter(final BatchPlanStep planStep, final NodeRef node) {
         final List<BatchUpdateMeters> batchMeters = new ArrayList<>();
@@ -116,30 +120,23 @@ public class FlatBatchMeterAdapters {
     }
 
     /**
-     * @param chainInput here all partial results are collected (values + errors)
+     * Convert meter batch result.
      * @param stepOffset offset of current batch plan step
-     * @return next chained result incorporating results of this step's batch
+     * @return converted {@link ProcessFlatBatchOutput} RPC result
      */
     @VisibleForTesting
     static <T extends BatchMeterOutputListGrouping> Function<RpcResult<T>, RpcResult<ProcessFlatBatchOutput>>
-    createBatchMeterChainingFunction(final RpcResult<ProcessFlatBatchOutput> chainInput,
-                                     final int stepOffset) {
+        convertBatchMeterResult(final int stepOffset) {
         return new Function<RpcResult<T>, RpcResult<ProcessFlatBatchOutput>>() {
-            @Nullable
             @Override
-            public RpcResult<ProcessFlatBatchOutput> apply(@Nullable final RpcResult<T> input) {
-                // create rpcResult builder honoring both success/failure of current input and chained input + join errors
-                final RpcResultBuilder<ProcessFlatBatchOutput> output = FlatBatchUtil.mergeRpcResults(chainInput, input);
-                // convert values and add to chain values
-                final ProcessFlatBatchOutputBuilder outputBuilder = new ProcessFlatBatchOutputBuilder(chainInput.getResult());
-                final List<BatchFailure> batchFailures = wrapBatchMeterFailuresForFlat(input, stepOffset);
-                // join values
-                if (outputBuilder.getBatchFailure() == null) {
-                    outputBuilder.setBatchFailure(new ArrayList<BatchFailure>(batchFailures.size()));
-                }
-                outputBuilder.getBatchFailure().addAll(batchFailures);
-
-                return output.withResult(outputBuilder.build()).build();
+            public RpcResult<ProcessFlatBatchOutput> apply(final RpcResult<T> input) {
+                List<BatchFailure> batchFailures = wrapBatchMeterFailuresForFlat(input, stepOffset);
+                ProcessFlatBatchOutputBuilder outputBuilder =
+                        new ProcessFlatBatchOutputBuilder().setBatchFailure(batchFailures);
+                return RpcResultBuilder.<ProcessFlatBatchOutput>status(input.isSuccessful())
+                        .withRpcErrors(input.getErrors())
+                        .withResult(outputBuilder.build())
+                        .build();
             }
         };
     }
@@ -162,19 +159,18 @@ public class FlatBatchMeterAdapters {
     }
 
     /**
-     * shortcut for {@link #createBatchMeterChainingFunction(RpcResult, int)} with conversion {@link ListenableFuture}
+     * Shortcut for {@link #convertBatchMeterResult(int)} with conversion {@link ListenableFuture}.
      *
      * @param <T>                     exact type of batch flow output
-     * @param chainInput              here all partial results are collected (values + errors)
      * @param resultUpdateMeterFuture batch group rpc-result (add/remove/update)
      * @param currentOffset           offset of current batch plan step with respect to entire chain of steps
-     * @return next chained result incorporating results of this step's batch
+     * @return ListenableFuture with converted result {@link ProcessFlatBatchOutput}
      */
     public static <T extends BatchMeterOutputListGrouping> ListenableFuture<RpcResult<ProcessFlatBatchOutput>>
-    adaptMeterBatchFutureForChain(final RpcResult<ProcessFlatBatchOutput> chainInput,
-                                  final Future<RpcResult<T>> resultUpdateMeterFuture,
-                                  final int currentOffset) {
+        convertMeterBatchFutureForChain(final Future<RpcResult<T>> resultUpdateMeterFuture,
+                                    final int currentOffset) {
         return Futures.transform(JdkFutureAdapters.listenInPoolThread(resultUpdateMeterFuture),
-                FlatBatchMeterAdapters.<T>createBatchMeterChainingFunction(chainInput, currentOffset));
+                FlatBatchMeterAdapters.convertBatchMeterResult(currentOffset),
+                MoreExecutors.directExecutor());
     }
 }