package org.openstack.atlas.usage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class ExecutionUtilities {
private static final Log LOG = LogFactory.getLog(ExecutionUtilities.class);
public <T> void executeInBatchesInstance(Collection<T> objects, int batchSize, BatchAction<T> batchAction) throws Exception {
executeInBatches(objects, batchSize, batchAction);
}
@Deprecated
public static <T> void executeInBatches(Collection<T> objects, int batchSize, BatchAction<T> batchAction) throws Exception {
ArrayList<T> objectBatch = new ArrayList<T>();
int i = 0;
for (T object : objects) {
objectBatch.add(object);
if ((i + 1) % batchSize == 0) {
batchAction.execute(objectBatch);
objectBatch = new ArrayList<T>();
}
i++;
}
if (objectBatch.size() > 0) {
batchAction.execute(objectBatch);
}
}
public static <T> void ExecuteInBatches(List<T> objects, int batchSize, BatchAction<T> batchAction) throws Exception {
int batchNumber = 1;
ArrayList<T> objectBatch = new ArrayList<T>();
for (int i = 0; i < objects.size(); i++) {
objectBatch.add(objects.get(i));
if ((i + 1) % batchSize == 0) {
logBatchNumber(objects, batchAction, batchNumber);
batchNumber++;
batchAction.execute(objectBatch);
objectBatch = new ArrayList<T>();
}
}
if (objectBatch.size() > 0) {
logBatchNumber(objects, batchAction, batchNumber);
batchAction.execute(objectBatch);
}
}
private static <T> void logBatchNumber(List<T> objects, BatchAction<T> batchAction, int batchNumber) {
LOG.debug(String.format("Executing batch # '%d' %s, (total number of items = %d)", batchNumber, batchAction.getClass().getSimpleName(), objects.size()));
}
}