private List getAnnotationRanges()

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;
  }