@Override public void execute() throws ExecutionException { AnnotationSet inputAS = document.getAnnotations(inputASName); AnnotationSet outputAS = document.getAnnotations(outputASName); AnnotationSet tagAS = document.getAnnotations(tagASName); AnnotationSet annotsToTransfer = null; boolean newID = copyAnnotations && inputAS.equals(outputAS); mappings.clear(); // TODO clean this up so we don't have to repeat ourselves if (configURL != null) { BufferedReader in = null; try { in = new BomStrippingInputStreamReader(configURL.openStream()); String line = in.readLine(); while (line != null) { if (!line.trim().equals("")) { String[] data = line.split("=", 2); String oldName = data[0].trim(); String newName = data.length == 2 ? data[1].trim() : null; mappings.put(oldName, new Mapping(oldName, newName)); } line = in.readLine(); } } catch (IOException ioe) { ioe.printStackTrace(); } finally { IOUtils.closeQuietly(in); } } else if (annotationTypes != null) { for (String type : annotationTypes) { String[] data = type.split("=", 2); String oldName = data[0].trim(); String newName = data.length == 2 ? data[1].trim() : null; mappings.put(oldName, new Mapping(oldName, newName)); } } // else // throw new // ExecutionException("The annotation list and URL cannot both be null"); if (mappings.size() > 0) { annotsToTransfer = inputAS.get(mappings.keySet()); } else { // transfer everything annotsToTransfer = inputAS.get(); } // in case of no one annotation from some of annotationTypes if (annotsToTransfer == null || annotsToTransfer.size() == 0) return; // check if we have a BODY annotation // if not, just copy all if (textTagName == null || textTagName.equals("")) { // remove from input set unless we copy only if (!copyAnnotations) inputAS.removeAll(annotsToTransfer); transferAnnotations(new ArrayList<Annotation>(annotsToTransfer), outputAS, newID); return; } // get the BODY annotation bodyAnnotations = tagAS.get(textTagName); if (bodyAnnotations == null || bodyAnnotations.isEmpty()) { // outputAS.addAll(inputAS); if (transferAllUnlessFound) { // remove from input set unless we copy only if (!copyAnnotations) inputAS.removeAll(annotsToTransfer); transferAnnotations(new ArrayList<Annotation>(annotsToTransfer), outputAS, newID); } return; } List<Annotation> annots2Move = new ArrayList<Annotation>(); Iterator<Annotation> bodyIter = bodyAnnotations.iterator(); while (bodyIter.hasNext()) { Annotation bodyAnn = bodyIter.next(); Long start = bodyAnn.getStartNode().getOffset(); Long end = bodyAnn.getEndNode().getOffset(); // get all annotations we want transferred AnnotationSet annots2Copy = annotsToTransfer.getContained(start, end); // copy them to the new set and delete them from the old one annots2Move.addAll(annots2Copy); } if (!copyAnnotations) inputAS.removeAll(annots2Move); transferAnnotations(annots2Move, outputAS, newID); }