in uimaj-ep-cev/src/main/java/org/apache/uima/cev/data/CEVAnnotationRanges.java [287:340]
private List<RangeInfo> getAnnotationRanges(AnnotationFS annot, boolean add) {
List<RangeInfo> result = new ArrayList<RangeInfo>();
boolean beginFound = false;
boolean endFound = false;
for (RangeInfo each : ranges) {
if (each.getStart() == annot.getBegin()) {
beginFound = true;
}
if (each.getEnd() == annot.getEnd()) {
endFound = true;
}
if (each.getStart() > annot.getEnd()) {
break;
}
}
if (!beginFound) {
for (RangeInfo each : new ArrayList<RangeInfo>(ranges)) {
if (each.getStart() < annot.getBegin() && each.getEnd() > annot.getBegin()) {
RangeInfo newLeft = new RangeInfo(each.getStart(), annot.getBegin(), casData);
RangeInfo newRight = new RangeInfo(annot.getBegin(), each.getEnd(), casData);
int indexOf = ranges.indexOf(each);
ranges.remove(indexOf);
ranges.add(indexOf, newRight);
ranges.add(indexOf, newLeft);
}
}
}
if (!endFound) {
for (RangeInfo each : new ArrayList<RangeInfo>(ranges)) {
if (each.getStart() < annot.getEnd() && each.getEnd() > annot.getEnd()) {
RangeInfo newLeft = new RangeInfo(each.getStart(), annot.getEnd(), casData);
RangeInfo newRight = new RangeInfo(annot.getEnd(), each.getEnd(), casData);
int indexOf = ranges.indexOf(each);
ranges.remove(indexOf);
ranges.add(indexOf, newRight);
ranges.add(indexOf, newLeft);
}
}
}
for (RangeInfo each : ranges) {
if (each.getStart() >= annot.getBegin() && each.getEnd() <= annot.getEnd()) {
result.add(each);
}
if (each.getStart() > annot.getEnd()) {
break;
}
}
return result;
}