Merge "Bug 6366 - of-switch-config-pusher - DTCL instead of DTL"
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / util / MeterUtil.java
index d224c702792fbec2c9abaee9a92c0c954a78ecb4..e31cafd51570baf341fe16d4b88b8b38be085309 100644 (file)
@@ -121,44 +121,7 @@ public final class MeterUtil {
     public static <O> Function<List<RpcResult<O>>, RpcResult<List<BatchFailedMetersOutput>>> createCumulativeFunction(
             final Iterable<? extends org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter> inputBatchMeters,
             final int sizeOfInputBatch) {
-        return new Function<List<RpcResult<O>>, RpcResult<List<BatchFailedMetersOutput>>>() {
-            @Nullable
-            @Override
-            public RpcResult<List<BatchFailedMetersOutput>> apply(@Nullable final List<RpcResult<O>> innerInput) {
-                final int sizeOfFutures = innerInput.size();
-                Preconditions.checkArgument(sizeOfFutures == sizeOfInputBatch,
-                        "wrong amount of returned futures: {} <> {}", sizeOfFutures, sizeOfInputBatch);
-
-                final List<BatchFailedMetersOutput> batchMeters = new ArrayList<>();
-                final Iterator<? extends org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter>
-                        batchMeterIterator = inputBatchMeters.iterator();
-
-                Collection<RpcError> meterErrors = new ArrayList<>(sizeOfFutures);
-
-                int batchOrder = 0;
-                for (RpcResult<O> meterModOutput : innerInput) {
-                    final MeterId meterId = batchMeterIterator.next().getMeterId();
-
-                    if (!meterModOutput.isSuccessful()) {
-                        batchMeters.add(new BatchFailedMetersOutputBuilder()
-                                .setBatchOrder(batchOrder)
-                                .setMeterId(meterId)
-                                .build());
-                        meterErrors.addAll(meterModOutput.getErrors());
-                    }
-                    batchOrder++;
-                }
-
-                final RpcResultBuilder<List<BatchFailedMetersOutput>> resultBuilder;
-                if (!meterErrors.isEmpty()) {
-                    resultBuilder = RpcResultBuilder.<List<BatchFailedMetersOutput>>failed()
-                            .withRpcErrors(meterErrors).withResult(batchMeters);
-                } else {
-                    resultBuilder = SUCCESSFUL_METER_OUTPUT_RPC_RESULT;
-                }
-                return resultBuilder.build();
-            }
-        };
+        return new CumulativeFunction<O>(inputBatchMeters, sizeOfInputBatch).invoke();
     }
 
     /**
@@ -216,4 +179,55 @@ public final class MeterUtil {
         }
         return resultBld;
     }
+
+    private static class CumulativeFunction<O> {
+        private final Iterable<? extends org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter> inputBatchMeters;
+        private final int sizeOfInputBatch;
+
+        public CumulativeFunction(Iterable<? extends org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter> inputBatchMeters, int sizeOfInputBatch) {
+            this.inputBatchMeters = inputBatchMeters;
+            this.sizeOfInputBatch = sizeOfInputBatch;
+        }
+
+        public Function<List<RpcResult<O>>, RpcResult<List<BatchFailedMetersOutput>>> invoke() {
+            return new Function<List<RpcResult<O>>, RpcResult<List<BatchFailedMetersOutput>>>() {
+                @Nullable
+                @Override
+                public RpcResult<List<BatchFailedMetersOutput>> apply(@Nullable final List<RpcResult<O>> innerInput) {
+                    final int sizeOfFutures = innerInput.size();
+                    Preconditions.checkArgument(sizeOfFutures == sizeOfInputBatch,
+                            "wrong amount of returned futures: {} <> {}", sizeOfFutures, sizeOfInputBatch);
+
+                    final List<BatchFailedMetersOutput> batchMeters = new ArrayList<>();
+                    final Iterator<? extends org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter>
+                            batchMeterIterator = inputBatchMeters.iterator();
+
+                    Collection<RpcError> meterErrors = new ArrayList<>(sizeOfFutures);
+
+                    int batchOrder = 0;
+                    for (RpcResult<O> meterModOutput : innerInput) {
+                        final MeterId meterId = batchMeterIterator.next().getMeterId();
+
+                        if (!meterModOutput.isSuccessful()) {
+                            batchMeters.add(new BatchFailedMetersOutputBuilder()
+                                    .setBatchOrder(batchOrder)
+                                    .setMeterId(meterId)
+                                    .build());
+                            meterErrors.addAll(meterModOutput.getErrors());
+                        }
+                        batchOrder++;
+                    }
+
+                    final RpcResultBuilder<List<BatchFailedMetersOutput>> resultBuilder;
+                    if (!meterErrors.isEmpty()) {
+                        resultBuilder = RpcResultBuilder.<List<BatchFailedMetersOutput>>failed()
+                                .withRpcErrors(meterErrors).withResult(batchMeters);
+                    } else {
+                        resultBuilder = SUCCESSFUL_METER_OUTPUT_RPC_RESULT;
+                    }
+                    return resultBuilder.build();
+                }
+            };
+        }
+    }
 }