package org.molgenis.data.support;
import org.molgenis.data.Entity;
import org.molgenis.data.Query;
import org.molgenis.util.BatchingIterable;
import java.util.List;
/**
* BatchingIterable that batches a Query.
* <p>
* It changes the query's offset and pageSize of each batch.
*/
public abstract class BatchingQueryResult<E extends Entity> extends BatchingIterable<E>
{
private final Query<E> query;
public BatchingQueryResult(int batchSize, Query<E> query)
{
super(batchSize, query.getOffset(), query.getPageSize());
this.query = query;
}
@Override
protected List<E> getBatch(int offset, int batchSize)
{
Query<E> batchQuery;
if (offset != query.getOffset() || batchSize != query.getPageSize())
{
batchQuery = new QueryImpl<>(query).setOffset(offset).setPageSize(batchSize);
}
else
{
batchQuery = query;
}
return getBatch(batchQuery);
}
protected abstract List<E> getBatch(Query<E> q);
}