groovy.beans
[Java] Annotation Type Vetoable
java.lang.Object
groovy.beans.Vetoable
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.FIELD, ElementType.TYPE})
@GroovyASTTransformationClass("groovy.beans.VetoableASTTransformation")
public @interface Vetoable
Annotates a groovy property or a class.
When annotating a property it indicates that the property should be a
constrained property according to the JavaBeans spec, subject to
listeners vetoing the property change.
When annotating a class it indicates that all groovy properties in that
class should be bound as though each property had the annotation (even
if it already has it explicitly).
It is a compilation error to place this annotation on a field (that is
not a property, i.e. has scope visibility modifiers).
If a property with a user defined setter method is annotated the code
block is wrapped with the needed code to fire off the event.
Here is a simple example of how to annotate a class with Vetoable:
@groovy.beans.Vetoable
class Person {
String firstName
def zipCode
}
This code is transformed by the compiler into something resembling the following
snippet. Notice the difference between a String and a def/Object property:
public class Person implements groovy.lang.GroovyObject {
private java.lang.String firstName
private java.lang.Object zipCode
final private java.beans.VetoableChangeSupport this$vetoableChangeSupport
public Person() {
this$vetoableChangeSupport = new java.beans.VetoableChangeSupport(this)
}
public void addVetoableChangeListener(java.beans.VetoableChangeListener listener) {
this$vetoableChangeSupport.addVetoableChangeListener(listener)
}
public void addVetoableChangeListener(java.lang.String name, java.beans.VetoableChangeListener listener) {
this$vetoableChangeSupport.addVetoableChangeListener(name, listener)
}
public void removeVetoableChangeListener(java.beans.VetoableChangeListener listener) {
this$vetoableChangeSupport.removeVetoableChangeListener(listener)
}
public void removeVetoableChangeListener(java.lang.String name, java.beans.VetoableChangeListener listener) {
this$vetoableChangeSupport.removeVetoableChangeListener(name, listener)
}
public void fireVetoableChange(java.lang.String name, java.lang.Object oldValue, java.lang.Object newValue) throws java.beans.PropertyVetoException {
this$vetoableChangeSupport.fireVetoableChange(name, oldValue, newValue)
}
public java.beans.VetoableChangeListener[] getVetoableChangeListeners() {
return this$vetoableChangeSupport.getVetoableChangeListeners()
}
public java.beans.VetoableChangeListener[] getVetoableChangeListeners(java.lang.String name) {
return this$vetoableChangeSupport.getVetoableChangeListeners(name)
}
public void setFirstName(java.lang.String value) throws java.beans.PropertyVetoException {
this.fireVetoableChange('firstName', firstName, value)
firstName = value
}
public void setZipCode(java.lang.Object value) throws java.beans.PropertyVetoException {
this.fireVetoableChange('zipCode', zipCode, value)
zipCode = value
}
}
- Authors:
- Danno Ferrin (shemnon)
- See Also:
- VetoableASTTransformation
Methods inherited from class java.lang.Object
|
java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll() |
Groovy Documentation