package edu.isistan.uima.unified.casconsumers; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.URI; import org.apache.uima.UimaContext; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.impl.XmiCasSerializer; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.XMLSerializer; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; import org.uimafit.component.JCasConsumer_ImplBase; import org.uimafit.descriptor.ConfigurationParameter; import org.uimafit.descriptor.ExternalResource; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; import edu.isistan.uima.unified.sharedresources.ProgressMonitorResource; import edu.isistan.uima.unified.sharedresources.XMISharedDataResource; public class XMIWriterCasConsumer extends JCasConsumer_ImplBase { @ConfigurationParameter(name="output") private String outputString; @ExternalResource(key="sharedData", mandatory=false) private XMISharedDataResource sharedData; // private URI resourceURI; private FileOutputStream outputStream; // private XMLSerializer xmlSer; private ContentHandler contentHandler; // private XmiCasSerializer ser; // @ExternalResource(key="monitor") private ProgressMonitorResource monitorResource; private IProgressMonitor subMonitor; public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); //outputString = (String)aContext.getConfigParameterValue("output"); // resourceURI = URI.create(outputString); try { outputStream = new FileOutputStream(new File(resourceURI)); xmlSer = new XMLSerializer(outputStream, true); contentHandler = xmlSer.getContentHandler(); } catch (FileNotFoundException e) { e.printStackTrace(); } } @Override public void process(JCas jCas) throws AnalysisEngineProcessException { try { // subMonitor = new SubProgressMonitor(monitorResource.getMonitor(), 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); subMonitor.beginTask(this.getClass().getSimpleName(), 1); // ser = new XmiCasSerializer(jCas.getTypeSystem()); if(sharedData != null && sharedData.getSharedData() != null) ser.serialize(jCas.getCas(), contentHandler, null, sharedData.getSharedData()); else ser.serialize(jCas.getCas(), contentHandler); // subMonitor.worked(1); subMonitor.done(); } catch (SAXException e) { throw new AnalysisEngineProcessException(e); } } @Override public void collectionProcessComplete() throws AnalysisEngineProcessException { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } super.collectionProcessComplete(); } @Override public void destroy() { outputStream = null; xmlSer = null; contentHandler = null; super.destroy(); } }