X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fservices%2Fbatch%2FFlatBatchMeterAdapters.java;h=cccdea3423a2fd8c4c9809eca4ca8485fd168394;hb=edfdf20dacf6e3d17b98c1c11a9b7f87ff42b9a0;hp=e670bb1e98e7d6c12278eea0a52f9b08f26b15b4;hpb=b977adac522d210e9fea06b77a40f8bd87c2d193;p=openflowplugin.git diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/batch/FlatBatchMeterAdapters.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/batch/FlatBatchMeterAdapters.java index e670bb1e98..cccdea3423 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/batch/FlatBatchMeterAdapters.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/batch/FlatBatchMeterAdapters.java @@ -11,13 +11,10 @@ package org.opendaylight.openflowplugin.impl.services.batch; import com.google.common.annotations.VisibleForTesting; 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 +42,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 batchMeters = new ArrayList<>(); @@ -75,9 +73,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 batchMeters = new ArrayList<>(); @@ -96,9 +96,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 batchMeters = new ArrayList<>(); @@ -116,30 +118,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 Function, RpcResult> - createBatchMeterChainingFunction(final RpcResult chainInput, - final int stepOffset) { + convertBatchMeterResult(final int stepOffset) { return new Function, RpcResult>() { - @Nullable @Override - public RpcResult apply(@Nullable final RpcResult input) { - // create rpcResult builder honoring both success/failure of current input and chained input + join errors - final RpcResultBuilder output = FlatBatchUtil.mergeRpcResults(chainInput, input); - // convert values and add to chain values - final ProcessFlatBatchOutputBuilder outputBuilder = new ProcessFlatBatchOutputBuilder(chainInput.getResult()); - final List batchFailures = wrapBatchMeterFailuresForFlat(input, stepOffset); - // join values - if (outputBuilder.getBatchFailure() == null) { - outputBuilder.setBatchFailure(new ArrayList(batchFailures.size())); - } - outputBuilder.getBatchFailure().addAll(batchFailures); - - return output.withResult(outputBuilder.build()).build(); + public RpcResult apply(final RpcResult input) { + List batchFailures = wrapBatchMeterFailuresForFlat(input, stepOffset); + ProcessFlatBatchOutputBuilder outputBuilder = + new ProcessFlatBatchOutputBuilder().setBatchFailure(batchFailures); + return RpcResultBuilder.status(input.isSuccessful()) + .withRpcErrors(input.getErrors()) + .withResult(outputBuilder.build()) + .build(); } }; } @@ -162,19 +157,18 @@ public class FlatBatchMeterAdapters { } /** - * shortcut for {@link #createBatchMeterChainingFunction(RpcResult, int)} with conversion {@link ListenableFuture} + * Shortcut for {@link #convertBatchMeterResult(int)} with conversion {@link ListenableFuture}. * * @param 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 ListenableFuture> - adaptMeterBatchFutureForChain(final RpcResult chainInput, - final Future> resultUpdateMeterFuture, - final int currentOffset) { - return Futures.transform(JdkFutureAdapters.listenInPoolThread(resultUpdateMeterFuture), - FlatBatchMeterAdapters.createBatchMeterChainingFunction(chainInput, currentOffset)); + convertMeterBatchFutureForChain(final ListenableFuture> resultUpdateMeterFuture, + final int currentOffset) { + return Futures.transform(resultUpdateMeterFuture, + FlatBatchMeterAdapters.convertBatchMeterResult(currentOffset), + MoreExecutors.directExecutor()); } }