## 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
`<clinit>, 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:
  - start before the start offset and end strictly after it
  - OR
  - start at a position between the start and the end offsets
  Specified by:
    `get` in interface `AnnotationSet`

### 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:
  - start before the start offset and end strictly after it
  - OR
  - start at a position between the start and the end offsets
  Specified by:
    `get` in interface `AnnotationSet`

### 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` -