Class MergeAnnotation
- java.lang.Object
-
- org.biojava.utils.AbstractChangeable
-
- org.biojava.bio.MergeAnnotation
-
- All Implemented Interfaces:
Serializable
,Annotation
,Changeable
public class MergeAnnotation extends AbstractChangeable implements Annotation, Serializable
Merged view onto a list of underlying Annotation objects. Currently immutable (but reflects changes to underlying objects). Annotations near the beginning of the list will have properties that take precedence. It is possible to get the ordering of the annotations, or to change it by removing and re-adding methods. This Annotation implementation is immutable.- Since:
- 1.2 Use these when you have a list of Annotation instances that need to be viewed as one. For example, if you have annotation for a feature from a local database, in-memory objects and a web-page, you could build three Annotation instances and merge them using a MergeAnnotation.
- Author:
- Thomas Down, Matthew Pocock, Greg Cox, Francois Pepin
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
MergeAnnotation.PropertyForwarder
Listener used to forward changes for any of the underlying annotations to listeners on this annotation.
-
Field Summary
Fields Modifier and Type Field Description static ChangeType
ANNOTATION_ADD
ChangeType of ChangeEvent fired before and after an annotation is added to MergeAnnotation.static ChangeType
ANNOTATION_CHANGED
ChangeType of ChangeEvent fired before and after an annotation is added to MergeAnnotation.static ChangeType
ANNOTATION_REMOVE
ChangeType of ChangeEvent fired before and after an annotation is added to MergeAnnotation.-
Fields inherited from interface org.biojava.bio.Annotation
EMPTY_ANNOTATION, PROPERTY
-
-
Constructor Summary
Constructors Constructor Description MergeAnnotation()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addAnnotation(Annotation ann)
Add a new Annotation to to the end of the list to be merged.Map
asMap()
Return a map that contains the same key/values as this Annotation.boolean
containsProperty(Object key)
Returns whether there the property is defined.List
getAnnotations()
Gets an unmodifiable view of the list of Annotations that are part of the MergeAnnotation.protected ChangeSupport
getChangeSupport(ChangeType changeType)
Called to retrieve the ChangeSupport for this object.Object
getProperty(Object key)
Retrieve the value of a property by key.Set
keys()
Get a set of key objects.void
removeAnnotation(Annotation ann)
Remove an Annotation from the list.void
removeProperty(Object key)
Delete a property.void
setProperty(Object key, Object value)
Set the value of a property.-
Methods inherited from class org.biojava.utils.AbstractChangeable
addChangeListener, addChangeListener, generateChangeSupport, hasListeners, hasListeners, isUnchanging, removeChangeListener, removeChangeListener
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.biojava.utils.Changeable
addChangeListener, addChangeListener, isUnchanging, removeChangeListener, removeChangeListener
-
-
-
-
Field Detail
-
ANNOTATION_CHANGED
public static final ChangeType ANNOTATION_CHANGED
ChangeType of ChangeEvent fired before and after an annotation is added to MergeAnnotation.
-
ANNOTATION_ADD
public static final ChangeType ANNOTATION_ADD
ChangeType of ChangeEvent fired before and after an annotation is added to MergeAnnotation.
-
ANNOTATION_REMOVE
public static final ChangeType ANNOTATION_REMOVE
ChangeType of ChangeEvent fired before and after an annotation is added to MergeAnnotation.
-
-
Constructor Detail
-
MergeAnnotation
public MergeAnnotation()
-
-
Method Detail
-
addAnnotation
public void addAnnotation(Annotation ann) throws ChangeVetoException
Add a new Annotation to to the end of the list to be merged. Use this to alter the Annotations being merged- Parameters:
ann
- the Annotation to add- Throws:
ChangeVetoException
- if the annotation could not be added
-
getAnnotations
public List getAnnotations()
Gets an unmodifiable view of the list of Annotations that are part of the MergeAnnotation. Lower indices Annotation have precedence if 2 Annotations share the same property.- Returns:
- an unmodifiable
List
of the Annotations that form this MergeAnnotation.
-
removeAnnotation
public void removeAnnotation(Annotation ann) throws ChangeVetoException
Remove an Annotation from the list. This can be used to change the ordering of the Annotations by re-adding it later.- Parameters:
ann
- anAnnotation
to be removed.- Throws:
ChangeVetoException
- if an error occurs
-
getChangeSupport
protected ChangeSupport getChangeSupport(ChangeType changeType)
Description copied from class:AbstractChangeable
Called to retrieve the ChangeSupport for this object.Your implementation of this method should have the following structure:
It is usual for the forwarding listeners (someForwarder in this example) to be transient and lazily instantiated. Be sure to register & unregister the forwarder in the code that does the ChangeEvent handling in setter methods.ChangeSupport cs = super.getChangeSupport(ct); if(someForwarder == null && ct.isMatching(SomeInterface.SomeChangeType)) { someForwarder = new ChangeForwarder(... this.stateVariable.addChangeListener(someForwarder, VariableInterface.AChange); } return cs;
- Overrides:
getChangeSupport
in classAbstractChangeable
-
setProperty
public void setProperty(Object key, Object value) throws ChangeVetoException
Description copied from interface:Annotation
Set the value of a property.
This method throws an exception if either properties can not be added to this object, or that this particular property is immutable or illegal within the implementation.
Normal raw access to the property. For cleverer access, use methods in AnnotationType.- Specified by:
setProperty
in interfaceAnnotation
- Parameters:
key
- the key objectvalue
- the new value for this key- Throws:
ChangeVetoException
- if this annotation object can't be changed, or if the change was vetoed.
-
removeProperty
public void removeProperty(Object key) throws ChangeVetoException
Description copied from interface:Annotation
Delete a property. Normal raw access to the property. For cleverer access, use methods in AnnotationType.- Specified by:
removeProperty
in interfaceAnnotation
- Parameters:
key
- the key object- Throws:
ChangeVetoException
- if the change is vetoed
-
getProperty
public Object getProperty(Object key)
Description copied from interface:Annotation
Retrieve the value of a property by key.
Unlike the Map collections, it will complain if the key does not exist. It will only return null if the key is defined and has value null.
Normal raw access to the property. For cleverer access, use methods in AnnotationType.- Specified by:
getProperty
in interfaceAnnotation
- Parameters:
key
- the key of the property to retrieve- Returns:
- the object associated with that key
-
containsProperty
public boolean containsProperty(Object key)
Description copied from interface:Annotation
Returns whether there the property is defined. Normal raw access to the property. For cleverer access, use methods in AnnotationType.- Specified by:
containsProperty
in interfaceAnnotation
- Parameters:
key
- the key Object to search for- Returns:
- true if this Annotation knows about the key, false otherwise
-
keys
public Set keys()
Description copied from interface:Annotation
Get a set of key objects.- Specified by:
keys
in interfaceAnnotation
- Returns:
- a Set of key objects
-
asMap
public Map asMap()
Description copied from interface:Annotation
Return a map that contains the same key/values as this Annotation.If the annotation changes, the map may not reflect this. The Map may be unmodifiable.
- Specified by:
asMap
in interfaceAnnotation
- Returns:
- a Map
-
-