//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.collectionreaders.helpers;
import java.io.IOException;
import java.util.Iterator;
import org.apache.uima.UimaContext;
import org.apache.uima.collection.CollectionException;
import org.apache.uima.jcas.JCas;
import org.apache.uima.resource.ResourceInitializationException;
import uk.gov.dstl.baleen.exceptions.BaleenException;
import uk.gov.dstl.baleen.uima.BaleenCollectionReader;
/**
* A collection reader that can be represented by an iterator, where each call to next() generates a
* new document.
*
* @param <T>
* the generic type
*/
public abstract class AbstractIteratatorCollectionReader<T> extends BaleenCollectionReader {
private Iterator<T> iterator;
@Override
protected final void doInitialize(UimaContext context) throws ResourceInitializationException {
try {
iterator = initializeIterator(context);
} catch (final BaleenException e) {
throw new ResourceInitializationException(e);
}
}
@Override
protected final void doGetNext(JCas jCas) throws IOException, CollectionException {
final T next = iterator.next();
apply(next, jCas);
}
@Override
public final boolean doHasNext() throws IOException, CollectionException {
return iterator.hasNext();
}
/**
* Create the iterator (called once)
*
* @param context
* the context
* @return the iterator
* @throws BaleenException
* the baleen exception
*/
protected abstract Iterator<T> initializeIterator(UimaContext context) throws BaleenException;
/**
* Convert the return item from the iterator to a jcas.
*
* @param next
* the next
* @param jCas
* the j cas
*/
protected abstract void apply(T next, JCas jCas);
}