gate.annotation
Class AnnotationSetImpl

java.lang.Object
  |
  +--java.util.AbstractCollection
        |
        +--java.util.AbstractSet
              |
              +--gate.annotation.AnnotationSetImpl
All Implemented Interfaces:
AnnotationSet, Cloneable, Collection, Serializable, Set
Direct Known Subclasses:
DatabaseAnnotationSetImpl

public class AnnotationSetImpl
extends AbstractSet
implements AnnotationSet

Implementation of AnnotationSet. Has a number of indices, all bar one of which are null by default and are only constructed when asked for. Has lots of get methods with various selection criteria; these return views into the set, which are nonetheless valid sets in their own right (but will not necesarily be fully indexed). Has a name, which is null by default; clients of Document can request named AnnotationSets if they so desire. Has a reference to the Document it is attached to. Contrary to Collections convention, there is no no-arg constructor, as this would leave the set in an inconsistent state.

There are five indices: annotation by id, annotations by type, annotations by start/end node and nodes by offset. The last three jointly provide positional indexing; construction of these is triggered by indexByStart/EndOffset(), or by calling a get method that selects on offset. The type index is triggered by indexByType(), or calling a get method that selects on type. The id index is always present.

See Also:
Serialized Form

Inner Class Summary
(package private)  class AnnotationSetImpl.AnnotationSetIterator
          This inner class serves as the return value from the iterator() method.
 class AnnotationSetImpl.VerboseHashMap
          Class used for the indexById structure.
 
Field Summary
private  Vector annotationSetListeners
           
(package private)  Map annotsByEndNode
          Maps node ids (Integers) to AnnotationSets representing those annotations that end at that node
protected  HashMap annotsById
          Maps annotation ids (Integers) to Annotations
(package private)  Map annotsByStartNode
          Maps node ids (Integers) to AnnotationSets representing those annotations that start from that node
(package private)  Map annotsByType
          Maps annotation types (Strings) to AnnotationSets
private static boolean DEBUG
          Debug flag
(package private)  DocumentImpl doc
          The document this set belongs to
private  Vector gateListeners
           
(package private)  String name
          The name of this set
(package private)  RBTreeMap nodesByOffset
          Maps offsets (Longs) to nodes
(package private) static long serialVersionUID
          Freeze the serialization UID.
 
Constructor Summary
AnnotationSetImpl(Collection c)
          Construction from Collection (which must be an AnnotationSet)
AnnotationSetImpl(Document doc)
          Construction from Document.
AnnotationSetImpl(Document doc, String name)
          Construction from Document and name.
 
Method Summary
 void add(Integer id, Long start, Long end, String type, FeatureMap features)
          Create and add an annotation from database read data In this case the id is already known being previously fetched from the database
 Integer add(Long start, Long end, String type, FeatureMap features)
          Create and add an annotation and return its id
 Integer add(Node start, Node end, String type, FeatureMap features)
          Create and add an annotation with pre-existing nodes, and return its id
 boolean add(Object o)
          Add an existing annotation.
 void addAnnotationSetListener(AnnotationSetListener l)
           
 void addGateListener(GateListener l)
           
(package private)  void addToEndOffsetIndex(Annotation a)
          Add an annotation to the end offset index.
(package private)  void addToOffsetIndex(Annotation a)
          Add an annotation to the offset indices.
(package private)  void addToStartOffsetIndex(Annotation a)
          Add an annotation to the start offset index.
(package private)  void addToTypeIndex(Annotation a)
          Add an annotation to the type index.
 Object clone()
           
 void edit(Long start, Long end, DocumentContent replacement)
          Propagate changes to the document content.
 boolean equals(Object other)
          Two AnnotationSet are equal if their name, the documents of which belong to the AnnotationSets and annotations from the sets are the same
protected  void fireAnnotationAdded(AnnotationSetEvent e)
           
protected  void fireAnnotationRemoved(AnnotationSetEvent e)
           
protected  void fireGateEvent(GateEvent e)
           
 Node firstNode()
          Get the node with the smallest offset
 AnnotationSet get()
          Get all annotations
 Annotation get(Integer id)
          Find annotations by id
 AnnotationSet get(Long offset)
          Select annotations by offset.
 AnnotationSet get(Long startOffset, Long endOffset)
          Select annotations by offset.
 AnnotationSet get(Set types)
          Select annotations by a set of types.
 AnnotationSet get(String type)
          Select annotations by type
 AnnotationSet get(String type, FeatureMap constraints)
          Select annotations by type and features
 AnnotationSet get(String type, FeatureMap constraints, Long offset)
          Select annotations by type, features and offset
 AnnotationSet get(String neededType, Long startOffset, Long endOffset)
          Select annotations by offset.
 AnnotationSet get(String type, Set featureNames)
          Select annotations by type and feature names
 Set getAllTypes()
          Get a set of java.lang.String objects representing all the annotation types present in this annotation set.
 AnnotationSet getContained(Long startOffset, Long endOffset)
          Select annotations by offset that start at a position between the start and end before the end offset
 Document getDocument()
          Get the document this set is attached to.
 String getName()
          Get the name of this set.
 int hashCode()
           
protected  void indexByEndOffset()
          Construct the positional indices for annotation end
protected  void indexByStartOffset()
          Construct the positional indices for annotation start
protected  void indexByType()
          Construct the positional index.
 Iterator iterator()
          Get an iterator for this set
 Node lastNode()
          Get the node with the largest offset
 Node nextNode(Node node)
          Get the first node that is relevant for this annotation set and which has the offset larger than the one of the node provided.
 boolean remove(Object o)
          Remove an element from this set.
 void removeAnnotationSetListener(AnnotationSetListener l)
           
protected  boolean removeFromIdIndex(Annotation a)
          Remove from the ID index.
protected  void removeFromOffsetIndex(Annotation a)
          Remove from the offset indices.
protected  void removeFromTypeIndex(Annotation a)
          Remove from the type index.
 void removeGateListener(GateListener l)
           
 int size()
          The size of this set
 
Methods inherited from class java.util.AbstractSet
removeAll
 
Methods inherited from class java.util.AbstractCollection
addAll, clear, contains, containsAll, isEmpty, retainAll, toArray, toArray, toString
 
Methods inherited from class java.lang.Object
, finalize, getClass, notify, notifyAll, registerNatives, wait, wait, wait
 
Methods inherited from interface java.util.Set
addAll, clear, contains, containsAll, isEmpty, removeAll, retainAll, toArray, toArray
 

Field Detail

DEBUG

private static final boolean DEBUG
Debug flag

name

String name
The name of this set

doc

DocumentImpl doc
The document this set belongs to

annotsById

protected HashMap annotsById
Maps annotation ids (Integers) to Annotations

annotsByType

Map annotsByType
Maps annotation types (Strings) to AnnotationSets

nodesByOffset

RBTreeMap nodesByOffset
Maps offsets (Longs) to nodes

annotsByStartNode

Map annotsByStartNode
Maps node ids (Integers) to AnnotationSets representing those annotations that start from that node

annotsByEndNode

Map annotsByEndNode
Maps node ids (Integers) to AnnotationSets representing those annotations that end at that node

annotationSetListeners

private transient Vector annotationSetListeners

gateListeners

private transient Vector gateListeners

serialVersionUID

static final long serialVersionUID
Freeze the serialization UID.
Constructor Detail

AnnotationSetImpl

public AnnotationSetImpl(Document doc)
Construction from Document.

AnnotationSetImpl

public AnnotationSetImpl(Document doc,
                         String name)
Construction from Document and name.

AnnotationSetImpl

public AnnotationSetImpl(Collection c)
                  throws ClassCastException
Construction from Collection (which must be an AnnotationSet)
Method Detail

iterator

public Iterator iterator()
Get an iterator for this set
Specified by:
iterator in interface AnnotationSet
Overrides:
iterator in class AbstractCollection

remove

public boolean remove(Object o)
               throws ClassCastException
Remove an element from this set.
Specified by:
remove in interface AnnotationSet
Overrides:
remove in class AbstractCollection

removeFromIdIndex

protected boolean removeFromIdIndex(Annotation a)
Remove from the ID index.

removeFromTypeIndex

protected void removeFromTypeIndex(Annotation a)
Remove from the type index.

removeFromOffsetIndex

protected void removeFromOffsetIndex(Annotation a)
Remove from the offset indices.

size

public int size()
The size of this set
Specified by:
size in interface AnnotationSet
Overrides:
size in class AbstractCollection

get

public Annotation get(Integer id)
Find annotations by id
Specified by:
get in interface AnnotationSet

get

public AnnotationSet get()
Get all annotations
Specified by:
get in interface AnnotationSet

get

public AnnotationSet get(String type)
Select annotations by type
Specified by:
get in interface AnnotationSet

get

public AnnotationSet get(Set types)
                  throws ClassCastException
Select annotations by a set of types. Expects a Set of String.
Specified by:
get in interface AnnotationSet

get

public AnnotationSet get(String type,
                         FeatureMap constraints)
Select annotations by type and features
Specified by:
get in interface AnnotationSet

get

public AnnotationSet get(String type,
                         Set featureNames)
Select annotations by type and feature names
Specified by:
get in interface AnnotationSet

get

public AnnotationSet get(Long offset)
Select annotations by offset. This returns the set of annotations whose start node is the least such that it is less than or equal to offset. If a positional index doesn't exist it is created. If there are no nodes at or beyond the offset param then it will return null.
Specified by:
get in interface AnnotationSet

get

public AnnotationSet get(Long startOffset,
                         Long endOffset)
Select annotations by offset. This returns the set of annotations that overlap totaly or partially with the interval defined by the two provided offsets.The result will include all the annotations that either:

get

public AnnotationSet get(String neededType,
                         Long startOffset,
                         Long endOffset)
Select annotations by offset. This returns the set of annotations of the given type that overlap totaly or partially with the interval defined by the two provided offsets.The result will include all the annotations that either:

get

public AnnotationSet get(String type,
                         FeatureMap constraints,
                         Long offset)
Select annotations by type, features and offset
Specified by:
get in interface AnnotationSet

getContained

public AnnotationSet getContained(Long startOffset,
                                  Long endOffset)
Select annotations by offset that start at a position between the start and end before the end offset
Specified by:
getContained in interface AnnotationSet

firstNode

public Node firstNode()
Get the node with the smallest offset
Specified by:
firstNode in interface AnnotationSet

lastNode

public Node lastNode()
Get the node with the largest offset
Specified by:
lastNode in interface AnnotationSet

nextNode

public Node nextNode(Node node)
Get the first node that is relevant for this annotation set and which has the offset larger than the one of the node provided.
Specified by:
nextNode in interface AnnotationSet

add

public Integer add(Node start,
                   Node end,
                   String type,
                   FeatureMap features)
Create and add an annotation with pre-existing nodes, and return its id
Specified by:
add in interface AnnotationSet

add

public boolean add(Object o)
            throws ClassCastException
Add an existing annotation. Returns true when the set is modified.
Specified by:
add in interface AnnotationSet
Overrides:
add in class AbstractCollection

add

public Integer add(Long start,
                   Long end,
                   String type,
                   FeatureMap features)
            throws InvalidOffsetException
Create and add an annotation and return its id
Specified by:
add in interface AnnotationSet

add

public void add(Integer id,
                Long start,
                Long end,
                String type,
                FeatureMap features)
         throws InvalidOffsetException
Create and add an annotation from database read data In this case the id is already known being previously fetched from the database
Specified by:
add in interface AnnotationSet

indexByType

protected void indexByType()
Construct the positional index.

indexByStartOffset

protected void indexByStartOffset()
Construct the positional indices for annotation start

indexByEndOffset

protected void indexByEndOffset()
Construct the positional indices for annotation end

addToTypeIndex

void addToTypeIndex(Annotation a)
Add an annotation to the type index. Does nothing if the index doesn't exist.

addToOffsetIndex

void addToOffsetIndex(Annotation a)
Add an annotation to the offset indices. Does nothing if they don't exist.

addToStartOffsetIndex

void addToStartOffsetIndex(Annotation a)
Add an annotation to the start offset index. Does nothing if the index doesn't exist.

addToEndOffsetIndex

void addToEndOffsetIndex(Annotation a)
Add an annotation to the end offset index. Does nothing if the index doesn't exist.

edit

public void edit(Long start,
                 Long end,
                 DocumentContent replacement)
Propagate changes to the document content. Has, unfortunately, to be public, to allow DocumentImpls to get at it. Oh for a "friend" declaration. Doesn't thow InvalidOffsetException as DocumentImpl is the only client, and that checks the offsets before calling this method.

getName

public String getName()
Get the name of this set.
Specified by:
getName in interface AnnotationSet

getDocument

public Document getDocument()
Get the document this set is attached to.
Specified by:
getDocument in interface AnnotationSet

getAllTypes

public Set getAllTypes()
Get a set of java.lang.String objects representing all the annotation types present in this annotation set.
Specified by:
getAllTypes in interface AnnotationSet

clone

public Object clone()
             throws CloneNotSupportedException
Overrides:
clone in class Object
Returns:
 
Throws:
CloneNotSupportedException -  

removeAnnotationSetListener

public void removeAnnotationSetListener(AnnotationSetListener l)
Specified by:
removeAnnotationSetListener in interface AnnotationSet
Parameters:
l -  

addAnnotationSetListener

public void addAnnotationSetListener(AnnotationSetListener l)
Specified by:
addAnnotationSetListener in interface AnnotationSet
Parameters:
l -  

equals

public boolean equals(Object other)
Two AnnotationSet are equal if their name, the documents of which belong to the AnnotationSets and annotations from the sets are the same
Specified by:
equals in interface Set
Overrides:
equals in class AbstractSet

hashCode

public int hashCode()
Specified by:
hashCode in interface Set
Overrides:
hashCode in class AbstractSet
Returns:
 

fireAnnotationAdded

protected void fireAnnotationAdded(AnnotationSetEvent e)
Parameters:
e -  

fireAnnotationRemoved

protected void fireAnnotationRemoved(AnnotationSetEvent e)
Parameters:
e -  

removeGateListener

public void removeGateListener(GateListener l)
Specified by:
removeGateListener in interface AnnotationSet
Parameters:
l -  

addGateListener

public void addGateListener(GateListener l)
Specified by:
addGateListener in interface AnnotationSet
Parameters:
l -  

fireGateEvent

protected void fireGateEvent(GateEvent e)
Parameters:
e -