package edu.isistan.uima.unified.collectionreaders; import java.io.IOException; import org.apache.uima.UimaContext; 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.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.uimafit.component.JCasCollectionReader_ImplBase; import org.uimafit.descriptor.ConfigurationParameter; import org.uimafit.descriptor.ExternalResource; import SadModel.Sad; import SadModel.SadSection; import edu.isistan.uima.unified.analysisengines.AnnotationGenerator; import edu.isistan.uima.unified.sharedresources.ProgressMonitorResource; public class SADCollectionReader extends JCasCollectionReader_ImplBase { @ConfigurationParameter(name="input") private String inputString; private URI resourceURI; private ResourceSet resourceSet; private Resource resource; private Sad project; private boolean processed; // public static String EOL = System.getProperty("line.separator"); // @ExternalResource(key="monitor") private ProgressMonitorResource monitorResource; private IProgressMonitor subMonitor; // @Override public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); resourceURI = URI.createURI(inputString); resourceSet = new ResourceSetImpl(); resource = resourceSet.getResource(resourceURI, true); project = (Sad) resource.getContents().get(resource.getContents().size()-1); processed = false; } @Override public boolean hasNext() throws IOException, CollectionException { return !processed; } @Override public void getNext(JCas aJCas) throws IOException, CollectionException { StringBuffer buffer = new StringBuffer(); subMonitor = new SubProgressMonitor(monitorResource.getMonitor(), 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); subMonitor.beginTask(this.getClass().getSimpleName(), project.getSections().size()); int gap= 0; if(project.getSections().size()==2){ gap =1; } for(SadSection section : project.getSections()) { int begin = buffer.length(); StringBuffer bufferDocument = new StringBuffer(); String text=section.getText(); if(text!=null && !"".equals(text)){ bufferDocument.append(text).append(EOL); buffer.append(bufferDocument); generateSection(begin,section,"Section", bufferDocument, aJCas); } subMonitor.worked(1); } String allDocument = buffer.toString(); aJCas.setDocumentText(allDocument); AnnotationGenerator.generateSad(0, allDocument.length(), project.getID(), project.getTitle(), project.getContent(), "Sad", aJCas,gap); processed = true; subMonitor.done(); } private int generateSection(int begin, SadSection section, String kind, StringBuffer buffer, JCas aJCas) { StringBuffer bufferSection = new StringBuffer(); int end = begin; bufferSection.append(section.getText()).append(EOL); end += bufferSection.length(); if(bufferSection.length() > 0) { buffer.append(bufferSection); AnnotationGenerator.generateSadSection(begin, end, section.getID(), section.getName(), kind, aJCas); return end; } else return 0; } // private int transverseMultiple(int begin, EList<Section> sections, String kind, StringBuffer buffer, JCas aJCas) { // int end = begin; // for(Section section : sections) // end = transverseSingle(end, section, kind, buffer, aJCas); // return end; // } @Override public Progress[] getProgress() { return null; } @Override public void close() throws IOException { super.close(); } @Override public void destroy() { super.destroy(); } }