Class OverlayAnnotation
- All Implemented Interfaces:
Serializable,Annotation,Changeable
getProperty is called, we first check
for a value stored in the overlay. If this fails, the
underlying Annotation is checked. Values
passed to setProperty are always stored
within the overlay.- Since:
- 1.1 In the case where you wish to wrap an underlying Annotation in a view that will allow it to be edited without altering the original object, but also reflect changes in the original object.
- Author:
- Thomas Down, Matthew Pocock, Greg Cox
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classForwards change events from the underlying Annotation to this one. -
Field Summary
Fields inherited from interface org.biojava.bio.Annotation
EMPTY_ANNOTATION, PROPERTY -
Constructor Summary
ConstructorsConstructorDescriptionConstruct an annotation which can overlay new key-value pairs onto an underlying annotation. -
Method Summary
Modifier and TypeMethodDescriptionasMap()Return aMapview onto this annotation.booleancontainsProperty(Object key) Returns whether there the property is defined.protected ChangeSupportgetChangeSupport(ChangeType changeType) Called to retrieve the ChangeSupport for this object.protected MapGet the map used for the overlay.getProperty(Object key) Retrieve the value of a property by key.keys()Return aSetcontaining all key objects visible in this annotation.voidremoveProperty(Object key) Delete a property.voidsetProperty(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, removeChangeListenerMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.biojava.utils.Changeable
addChangeListener, addChangeListener, isUnchanging, removeChangeListener, removeChangeListener
-
Constructor Details
-
OverlayAnnotation
Construct an annotation which can overlay new key-value pairs onto an underlying annotation.- Parameters:
par- The `parent' annotation, on which new key-value pairs can be layered.
-
-
Method Details
-
getChangeSupport
Description copied from class:AbstractChangeableCalled 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:
getChangeSupportin classAbstractChangeable
-
getOverlay
Get the map used for the overlay. Modifying this modifies the Annotation.- Returns:
- the overlay Map
-
setProperty
Description copied from interface:AnnotationSet 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:
setPropertyin 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
Description copied from interface:AnnotationDelete a property. Normal raw access to the property. For cleverer access, use methods in AnnotationType.- Specified by:
removePropertyin interfaceAnnotation- Parameters:
key- the key object- Throws:
ChangeVetoException- if the change is vetoed
-
getProperty
Description copied from interface:AnnotationRetrieve 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:
getPropertyin interfaceAnnotation- Parameters:
key- the key of the property to retrieve- Returns:
- the object associated with that key
-
containsProperty
Description copied from interface:AnnotationReturns whether there the property is defined. Normal raw access to the property. For cleverer access, use methods in AnnotationType.- Specified by:
containsPropertyin interfaceAnnotation- Parameters:
key- the key Object to search for- Returns:
- true if this Annotation knows about the key, false otherwise
-
keys
Return aSetcontaining all key objects visible in this annotation. TheSetis unmodifiable, but will dynamically reflect changes made to the annotation.- Specified by:
keysin interfaceAnnotation- Returns:
- the keys as a Set
-
asMap
Return aMapview onto this annotation. The returnedMapis unmodifiable, but will dynamically reflect any changes made to this annotation.- Specified by:
asMapin interfaceAnnotation- Returns:
- a view of this Annotation as an immutable Map
-