package eu.dnetlib.enabling.resultset;

import java.util.List;

import org.springframework.beans.factory.annotation.Required;

import com.google.common.collect.Lists;

import eu.dnetlib.enabling.resultset.listener.ResultSetListener;
import eu.dnetlib.enabling.resultset.registry.ResultSetRegistry;
import eu.dnetlib.enabling.resultset.rmi.ResultSetException;
import eu.dnetlib.enabling.resultset.rmi.ResultSetResponse;
import eu.dnetlib.enabling.resultset.rmi.ResultSetService;
import eu.dnetlib.enabling.tools.AbstractBaseService;

public class ResultSetServiceImpl extends AbstractBaseService implements ResultSetService {
	
	private ResultSetRegistry resultSetRegistry;
	
	@Override
	public ResultSetResponse getNextResults(final String rsId, final int n) throws ResultSetException {
		final ResultSetListener<?> rs = resultSetRegistry.getResultSetById(rsId);
		final int start = rs.getCount();
		final List<Object> elements = Lists.newArrayList();
		
		while (rs.hasNext() && elements.size() < n) {
			elements.add(rs.next());
		}
		
		final int from = start;
		final int to = rs.getCount();
		final boolean end = !rs.hasNext();
		final int total = rs.getTotal();

		return new ResultSetResponse(from, to, end, total, elements);
	}

	public ResultSetRegistry getResultSetRegistry() {
		return resultSetRegistry;
	}

	@Required
	public void setResultSetRegistry(ResultSetRegistry resultSetRegistry) {
		this.resultSetRegistry = resultSetRegistry;
	}


}
