package at.ac.univie.mminf.qskos4j.progress;
import java.util.Collection;
import java.util.Iterator;
public class MonitoredIterator<T> implements Iterator<T> {
private Iterator<T> delegate;
private int totalSteps, currentStep;
private IProgressMonitor progressMonitor;
public MonitoredIterator(
Collection<T> iteratorProvider,
IProgressMonitor progressMonitor)
{
this.delegate = iteratorProvider.iterator();
this.totalSteps = iteratorProvider.size();
this.progressMonitor = progressMonitor;
currentStep = 0;
progressMonitor.reset();
}
public MonitoredIterator(
Collection<T> iteratorProvider,
IProgressMonitor progressMonitor,
String taskDescription)
{
this(iteratorProvider, progressMonitor);
progressMonitor.setTaskDescription(taskDescription);
}
@Override
public boolean hasNext() {
boolean hasNext = delegate.hasNext();
if (!hasNext) {
progressMonitor.onFinish();
}
return hasNext;
}
@Override
public T next() {
if (progressMonitor != null) {
progressMonitor.onUpdateProgress((float) currentStep / totalSteps);
currentStep++;
}
return delegate.next();
}
@Override
public void remove() {
delegate.remove();
}
}