package edu.isistan.sadanalyzer.util; import java.util.Comparator; import java.util.Iterator; import org.eclipse.emf.common.util.ECollections; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.query.conditions.eobjects.EObjectCondition; import org.eclipse.emf.query.conditions.eobjects.structuralfeatures.EObjectAttributeValueCondition; import org.eclipse.emf.query.conditions.numbers.NumberCondition; import org.eclipse.emf.query.conditions.strings.StringValue; import org.eclipse.emf.query.statements.IQueryResult; import uima.tcas.Annotation; import uima.tcas.TCasPackage; public class CCUtil { // Utilities @SuppressWarnings({ "rawtypes", "unchecked" }) public static <T> EList<T> fromIQueryResultToEList(IQueryResult result, EList<T> list) { Iterator it = result.iterator(); while(it.hasNext()) list.add((T)it.next()); sort((EList<? extends Annotation>) list); return list; } public static void sort(EList<? extends Annotation> list) { ECollections.sort(list, new Comparator<Annotation>() { @Override public int compare(Annotation a1, Annotation a2) { int comp = a1.getBegin() - a2.getBegin(); if(comp != 0) return comp; else { comp = a1.getEnd() - a2.getEnd(); if(comp != 0) return comp; else { comp = (a1.getEnd() - a1.getBegin()) - (a2.getEnd() - a2.getBegin()); return comp; } } } }); } // Covered text public static String getCoveredText(Annotation annotation) { String sofaString = annotation.getSofa().getSofaString(); String coveredText = sofaString.substring(annotation.getBegin(), annotation.getEnd()); return coveredText; } // Annotation range condition public static EObjectCondition cRange(Annotation annotation) { int begin = annotation.getBegin(); int end = annotation.getEnd(); EObjectCondition cRangeBegin = new EObjectAttributeValueCondition(TCasPackage.Literals.ANNOTATION__BEGIN, NumberCondition.between(begin, true, end, true)); EObjectCondition cRangeEnd = new EObjectAttributeValueCondition(TCasPackage.Literals.ANNOTATION__END, NumberCondition.between(begin, true, end, true)); return cRangeBegin.AND(cRangeEnd); } public static EObjectCondition cRangeInverse(Annotation annotation) { int begin = annotation.getBegin(); int end = annotation.getEnd(); EObjectCondition cRangeBegin = new EObjectAttributeValueCondition(TCasPackage.Literals.ANNOTATION__BEGIN, NumberCondition.lessThanOrEquals(begin)); EObjectCondition cRangeEnd = new EObjectAttributeValueCondition(TCasPackage.Literals.ANNOTATION__END, NumberCondition.greaterThanOrEquals(end)); return cRangeBegin.AND(cRangeEnd); } // Annotation identification public static EObjectCondition cIdentification(EAttribute attribute, String identification) { EObjectCondition condition = new EObjectAttributeValueCondition(attribute, new StringValue(identification)); return condition; } }