package de.invesdwin.util.collections.iterable.concurrent; import javax.annotation.concurrent.Immutable; import de.invesdwin.util.collections.iterable.ICloseableIterable; import de.invesdwin.util.collections.iterable.ACloseableIterator; @Immutable public abstract class AParallelChunkConsumerIterable<R, E> implements ICloseableIterable<E> { public static final int DEFAULT_CHUNK_SIZE = 10000; private final String name; private final ICloseableIterable<R> requests; private final int chunkSize; public AParallelChunkConsumerIterable(final String name, final ICloseableIterable<R> requests) { this(name, requests, DEFAULT_CHUNK_SIZE); } public AParallelChunkConsumerIterable(final String name, final ICloseableIterable<R> requests, final int chunkSize) { this.name = name; this.requests = requests; this.chunkSize = chunkSize; } @Override public ACloseableIterator<E> iterator() { return new AParallelChunkConsumerIterator<R, E>(name, requests.iterator(), chunkSize) { @Override protected E doWork(final R request) { return AParallelChunkConsumerIterable.this.doWork(request); } }; } protected abstract E doWork(R request); }