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.group._case.FlatBatchAddGroup;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
/**
- * transform between FlatBatch API and group batch API
+ * Transform between FlatBatch API and group batch API.
*/
public class FlatBatchGroupAdapters {
}
/**
- * @param chainInput here all partial results are collected (values + errors)
* @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 BatchGroupOutputListGrouping> Function<RpcResult<T>, RpcResult<ProcessFlatBatchOutput>>
- createBatchGroupChainingFunction(final RpcResult<ProcessFlatBatchOutput> chainInput,
- final int stepOffset) {
+ convertBatchGroupResult(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 = wrapBatchGroupFailuresForFlat(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();
+ List<BatchFailure> batchFailures = wrapBatchGroupFailuresForFlat(input, stepOffset);
+ ProcessFlatBatchOutputBuilder outputBuilder = new ProcessFlatBatchOutputBuilder().setBatchFailure(batchFailures);
+ return RpcResultBuilder.<ProcessFlatBatchOutput>status(input.isSuccessful())
+ .withRpcErrors(input.getErrors())
+ .withResult(outputBuilder.build())
+ .build();
}
};
}
}
/**
- * shortcut for {@link #createBatchGroupChainingFunction(RpcResult, int)} with conversion {@link ListenableFuture}
+ * shortcut for {@link #convertBatchGroupResult(int)} with conversion {@link ListenableFuture}
*
* @param <T> exact type of batch flow output
- * @param chainInput here all partial results are collected (values + errors)
* @param resultUpdateGroupFuture 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 BatchGroupOutputListGrouping> ListenableFuture<RpcResult<ProcessFlatBatchOutput>>
- adaptGroupBatchFutureForChain(final RpcResult<ProcessFlatBatchOutput> chainInput,
- final Future<RpcResult<T>> resultUpdateGroupFuture,
- final int currentOffset) {
+ convertGroupBatchFutureForChain(final Future<RpcResult<T>> resultUpdateGroupFuture,
+ final int currentOffset) {
return Futures.transform(JdkFutureAdapters.listenInPoolThread(resultUpdateGroupFuture),
- FlatBatchGroupAdapters.<T>createBatchGroupChainingFunction(chainInput, currentOffset));
+ FlatBatchGroupAdapters.<T>convertBatchGroupResult(currentOffset));
}
}