All Downloads are FREE. Search and download functionalities are using the official Maven repository.

groovy.beans.Vetoable Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2008 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package groovy.beans;

import org.codehaus.groovy.transform.GroovyASTTransformationClass;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 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 
 *     }
 * }
 * 
* @see VetoableASTTransformation * * @author Danno Ferrin (shemnon) */ @java.lang.annotation.Documented @Retention(RetentionPolicy.SOURCE) @Target({ElementType.FIELD, ElementType.TYPE}) @GroovyASTTransformationClass("groovy.beans.VetoableASTTransformation") public @interface Vetoable { }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy