/** Annotation remove event */ public void annotationRemoved(AnnotationSetEvent ase) { if (!disableListener && ase.getSourceDocument() == this) { AnnotationSet as = (AnnotationSet) ase.getSource(); Annotation annot = ase.getAnnotation(); FeatureMap features = Factory.newFeatureMap(); features.putAll(annot.getFeatures()); boolean defaultAS = as.getName() == null; for (String docID : combinedDocumentIds) { Document aDoc = compoundDocument.getDocument(docID); // find out the details which refer to the deleted annotation OffsetDetails od = getOffsetDetails(docID, as.getName(), annot); if (od == null) continue; if (defaultAS) { aDoc.getAnnotations().remove(od.getOriginalAnnotation()); } else { aDoc.getAnnotations(as.getName()).remove(od.getOriginalAnnotation()); } removeOffsetDetails(docID, od); break; } } }
public void annotationUpdated(AnnotationEvent e) { if (e.getType() == AnnotationEvent.FEATURES_UPDATED) { if (!disableListener) { Annotation annot = (Annotation) e.getSource(); // lets find out which annotation set it belongs to AnnotationSet as = null; if (getAnnotations().contains(annot)) { as = getAnnotations(); } else { Map<String, AnnotationSet> ass = getNamedAnnotationSets(); if (ass == null) return; Iterator<String> namesIter = getNamedAnnotationSets().keySet().iterator(); while (namesIter.hasNext()) { String name = namesIter.next(); as = getNamedAnnotationSets().get(name); if (as.contains(annot)) { break; } else as = null; } } if (as == null) return; for (String docID : combinedDocumentIds) { OffsetDetails od = getOffsetDetails(docID, as.getName(), annot); if (od == null) continue; Annotation toUse = od.getOriginalAnnotation(); toUse.setFeatures(annot.getFeatures()); } } } }
/** Annotation added event */ public void annotationAdded(AnnotationSetEvent ase) { if (!disableListener && ase.getSourceDocument() == this) { AnnotationSet as = (AnnotationSet) ase.getSource(); Annotation annot = ase.getAnnotation(); annot.addAnnotationListener(this); FeatureMap features = Factory.newFeatureMap(); features.putAll(annot.getFeatures()); boolean defaultAS = as.getName() == null; for (String docID : combinedDocumentIds) { Document aDoc = compoundDocument.getDocument(docID); long stOffset = getOffsetInSrcDocument(docID, annot.getStartNode().getOffset().longValue()); if (stOffset == -1) continue; long enOffset = getOffsetInSrcDocument(docID, annot.getEndNode().getOffset().longValue()); if (enOffset == -1) continue; Annotation originalAnnot = null; try { Integer id = annot.getId(); if (defaultAS) { aDoc.getAnnotations() .add(id, new Long(stOffset), new Long(enOffset), annot.getType(), features); originalAnnot = aDoc.getAnnotations().get(id); } else { aDoc.getAnnotations(as.getName()) .add(id, new Long(stOffset), new Long(enOffset), annot.getType(), features); originalAnnot = aDoc.getAnnotations(as.getName()).get(id); } } catch (InvalidOffsetException ioe) { System.out.println(aDoc.getName() + "=" + stOffset + "=" + enOffset); throw new GateRuntimeException(ioe); } OffsetDetails od = new OffsetDetails(); od.setOldStartOffset(stOffset); od.setOldEndOffset(enOffset); od.setNewStartOffset(annot.getStartNode().getOffset().longValue()); od.setNewEndOffset(annot.getEndNode().getOffset().longValue()); od.setOriginalAnnotation(originalAnnot); od.setNewAnnotation(annot); addNewOffsetDetails(docID, od); break; } } }
/** * Two AnnotationSet are equal if their name, the documents of which belong to the AnnotationSets * and annotations from the sets are the same */ public static boolean annotationSetsEqual(AnnotationSet as1, AnnotationSet as2) { if (as1 == null ^ as2 == null) return false; if (as1 == null) return true; // Sets equality if (as1.size() != as2.size()) return false; try { if (!as1.containsAll(as2)) return false; } catch (ClassCastException unused) { return false; } catch (NullPointerException unused) { return false; } // removed to prevent infinite looping in testDocumentsEqual() // // verify the documents which they belong to // if (! check (as1.getDocument(), as2.getDocument())) return false; // verify the name of the AnnotationSets if (!check(as1.getName(), as2.getName())) return false; return true; } // equals