//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.collectionreaders.helpers;
import java.util.Iterator;
import java.util.stream.Stream;
import org.apache.uima.UimaContext;
import org.apache.uima.fit.descriptor.ConfigurationParameter;
import uk.gov.dstl.baleen.exceptions.BaleenException;
/**
* A collection reader that is generated as a stream.
*
* @param <T>
* the generic type
*
* @baleen.javadoc
*/
public abstract class AbstractStreamCollectionReader<T> extends AbstractIteratatorCollectionReader<T> {
/**
* Max number of documents to read before stopping (0 for all)
*
* @baleen.config max 0
*/
public static final String KEY_MAX_DOCUMENTS = "max";
@ConfigurationParameter(name = KEY_MAX_DOCUMENTS, defaultValue = "0")
private int maxDocuments;
/**
* Skip the first x documents
*
* @baleen.config skip 0
*/
public static final String KEY_SKIP_DOCUMENTS = "skip";
@ConfigurationParameter(name = KEY_SKIP_DOCUMENTS, defaultValue = "0")
private int skipDocuments;
protected void setSkipDocuments(int skipDocuments) {
this.skipDocuments = skipDocuments;
}
protected Integer getSkipDocuments() {
return skipDocuments;
}
protected Integer getMaxDocuments() {
return maxDocuments;
}
protected void setMaxDocuments(Integer maxDocuments) {
this.maxDocuments = maxDocuments;
}
@Override
protected final Iterator<T> initializeIterator(UimaContext context) throws BaleenException {
Stream<T> stream = initializeStream(context);
if (skipDocuments > 0) {
stream = stream.skip(skipDocuments);
}
if (maxDocuments > 0) {
stream = stream.limit(maxDocuments);
}
return stream.iterator();
}
/**
* Initialize the stream.
*
* @param context
* the context
* @return the stream
* @throws BaleenException
* the baleen exception
*/
protected abstract Stream<T> initializeStream(UimaContext context) throws BaleenException;
}