package com.robotoworks.mechanoid.ops; import java.util.ArrayList; import java.util.List; import android.content.Intent; import android.os.Bundle; import android.util.Log; public class BatchOperation extends Operation { private List<Operation> mBatchOperations; public BatchOperation(List<Operation> operations) { this.mBatchOperations = operations; } @Override public OperationResult execute(OperationContext context) { Intent intent = context.getIntent(); ArrayList<Bundle> results = new ArrayList<Bundle>(); List<Intent> intents = intent.getParcelableArrayListExtra(OperationService.EXTRA_BATCH); for(int i = 0; i < mBatchOperations.size(); i++) { Intent batchIntent = intents.get(i); if(context.getEnableLogging()) { Log.d(context.getLogTag(), String.format("[Batch Operation] intent:%s", batchIntent)); } Operation operation = mBatchOperations.get(i); context.setIntent(batchIntent); try { OperationResult opResult = operation.execute(context); if(opResult == null) { throw new NullPointerException("OperationResult should not be null"); } results.add(opResult.toBundle()); } catch(Exception x) { results.add(OperationResult.error(x).toBundle()); } } Bundle resultBundle = new Bundle(); resultBundle.putParcelableArrayList(OperationResult.EXTRA_BATCH_RESULTS, results); return OperationResult.ok(resultBundle); } }