]> source.dussan.org Git - vaadin-framework.git/commitdiff
Add javadoc for @DelegateToWidget (#10980)
authorLeif Åstrand <leif@vaadin.com>
Tue, 4 Mar 2014 07:29:26 +0000 (09:29 +0200)
committerVaadin Code Review <review@vaadin.com>
Tue, 4 Mar 2014 08:26:31 +0000 (08:26 +0000)
Change-Id: I15e731058b615ef478cbe27b465ffdb72f0609b1

shared/src/com/vaadin/shared/annotations/DelegateToWidget.java

index ba661e3f3260803926c7dc56acf536d086adda8d..9109162a31b55a7efbde48e373f9e1f8f8597c39 100644 (file)
@@ -19,11 +19,70 @@ import java.io.Serializable;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Target;
 
+/**
+ * Signals that the property value from a state class should be forwarded to the
+ * Widget of the corresponding connector instance.
+ * <p>
+ * When this annotation is present on a field or on a setter method, the
+ * framework will call the corresponding setter in the Connector's Widget
+ * instance with the current state property value whenever it has been changed.
+ * This is happens after firing
+ * {@link com.vaadin.client.ConnectorHierarchyChangeEvent}s but before firing
+ * any {@link com.vaadin.client.communication.StateChangeEvent}.
+ * <p>
+ * Take for example a state class looking like this:
+ * 
+ * <pre>
+ * public class MyComponentState extends AbstractComponentState {
+ *     &#064;DelegateToWidget
+ *     public String myProperty;
+ * }
+ * </pre>
+ * 
+ * Whenever <code>myProperty</code> is changed, the framework will call code
+ * like this:
+ * 
+ * <pre>
+ * connector.getWidget().setMyProperty(connector.getState().myProperty);
+ * </pre>
+ * 
+ * <p>
+ * By default, the Widget method to call is derived from the property name, but
+ * {@link #value()} in the annotation can be used to provide a custom method
+ * name, e.g. {@code @DelegateToWidget("someSpecialName")}.
+ * 
+ * @since 7.0.0
+ * @author Vaadin Ltd
+ */
 @Target({ ElementType.METHOD, ElementType.FIELD })
 public @interface DelegateToWidget {
+    /**
+     * Defines the name of the Widget method to call when the annotated state
+     * property has changed. If no value is defined, the method name will be
+     * derived from the property name, so e.g. a field named
+     * <code>myProperty</code> will delegate to a method named
+     * <code>setMyProperty</code>.
+     * 
+     * @return the name of the method to delegate to, or empty string to use the
+     *         default name
+     */
     public String value() default "";
 
+    /**
+     * Internal helper for handling default values in a uniform way both at
+     * runtime and during widgetset compilation.
+     */
     public static class Helper implements Serializable {
+        /**
+         * Gets the name of the method to delegate to for a given property name
+         * and annotation value.
+         * 
+         * @param propertyName
+         *            the name of the delegated property
+         * @param annotationValue
+         *            the {@link DelegateToWidget#value()} of the annotation
+         * @return the name of the method to delegate to
+         */
         public static String getDelegateTarget(String propertyName,
                 String annotationValue) {
             String name = annotationValue;