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 edu.isistan.dal.srs.model.Document; import edu.isistan.dal.srs.model.Project; import edu.isistan.dal.srs.model.Section; import edu.isistan.uima.unified.analysisengines.AnnotationGenerator; import edu.isistan.uima.unified.sharedresources.ProgressMonitorResource; public class SRSCollectionReader extends JCasCollectionReader_ImplBase { @ConfigurationParameter(name="input") private String inputString; // private URI resourceURI; private ResourceSet resourceSet; private Resource resource; // private Project 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); //inputString = (String) aContext.getConfigParameterValue("input"); // resourceURI = URI.createURI(inputString); resourceSet = new ResourceSetImpl(); resource = resourceSet.getResource(resourceURI, true); project = (Project) resource.getContents().get(0); 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.getDocuments().size()); // for(Document document : project.getDocuments()) { int begin = buffer.length(); int end = begin; StringBuffer bufferDocument = new StringBuffer(); //bufferDocument.append(document.getContent()).append(EOL); //end += bufferDocument.length(); for(Section section : document.getSections()) end = transverse(end, section, bufferDocument, aJCas); if(bufferDocument.length() > 0) { buffer.append(bufferDocument); AnnotationGenerator.generateDocument(begin, end, document.getID(), document.getName(), "Document", aJCas); } // subMonitor.worked(1); } String text = buffer.toString(); aJCas.setDocumentText(text); AnnotationGenerator.generateProject(0, text.length(), project.getID(), project.getName(), project.getContent(), "SRSProject", resourceURI.toString(), aJCas); processed = true; // subMonitor.done(); } private int transverse(int begin, Section section, StringBuffer buffer, JCas aJCas) { StringBuffer bufferSection = new StringBuffer(); int end = begin; bufferSection.append(section.getContent()).append(EOL); end += bufferSection.length(); for(Section subsection : section.getSubsections()) end = transverse(end, subsection, bufferSection, aJCas); if(bufferSection.length() > 0) { buffer.append(bufferSection); AnnotationGenerator.generateSection(begin, end, section.getID(), section.getName(), "Section", aJCas); return end; } else return 0; } @Override public Progress[] getProgress() { return null; } @Override public void close() throws IOException { super.close(); } @Override public void destroy() { super.destroy(); } }