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

Nested Class Summary
 class AnnotationSetImpl.VerboseHashMap
          Class used for the indexById structure.
 
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)
           
 Object clone()
           
 void edit(Long start, Long end, DocumentContent replacement)
          Propagate changes to the document content.
 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.
 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)
           
 void removeGateListener(GateListener l)
           
 int size()
          The size of this set
 
Methods inherited from class java.util.AbstractSet
equals, hashCode, removeAll
 
Methods inherited from class java.util.AbstractCollection
addAll, clear, contains, containsAll, isEmpty, retainAll, toArray, toArray, toString
 
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.util.Set
addAll, clear, contains, containsAll, equals, hashCode, isEmpty, removeAll, retainAll, toArray, toArray
 

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
Specified by:
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
ClassCastException

size

public int size()
The size of this set

Specified by:
size in interface AnnotationSet
Specified by:
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
ClassCastException

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
ClassCastException

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
InvalidOffsetException

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
InvalidOffsetException

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 -

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 -