package edu.isistan.uima.unified.collectionreaders; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URI; import org.apache.uima.UimaContext; import org.apache.uima.cas.impl.XmiCasDeserializer; import org.apache.uima.collection.CollectionException; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Progress; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; import org.uimafit.component.JCasCollectionReader_ImplBase; import org.uimafit.descriptor.ConfigurationParameter; import org.uimafit.descriptor.ExternalResource; import org.xml.sax.SAXException; import edu.isistan.uima.unified.sharedresources.ProgressMonitorResource; import edu.isistan.uima.unified.sharedresources.XMISharedDataResource; public class XMIReaderCollectionReader extends JCasCollectionReader_ImplBase { @ConfigurationParameter(name="input") private String inputString; @ExternalResource(key="sharedData", mandatory=false) private XMISharedDataResource sharedData; // private URI resourceURI; private FileInputStream inputStream; private boolean processed; // @ExternalResource(key="monitor") private ProgressMonitorResource monitorResource; private IProgressMonitor subMonitor; public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); //inputString = (String)aContext.getConfigParameterValue("input"); // resourceURI = URI.create(inputString); try { inputStream = new FileInputStream(new File(resourceURI)); processed = false; } catch (FileNotFoundException e) { e.printStackTrace(); } } @Override public boolean hasNext() throws IOException, CollectionException { return !processed; } @Override public void getNext(JCas jCas) throws IOException, CollectionException { try { // subMonitor = new SubProgressMonitor(monitorResource.getMonitor(), 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); subMonitor.beginTask(this.getClass().getSimpleName(), 1); // if(sharedData != null && sharedData.getSharedData() != null) XmiCasDeserializer.deserialize(inputStream, jCas.getCas(), false, sharedData.getSharedData()); else XmiCasDeserializer.deserialize(inputStream, jCas.getCas()); processed = true; // subMonitor.worked(1); subMonitor.done(); } catch (SAXException e) { throw new CollectionException(e); } finally { inputStream.close(); } } @Override public Progress[] getProgress() { return null; } @Override public void close() throws IOException { inputStream.close(); super.close(); } @Override public void destroy() { inputStream = null; super.destroy(); } }