package de.invesdwin.util.collections.iterable.concurrent;
import javax.annotation.concurrent.NotThreadSafe;
import de.invesdwin.util.collections.iterable.ACloseableIterator;
import de.invesdwin.util.collections.iterable.ICloseableIterable;
@NotThreadSafe
public class ProducerQueueIterable<E> implements ICloseableIterable<E> {
private String name;
private ICloseableIterable<E> producer;
private int queueSize;
private boolean utilizationDebugEnabled;
public ProducerQueueIterable(final String name, final ICloseableIterable<E> producer) {
this(name, producer, ProducerQueueIterator.DEFAULT_QUEUE_SIZE);
}
public ProducerQueueIterable(final String name, final ICloseableIterable<E> producer, final int queueSize) {
this.name = name;
this.producer = producer;
this.queueSize = queueSize;
}
@Override
public ACloseableIterator<E> iterator() {
final ProducerQueueIterator<E> iterator = new ProducerQueueIterator<E>(name, producer.iterator(), queueSize);
if (utilizationDebugEnabled) {
iterator.withUtilizationDebugEnabled();
}
return iterator;
}
public ProducerQueueIterable<E> withUtilizationDebugEnabled() {
this.utilizationDebugEnabled = true;
return this;
}
public boolean isUtilizationDebugEnabled() {
return utilizationDebugEnabled;
}
}