package eu.dnetlib.data.resultSet;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import com.google.common.collect.Lists;

public class IterableResultSetIterator<T> implements ResultSetIterator<T> {

	private int total = -1;
	private Iterator<T> iter;
	private int position = 0;

	public IterableResultSetIterator(final Iterable<T> iterable) {
		this.iter = iterable.iterator();
		if (iterable instanceof Collection) {
			this.total = ((Collection<?>) iterable).size();
		}
	}

	@Override
	public int position() {
		return position;
	}

	@Override
	public boolean isFinished() {
		return !iter.hasNext();
	}

	@Override
	public int getTotal() {
		return total;
	}

	@Override
	public List<T> getNextElements(final int n) {
		final List<T> list = Lists.newArrayList();

		for (int i = 0; i < n && iter.hasNext(); i++) {
			list.add(iter.next());
		}

		position += list.size();

		return list;
	}
}
