Update MRI projects for Aluminium
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / util / FlowUtil.java
index a7f2a97a56ff564bba5290d123c8fdac374852b3..34ed1e2bd666e30b93549328230e6e5c6d799587 100644 (file)
@@ -16,7 +16,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
-import javax.annotation.Nullable;
 import org.apache.commons.lang3.tuple.Pair;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
@@ -24,6 +23,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.ta
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.SendBarrierOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flows.service.rev160314.AddFlowsBatchOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flows.service.rev160314.AddFlowsBatchOutputBuilder;
@@ -41,31 +41,33 @@ import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 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.common.Uint8;
 
 public final class FlowUtil {
 
     private static final RpcResultBuilder<List<BatchFailedFlowsOutput>> SUCCESSFUL_FLOW_OUTPUT_RPC_RESULT =
-            RpcResultBuilder.success(Collections.<BatchFailedFlowsOutput>emptyList());
+            RpcResultBuilder.success(Collections.emptyList());
 
     /**
      * Attach barrier response to given {@link RpcResult}&lt;RemoveFlowsBatchOutput&gt;.
      */
     public static final Function<Pair<RpcResult<RemoveFlowsBatchOutput>,
-                                 RpcResult<Void>>,
+                                 RpcResult<SendBarrierOutput>>,
                                  RpcResult<RemoveFlowsBatchOutput>>
             FLOW_REMOVE_COMPOSING_TRANSFORM = createComposingFunction();
 
     /**
      * Attach barrier response to given {@link RpcResult}&lt;AddFlowsBatchOutput&gt;.
      */
-    public static final Function<Pair<RpcResult<AddFlowsBatchOutput>, RpcResult<Void>>, RpcResult<AddFlowsBatchOutput>>
+    public static final Function<Pair<RpcResult<AddFlowsBatchOutput>, RpcResult<SendBarrierOutput>>,
+            RpcResult<AddFlowsBatchOutput>>
             FLOW_ADD_COMPOSING_TRANSFORM = createComposingFunction();
 
     /**
      * Attach barrier response to given {@link RpcResult}&lt;UpdateFlowsBatchOutput&gt;.
      */
     public static final Function<Pair<RpcResult<UpdateFlowsBatchOutput>,
-                                 RpcResult<Void>>,
+                                 RpcResult<SendBarrierOutput>>,
                                  RpcResult<UpdateFlowsBatchOutput>>
             FLOW_UPDATE_COMPOSING_TRANSFORM = createComposingFunction();
 
@@ -73,58 +75,43 @@ public final class FlowUtil {
      * Gather errors into collection and wrap it into {@link RpcResult} and propagate all {@link RpcError}.
      */
     public static final Function<RpcResult<List<BatchFailedFlowsOutput>>,
-                                 RpcResult<RemoveFlowsBatchOutput>> FLOW_REMOVE_TRANSFORM =
-        new Function<RpcResult<List<BatchFailedFlowsOutput>>, RpcResult<RemoveFlowsBatchOutput>>() {
-            @Nullable
-            @Override
-            public RpcResult<RemoveFlowsBatchOutput> apply(
-                    @Nullable final RpcResult<List<BatchFailedFlowsOutput>> batchFlowsCumulativeResult) {
+        RpcResult<RemoveFlowsBatchOutput>> FLOW_REMOVE_TRANSFORM =
+            batchFlowsCumulativeResult -> {
                 final RemoveFlowsBatchOutput batchOutput = new RemoveFlowsBatchOutputBuilder()
                         .setBatchFailedFlowsOutput(batchFlowsCumulativeResult.getResult()).build();
 
                 final RpcResultBuilder<RemoveFlowsBatchOutput> resultBld =
                         createCumulativeRpcResult(batchFlowsCumulativeResult, batchOutput);
                 return resultBld.build();
-            }
-        };
+            };
 
     /**
      * Gather errors into collection and wrap it into {@link RpcResult} and propagate all {@link RpcError}.
      */
     public static final Function<RpcResult<List<BatchFailedFlowsOutput>>,
-                                 RpcResult<AddFlowsBatchOutput>> FLOW_ADD_TRANSFORM =
-        new Function<RpcResult<List<BatchFailedFlowsOutput>>, RpcResult<AddFlowsBatchOutput>>() {
-            @Nullable
-            @Override
-            public RpcResult<AddFlowsBatchOutput> apply(
-                    @Nullable final RpcResult<List<BatchFailedFlowsOutput>> batchFlowsCumulativeResult) {
+        RpcResult<AddFlowsBatchOutput>> FLOW_ADD_TRANSFORM =
+            batchFlowsCumulativeResult -> {
                 final AddFlowsBatchOutput batchOutput = new AddFlowsBatchOutputBuilder()
                         .setBatchFailedFlowsOutput(batchFlowsCumulativeResult.getResult()).build();
 
                 final RpcResultBuilder<AddFlowsBatchOutput> resultBld =
                         createCumulativeRpcResult(batchFlowsCumulativeResult, batchOutput);
                 return resultBld.build();
-            }
-        };
+            };
 
     /**
      * Gather errors into collection and wrap it into {@link RpcResult} and propagate all {@link RpcError}.
      */
     public static final Function<RpcResult<List<BatchFailedFlowsOutput>>,
-                                 RpcResult<UpdateFlowsBatchOutput>> FLOW_UPDATE_TRANSFORM =
-        new Function<RpcResult<List<BatchFailedFlowsOutput>>, RpcResult<UpdateFlowsBatchOutput>>() {
-            @Nullable
-            @Override
-            public RpcResult<UpdateFlowsBatchOutput> apply(
-                    @Nullable final RpcResult<List<BatchFailedFlowsOutput>> batchFlowsCumulativeResult) {
+        RpcResult<UpdateFlowsBatchOutput>> FLOW_UPDATE_TRANSFORM =
+            batchFlowsCumulativeResult -> {
                 final UpdateFlowsBatchOutput batchOutput = new UpdateFlowsBatchOutputBuilder()
                         .setBatchFailedFlowsOutput(batchFlowsCumulativeResult.getResult()).build();
 
                 final RpcResultBuilder<UpdateFlowsBatchOutput> resultBld =
                         createCumulativeRpcResult(batchFlowsCumulativeResult, batchOutput);
                 return resultBld.build();
-            }
-        };
+            };
 
     private FlowUtil() {
         throw new IllegalStateException("This class should not be instantiated.");
@@ -162,26 +149,22 @@ public final class FlowUtil {
      */
     @VisibleForTesting
     static <T extends BatchFlowOutputListGrouping>
-        Function<Pair<RpcResult<T>, RpcResult<Void>>, RpcResult<T>> createComposingFunction() {
-        return new Function<Pair<RpcResult<T>, RpcResult<Void>>, RpcResult<T>>() {
-            @Nullable
-            @Override
-            public RpcResult<T> apply(@Nullable final Pair<RpcResult<T>, RpcResult<Void>> input) {
-                final RpcResultBuilder<T> resultBld;
-                if (input.getLeft().isSuccessful() && input.getRight().isSuccessful()) {
-                    resultBld = RpcResultBuilder.success();
-                } else {
-                    resultBld = RpcResultBuilder.failed();
-                }
+        Function<Pair<RpcResult<T>, RpcResult<SendBarrierOutput>>, RpcResult<T>> createComposingFunction() {
+        return input -> {
+            final RpcResultBuilder<T> resultBld;
+            if (input.getLeft().isSuccessful() && input.getRight().isSuccessful()) {
+                resultBld = RpcResultBuilder.success();
+            } else {
+                resultBld = RpcResultBuilder.failed();
+            }
 
-                final ArrayList<RpcError> rpcErrors = new ArrayList<>(input.getLeft().getErrors());
-                rpcErrors.addAll(input.getRight().getErrors());
-                resultBld.withRpcErrors(rpcErrors);
+            final ArrayList<RpcError> rpcErrors = new ArrayList<>(input.getLeft().getErrors());
+            rpcErrors.addAll(input.getRight().getErrors());
+            resultBld.withRpcErrors(rpcErrors);
 
-                resultBld.withResult(input.getLeft().getResult());
+            resultBld.withResult(input.getLeft().getResult());
 
-                return resultBld.build();
-            }
+            return resultBld.build();
         };
     }
 
@@ -194,7 +177,7 @@ public final class FlowUtil {
      * @return instance identifier assembled for given node, table and flow
      */
     public static FlowRef buildFlowPath(final InstanceIdentifier<Node> nodePath,
-                                        final short tableId, final FlowId flowId) {
+                                        final Uint8 tableId, final FlowId flowId) {
         final KeyedInstanceIdentifier<Flow, FlowKey> flowPath = nodePath
                 .augmentation(FlowCapableNode.class)
                 .child(Table.class, new TableKey(tableId))
@@ -212,55 +195,51 @@ public final class FlowUtil {
      * @return static reusable function
      */
     public static <O> Function<List<RpcResult<O>>, RpcResult<List<BatchFailedFlowsOutput>>> createCumulatingFunction(
-            final List<? extends BatchFlowIdGrouping> inputBatchFlows) {
+            final Collection<? extends BatchFlowIdGrouping> inputBatchFlows) {
         return new CumulatingFunction<O>(inputBatchFlows).invoke();
     }
 
     private static class CumulatingFunction<O> {
-        private final List<? extends BatchFlowIdGrouping> inputBatchFlows;
+        private final Collection<? extends BatchFlowIdGrouping> inputBatchFlows;
 
-        CumulatingFunction(List<? extends BatchFlowIdGrouping> inputBatchFlows) {
+        CumulatingFunction(final Collection<? extends BatchFlowIdGrouping> inputBatchFlows) {
             this.inputBatchFlows = inputBatchFlows;
         }
 
         public Function<List<RpcResult<O>>, RpcResult<List<BatchFailedFlowsOutput>>> invoke() {
-            return new Function<List<RpcResult<O>>, RpcResult<List<BatchFailedFlowsOutput>>>() {
-                @Nullable
-                @Override
-                public RpcResult<List<BatchFailedFlowsOutput>> apply(@Nullable final List<RpcResult<O>> innerInput) {
-                    final int sizeOfFutures = innerInput.size();
-                    final int sizeOfInputBatch = inputBatchFlows.size();
-                    Preconditions.checkArgument(sizeOfFutures == sizeOfInputBatch,
-                            "wrong amount of returned futures: {} <> {}", sizeOfFutures, sizeOfInputBatch);
-
-                    final ArrayList<BatchFailedFlowsOutput> batchFlows = new ArrayList<>(sizeOfFutures);
-                    final Iterator<? extends BatchFlowIdGrouping> batchFlowIterator = inputBatchFlows.iterator();
-
-                    Collection<RpcError> flowErrors = new ArrayList<>(sizeOfFutures);
-
-                    int batchOrder = 0;
-                    for (RpcResult<O> flowModOutput : innerInput) {
-                        final FlowId flowId = batchFlowIterator.next().getFlowId();
-
-                        if (!flowModOutput.isSuccessful()) {
-                            batchFlows.add(new BatchFailedFlowsOutputBuilder()
-                                    .setFlowId(flowId)
-                                    .setBatchOrder(batchOrder)
-                                    .build());
-                            flowErrors.addAll(flowModOutput.getErrors());
-                        }
-                        batchOrder++;
+            return (final List<RpcResult<O>> innerInput) -> {
+                final int sizeOfFutures = innerInput.size();
+                final int sizeOfInputBatch = inputBatchFlows.size();
+                Preconditions.checkArgument(sizeOfFutures == sizeOfInputBatch,
+                        "wrong amount of returned futures: {} <> {}", sizeOfFutures, sizeOfInputBatch);
+
+                final ArrayList<BatchFailedFlowsOutput> batchFlows = new ArrayList<>(sizeOfFutures);
+                final Iterator<? extends BatchFlowIdGrouping> batchFlowIterator = inputBatchFlows.iterator();
+
+                Collection<RpcError> flowErrors = new ArrayList<>(sizeOfFutures);
+
+                int batchOrder = 0;
+                for (RpcResult<O> flowModOutput : innerInput) {
+                    final FlowId flowId = batchFlowIterator.next().getFlowId();
+
+                    if (!flowModOutput.isSuccessful()) {
+                        batchFlows.add(new BatchFailedFlowsOutputBuilder()
+                                .setFlowId(flowId)
+                                .setBatchOrder(batchOrder)
+                                .build());
+                        flowErrors.addAll(flowModOutput.getErrors());
                     }
+                    batchOrder++;
+                }
 
-                    final RpcResultBuilder<List<BatchFailedFlowsOutput>> resultBuilder;
-                    if (!flowErrors.isEmpty()) {
-                        resultBuilder = RpcResultBuilder.<List<BatchFailedFlowsOutput>>failed()
-                                .withRpcErrors(flowErrors).withResult(batchFlows);
-                    } else {
-                        resultBuilder = SUCCESSFUL_FLOW_OUTPUT_RPC_RESULT;
-                    }
-                    return resultBuilder.build();
+                final RpcResultBuilder<List<BatchFailedFlowsOutput>> resultBuilder;
+                if (!flowErrors.isEmpty()) {
+                    resultBuilder = RpcResultBuilder.<List<BatchFailedFlowsOutput>>failed()
+                            .withRpcErrors(flowErrors).withResult(batchFlows);
+                } else {
+                    resultBuilder = SUCCESSFUL_FLOW_OUTPUT_RPC_RESULT;
                 }
+                return resultBuilder.build();
             };
         }
     }