]> source.dussan.org Git - vaadin-framework.git/commitdiff
Replace @ClientWidget with client-side @Component (#8440)
authorHenri Sara <hesara@vaadin.com>
Wed, 4 Apr 2012 12:04:23 +0000 (15:04 +0300)
committerHenri Sara <hesara@vaadin.com>
Wed, 4 Apr 2012 12:04:23 +0000 (15:04 +0300)
110 files changed:
src/com/vaadin/event/dd/acceptcriteria/ClientCriterion.java
src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java
src/com/vaadin/terminal/gwt/client/ApplicationConnection.java
src/com/vaadin/terminal/gwt/client/VUIDLBrowser.java
src/com/vaadin/terminal/gwt/client/WidgetMap.java
src/com/vaadin/terminal/gwt/client/WidgetSet.java
src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/AccordionConnector.java
src/com/vaadin/terminal/gwt/client/ui/AudioConnector.java
src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java
src/com/vaadin/terminal/gwt/client/ui/CheckBoxConnector.java
src/com/vaadin/terminal/gwt/client/ui/ComboBoxConnector.java
src/com/vaadin/terminal/gwt/client/ui/Component.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/CustomComponentConnector.java
src/com/vaadin/terminal/gwt/client/ui/CustomFieldConnector.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ui/CustomLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/DragAndDropWrapperConnector.java
src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java
src/com/vaadin/terminal/gwt/client/ui/FormConnector.java
src/com/vaadin/terminal/gwt/client/ui/FormLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/HorizontalLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/HorizontalSplitPanelConnector.java
src/com/vaadin/terminal/gwt/client/ui/InlineDateFieldConnector.java
src/com/vaadin/terminal/gwt/client/ui/LinkConnector.java
src/com/vaadin/terminal/gwt/client/ui/ListSelectConnector.java
src/com/vaadin/terminal/gwt/client/ui/MenuBarConnector.java
src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java
src/com/vaadin/terminal/gwt/client/ui/NativeSelectConnector.java
src/com/vaadin/terminal/gwt/client/ui/OptionGroupConnector.java
src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java
src/com/vaadin/terminal/gwt/client/ui/PasswordFieldConnector.java
src/com/vaadin/terminal/gwt/client/ui/PopupDateFieldConnector.java
src/com/vaadin/terminal/gwt/client/ui/PopupViewConnector.java
src/com/vaadin/terminal/gwt/client/ui/ProgressIndicatorConnector.java
src/com/vaadin/terminal/gwt/client/ui/RootConnector.java
src/com/vaadin/terminal/gwt/client/ui/SliderConnector.java
src/com/vaadin/terminal/gwt/client/ui/TableConnector.java
src/com/vaadin/terminal/gwt/client/ui/TabsheetConnector.java
src/com/vaadin/terminal/gwt/client/ui/TextAreaConnector.java
src/com/vaadin/terminal/gwt/client/ui/TextFieldConnector.java
src/com/vaadin/terminal/gwt/client/ui/TreeConnector.java
src/com/vaadin/terminal/gwt/client/ui/TreeTableConnector.java
src/com/vaadin/terminal/gwt/client/ui/TwinColSelectConnector.java
src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java
src/com/vaadin/terminal/gwt/client/ui/UploadConnector.java
src/com/vaadin/terminal/gwt/client/ui/VerticalLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/VerticalSplitPanelConnector.java
src/com/vaadin/terminal/gwt/client/ui/VideoConnector.java
src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java
src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java
src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java
src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java
src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java
src/com/vaadin/terminal/gwt/widgetsetutils/CustomWidgetMapGenerator.java
src/com/vaadin/terminal/gwt/widgetsetutils/EagerWidgetMapGenerator.java
src/com/vaadin/terminal/gwt/widgetsetutils/LazyWidgetMapGenerator.java
src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java
src/com/vaadin/ui/AbsoluteLayout.java
src/com/vaadin/ui/Accordion.java
src/com/vaadin/ui/Audio.java
src/com/vaadin/ui/Button.java
src/com/vaadin/ui/CheckBox.java
src/com/vaadin/ui/ClientWidget.java [deleted file]
src/com/vaadin/ui/ComboBox.java
src/com/vaadin/ui/CssLayout.java
src/com/vaadin/ui/CustomComponent.java
src/com/vaadin/ui/CustomField.java
src/com/vaadin/ui/CustomLayout.java
src/com/vaadin/ui/DateField.java
src/com/vaadin/ui/DragAndDropWrapper.java
src/com/vaadin/ui/Embedded.java
src/com/vaadin/ui/Form.java
src/com/vaadin/ui/FormLayout.java
src/com/vaadin/ui/GridLayout.java
src/com/vaadin/ui/HorizontalLayout.java
src/com/vaadin/ui/HorizontalSplitPanel.java
src/com/vaadin/ui/InlineDateField.java
src/com/vaadin/ui/Label.java
src/com/vaadin/ui/Link.java
src/com/vaadin/ui/ListSelect.java
src/com/vaadin/ui/MenuBar.java
src/com/vaadin/ui/NativeButton.java
src/com/vaadin/ui/NativeSelect.java
src/com/vaadin/ui/OptionGroup.java
src/com/vaadin/ui/Panel.java
src/com/vaadin/ui/PasswordField.java
src/com/vaadin/ui/PopupView.java
src/com/vaadin/ui/ProgressIndicator.java
src/com/vaadin/ui/RichTextArea.java
src/com/vaadin/ui/Root.java
src/com/vaadin/ui/Select.java
src/com/vaadin/ui/Slider.java
src/com/vaadin/ui/TabSheet.java
src/com/vaadin/ui/Table.java
src/com/vaadin/ui/TextArea.java
src/com/vaadin/ui/TextField.java
src/com/vaadin/ui/Tree.java
src/com/vaadin/ui/TreeTable.java
src/com/vaadin/ui/TwinColSelect.java
src/com/vaadin/ui/Upload.java
src/com/vaadin/ui/VerticalLayout.java
src/com/vaadin/ui/VerticalSplitPanel.java
src/com/vaadin/ui/Video.java
src/com/vaadin/ui/Window.java
tests/testbench/com/vaadin/tests/dd/CustomDDImplementation.java
tests/testbench/com/vaadin/tests/dd/MyDragSourceConnector.java
tests/testbench/com/vaadin/tests/dd/MyDropTargetConnector.java

index 920112360e58ed6a1c88d7195a2dadd3e066b33b..8b64106be7dcc76251f2ae29aaae8db5f4d874db 100644 (file)
@@ -9,13 +9,10 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 import com.vaadin.terminal.gwt.client.ui.dd.VAcceptCriterion;
-import com.vaadin.ui.ClientWidget;
 
 /**
  * An annotation type used to point the client side counterpart for server side
- * a {@link AcceptCriterion} class. Usage is pretty similar to
- * {@link ClientWidget} which is used with Vaadin components that have a
- * specialized client side counterpart.
+ * a {@link AcceptCriterion} class.
  * <p>
  * Annotations are used at GWT compilation phase, so remember to rebuild your
  * widgetset if you do changes for {@link ClientCriterion} mappings.
index e166abc6880568897585202c3a968c91155eb876..fabaeddc78db4e695b4572514101cb9bda9f9f15 100644 (file)
@@ -7,6 +7,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import com.google.gwt.core.client.EntryPoint;
 import com.google.gwt.core.client.GWT;
@@ -206,12 +207,10 @@ public class ApplicationConfiguration implements EntryPoint {
     private boolean usePortletURLs = false;
     private String portletUidlURLBase;
 
-    private HashMap<String, String> unknownComponents;
+    private HashMap<Integer, String> unknownComponents;
 
     private Class<? extends ComponentConnector>[] classes = new Class[1024];
 
-    private String windowId;
-
     private boolean browserDetailsSent = false;
 
     static// TODO consider to make this hashmap per application
@@ -221,6 +220,9 @@ public class ApplicationConfiguration implements EntryPoint {
 
     private static ArrayList<ApplicationConnection> runningApplications = new ArrayList<ApplicationConnection>();
 
+    private Map<Integer, Integer> componentInheritanceMap = new HashMap<Integer, Integer>();
+    private Map<Integer, String> tagToServerSideClassName = new HashMap<Integer, String>();
+
     public boolean usePortletURLs() {
         return usePortletURLs;
     }
@@ -391,42 +393,54 @@ public class ApplicationConfiguration implements EntryPoint {
     }
 
     public Class<? extends ComponentConnector> getWidgetClassByEncodedTag(
-            String tag) {
+            int tag) {
         try {
-            int parseInt = Integer.parseInt(tag);
-            return classes[parseInt];
+            return classes[tag];
         } catch (Exception e) {
             // component was not present in mappings
             return UnknownComponentConnector.class;
         }
     }
 
+    public void addComponentInheritanceInfo(ValueMap valueMap) {
+        JsArrayString keyArray = valueMap.getKeyArray();
+        for (int i = 0; i < keyArray.length(); i++) {
+            String key = keyArray.get(i);
+            int value = valueMap.getInt(key);
+            componentInheritanceMap.put(Integer.parseInt(key), value);
+        }
+    }
+
     public void addComponentMappings(ValueMap valueMap, WidgetSet widgetSet) {
         JsArrayString keyArray = valueMap.getKeyArray();
         for (int i = 0; i < keyArray.length(); i++) {
             String key = keyArray.get(i).intern();
             int value = valueMap.getInt(key);
-            classes[value] = widgetSet.getImplementationByClassName(key);
+            tagToServerSideClassName.put(value, key);
+        }
+
+        for (int i = 0; i < keyArray.length(); i++) {
+            String key = keyArray.get(i).intern();
+            int value = valueMap.getInt(key);
+            classes[value] = widgetSet.getConnectorClassByTag(value, this);
             if (classes[value] == UnknownComponentConnector.class) {
                 if (unknownComponents == null) {
-                    unknownComponents = new HashMap<String, String>();
+                    unknownComponents = new HashMap<Integer, String>();
                 }
-                unknownComponents.put("" + value, key);
-            } else if (key == "com.vaadin.ui.Root") {
-                windowId = "" + value;
+                unknownComponents.put(value, key);
             }
         }
     }
 
-    /**
-     * @return the integer value that is used to code top level windows
-     *         "com.vaadin.ui.Window"
-     */
-    String getEncodedWindowTag() {
-        return windowId;
+    public Integer getParentTag(int tag) {
+        return componentInheritanceMap.get(tag);
+    }
+
+    public String getServerSideClassNameForTag(Integer tag) {
+        return tagToServerSideClassName.get(tag);
     }
 
-    String getUnknownServerClassNameByEncodedTagName(String tag) {
+    String getUnknownServerClassNameByTag(int tag) {
         if (unknownComponents != null) {
             return unknownComponents.get(tag);
         }
index 31a1bf295421b8a38378f67703f9e0f6f25fdd21..11b7820a11078e669baa7cee9bb22217a0c6c567 100644 (file)
@@ -957,6 +957,11 @@ public class ApplicationConnection {
             }
         }
 
+        if (json.containsKey("typeInheritanceMap")) {
+            configuration.addComponentInheritanceInfo(json
+                    .getValueMap("typeInheritanceMap"));
+        }
+
         if (json.containsKey("typeMappings")) {
             configuration.addComponentMappings(
                     json.getValueMap("typeMappings"), widgetSet);
@@ -1166,15 +1171,19 @@ public class ApplicationConnection {
                 for (int i = 0; i < keyArray.length(); i++) {
                     try {
                         String connectorId = keyArray.get(i);
-                        String connectorType = types.getString(connectorId);
+                        int connectorType = Integer.parseInt(types
+                                .getString((connectorId)));
                         ServerConnector connector = connectorMap
                                 .getConnector(connectorId);
                         if (connector != null) {
                             continue;
                         }
+
+                        Class<? extends ComponentConnector> connectorClass = configuration
+                                .getWidgetClassByEncodedTag(connectorType);
+
                         // Connector does not exist so we must create it
-                        if (!connectorType.equals(configuration
-                                .getEncodedWindowTag())) {
+                        if (connectorClass != RootConnector.class) {
                             // create, initialize and register the paintable
                             getConnector(connectorId, connectorType);
                         } else {
@@ -1902,7 +1911,7 @@ public class ApplicationConnection {
 
     @Deprecated
     public ComponentConnector getPaintable(UIDL uidl) {
-        return getConnector(uidl.getId(), uidl.getTag());
+        return getConnector(uidl.getId(), Integer.parseInt(uidl.getTag()));
     }
 
     /**
@@ -1921,8 +1930,7 @@ public class ApplicationConnection {
      * @return Either an existing ComponentConnector or a new ComponentConnector
      *         of the given type
      */
-    public ComponentConnector getConnector(String connectorId,
-            String connectorType) {
+    public ComponentConnector getConnector(String connectorId, int connectorType) {
         if (!connectorMap.hasConnector(connectorId)) {
             return createAndRegisterConnector(connectorId, connectorType);
         }
@@ -1943,7 +1951,7 @@ public class ApplicationConnection {
      * @return A new ComponentConnector of the given type
      */
     private ComponentConnector createAndRegisterConnector(String connectorId,
-            String connectorType) {
+            int connectorType) {
         // Create and register a new connector with the given type
         ComponentConnector p = widgetSet.createWidget(connectorType,
                 configuration);
index 3642d0ff2ecd92641bf22c72f0d49f248ac4d3c1..bd79e5f9c6b5f7f37892c0e8610b5cd2806cd5c8 100644 (file)
@@ -78,8 +78,7 @@ public class VUIDLBrowser extends SimpleTree {
             try {
                 String name = uidl.getTag();
                 try {
-                    Integer.parseInt(name);
-                    name = getNodeName(uidl, conf, name);
+                    name = getNodeName(uidl, conf, Integer.parseInt(name));
                 } catch (Exception e) {
                     // NOP
                 }
@@ -98,11 +97,11 @@ public class VUIDLBrowser extends SimpleTree {
         }
 
         private String getNodeName(UIDL uidl, ApplicationConfiguration conf,
-                String name) {
+                int tag) {
             Class<? extends ComponentConnector> widgetClassByDecodedTag = conf
-                    .getWidgetClassByEncodedTag(name);
+                    .getWidgetClassByEncodedTag(tag);
             if (widgetClassByDecodedTag == UnknownComponentConnector.class) {
-                return conf.getUnknownServerClassNameByEncodedTagName(name)
+                return conf.getUnknownServerClassNameByTag(tag)
                         + "(NO CLIENT IMPLEMENTATION FOUND)";
             } else {
                 return widgetClassByDecodedTag.getName();
@@ -144,8 +143,7 @@ public class VUIDLBrowser extends SimpleTree {
 
             String nodeName = uidl.getTag();
             try {
-                Integer.parseInt(nodeName);
-                nodeName = getNodeName(uidl, conf, nodeName);
+                nodeName = getNodeName(uidl, conf, Integer.parseInt(nodeName));
             } catch (Exception e) {
                 // NOP
             }
index 4fcadd6398c5c2a83910a42eb1dee104931cc349..af84a11ced7d6da92d9dfabf809fbbf5ac5b31b8 100644 (file)
@@ -5,24 +5,60 @@ package com.vaadin.terminal.gwt.client;
 
 import java.util.HashMap;
 
+import com.vaadin.terminal.gwt.widgetsetutils.WidgetMapGenerator;
+
+/**
+ * Abstract class mapping between {@link ComponentConnector} instances and their
+ * instances.
+ * 
+ * A concrete implementation of this class is generated by
+ * {@link WidgetMapGenerator} or one of its subclasses during widgetset
+ * compilation.
+ */
 abstract class WidgetMap {
 
     protected static HashMap<Class, WidgetInstantiator> instmap = new HashMap<Class, WidgetInstantiator>();
 
-    // FIXME: Should use Paintable and not VPaintableWidget
+    /**
+     * Create a new instance of a connector based on its type.
+     * 
+     * @param classType
+     *            {@link ComponentConnector} class to instantiate
+     * @return new instance of the connector
+     */
     public ComponentConnector instantiate(
             Class<? extends ComponentConnector> classType) {
         return instmap.get(classType).get();
     }
 
-    // FIXME: Should use Paintable and not VPaintableWidget
-    public abstract Class<? extends ComponentConnector> getImplementationByServerSideClassName(
+    /**
+     * Return the connector class to use for a fully qualified server side
+     * component class name.
+     * 
+     * @param fullyqualifiedName
+     *            fully qualified name of the server side component class
+     * @return component connector class to use
+     */
+    public abstract Class<? extends ComponentConnector> getConnectorClassForServerSideClassName(
             String fullyqualifiedName);
 
-    // FIXME: Should use Paintable and not VPaintableWidget
+    /**
+     * Return the connector classes to load after the initial widgetset load and
+     * start.
+     * 
+     * @return component connector class to load after the initial widgetset
+     *         loading
+     */
     public abstract Class<? extends ComponentConnector>[] getDeferredLoadedWidgets();
 
-    // FIXME: Should use Paintable and not VPaintableWidget
+    /**
+     * Make sure the code for a (deferred or lazy) component connector type has
+     * been loaded, triggering the load and waiting for its completion if
+     * necessary.
+     * 
+     * @param classType
+     *            component connector class
+     */
     public abstract void ensureInstantiator(
             Class<? extends ComponentConnector> classType);
 
index 656c92e28552fa63cd7fb1f21be9f43546b853ed..5aa4b2476428a46861082f323b63bbbef239523d 100644 (file)
@@ -30,7 +30,7 @@ public class WidgetSet {
      * @return New uninitialized and unregistered component that can paint given
      *         UIDL.
      */
-    public ComponentConnector createWidget(String tag,
+    public ComponentConnector createWidget(int tag,
             ApplicationConfiguration conf) {
         /*
          * Yes, this (including the generated code in WidgetMap) may look very
@@ -40,12 +40,12 @@ public class WidgetSet {
          * has no "native" counterpart on client side.
          */
 
-        Class<? extends ComponentConnector> classType = resolveWidgetType(tag,
-                conf);
+        Class<? extends ComponentConnector> classType = resolveInheritedWidgetType(
+                conf, tag);
 
         if (classType == null || classType == UnknownComponentConnector.class) {
             String serverSideName = conf
-                    .getUnknownServerClassNameByEncodedTagName(tag);
+                    .getUnknownServerClassNameByTag(tag);
             UnknownComponentConnector c = GWT
                     .create(UnknownComponentConnector.class);
             c.setServerSideClassName(serverSideName);
@@ -56,16 +56,25 @@ public class WidgetSet {
              */
             return widgetMap.instantiate(classType);
         }
+    }
 
+    private Class<? extends ComponentConnector> resolveInheritedWidgetType(
+            ApplicationConfiguration conf, int tag) {
+        Class<? extends ComponentConnector> classType = null;
+        Integer t = tag;
+        do {
+            classType = resolveWidgetType(t, conf);
+            t = conf.getParentTag(t);
+        } while (classType == null && t != null);
+        return classType;
     }
 
-    protected Class<? extends ComponentConnector> resolveWidgetType(String tag,
+    protected Class<? extends ComponentConnector> resolveWidgetType(int tag,
             ApplicationConfiguration conf) {
         Class<? extends ComponentConnector> widgetClass = conf
                 .getWidgetClassByEncodedTag(tag);
 
         return widgetClass;
-
     }
 
     /**
@@ -73,20 +82,22 @@ public class WidgetSet {
      * limitation, widgetset must have function that returns Class by its fully
      * qualified name.
      * 
-     * @param fullyQualifiedName
+     * @param tag
      * @param applicationConfiguration
      * @return
      */
-    public Class<? extends ComponentConnector> getImplementationByClassName(
-            String fullyqualifiedName) {
-        if (fullyqualifiedName == null) {
-            return UnknownComponentConnector.class;
-        }
-        Class<? extends ComponentConnector> implementationByServerSideClassName = widgetMap
-                .getImplementationByServerSideClassName(fullyqualifiedName);
-
-        return implementationByServerSideClassName;
-
+    public Class<? extends ComponentConnector> getConnectorClassByTag(int tag,
+            ApplicationConfiguration conf) {
+        Class<? extends ComponentConnector> connectorClass = null;
+        Integer t = tag;
+        do {
+            connectorClass = widgetMap
+                    .getConnectorClassForServerSideClassName(conf
+                            .getServerSideClassNameForTag(t));
+            t = conf.getParentTag(t);
+        } while (connectorClass == UnknownComponentConnector.class && t != null);
+
+        return connectorClass;
     }
 
     public Class<? extends ComponentConnector>[] getDeferredLoadedWidgets() {
index f0942066f21aca43c2f37dad6e58372c40926976..c600cf1500a27adbb28e8ebe99378d683f6ecdaf 100644 (file)
@@ -17,7 +17,9 @@ import com.vaadin.terminal.gwt.client.DirectionalManagedLayout;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 import com.vaadin.terminal.gwt.client.ui.VAbsoluteLayout.AbsoluteWrapper;
+import com.vaadin.ui.AbsoluteLayout;
 
+@Component(AbsoluteLayout.class)
 public class AbsoluteLayoutConnector extends
         AbstractComponentContainerConnector implements DirectionalManagedLayout {
 
index 7153d46e4dff18afc4d8699b0672110bacc4be7f..e54f078a9420fe06d2e1bdd09aada9abaae2d8db 100644 (file)
@@ -11,7 +11,9 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.ui.VAccordion.StackItem;
+import com.vaadin.ui.Accordion;
 
+@Component(Accordion.class)
 public class AccordionConnector extends TabsheetBaseConnector implements
         SimpleManagedLayout {
 
index fe1993a35d57d38687d0e9b863eba33da11c2ea1..c3c14449c0084b63c0c75a9fd41fac7a8337f677 100644 (file)
@@ -10,7 +10,9 @@ import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.BrowserInfo;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.Audio;
 
+@Component(Audio.class)
 public class AudioConnector extends MediaBaseConnector {
 
     @Override
index 55da944f9fd9ac59a0943f6ff375f125ddd5c811..1549aa873d1f3a34befc494ec1dfb79969e93e87 100644 (file)
@@ -13,7 +13,10 @@ import com.vaadin.terminal.gwt.client.EventHelper;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
+import com.vaadin.ui.Button;
 
+@Component(value = Button.class, loadStyle = LoadStyle.EAGER)
 public class ButtonConnector extends AbstractComponentConnector {
 
     /**
index 02f237f5c4b970717991a3412f2ca06d6a4ea5d5..fb80f539e989de3058e548739488f49fef7b08bf 100644 (file)
@@ -11,7 +11,9 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.EventHelper;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.VTooltip;
+import com.vaadin.ui.CheckBox;
 
+@Component(CheckBox.class)
 public class CheckBoxConnector extends AbstractFieldConnector {
 
     @Override
index 529046a307d2e626c38b88b75b547299b66fac69..6199ec98b58cb7cf2b1024d652ab5dfc8b702a1e 100644 (file)
@@ -11,7 +11,9 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.Util;
 import com.vaadin.terminal.gwt.client.ui.VFilterSelect.FilterSelectSuggestion;
+import com.vaadin.ui.Select;
 
+@Component(Select.class)
 public class ComboBoxConnector extends AbstractFieldConnector implements
         SimpleManagedLayout {
 
diff --git a/src/com/vaadin/terminal/gwt/client/ui/Component.java b/src/com/vaadin/terminal/gwt/client/ui/Component.java
new file mode 100644 (file)
index 0000000..b345c98
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.terminal.gwt.client.ui;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.vaadin.terminal.gwt.client.ComponentConnector;
+import com.vaadin.terminal.gwt.server.ClientConnector;
+import com.vaadin.terminal.gwt.widgetsetutils.CustomWidgetMapGenerator;
+import com.vaadin.terminal.gwt.widgetsetutils.EagerWidgetMapGenerator;
+import com.vaadin.terminal.gwt.widgetsetutils.LazyWidgetMapGenerator;
+import com.vaadin.terminal.gwt.widgetsetutils.WidgetMapGenerator;
+
+/**
+ * Annotation defining the default server side counterpart in GWT terminal for
+ * {@link ComponentConnector}.
+ * <p>
+ * With this annotation client side Vaadin connector is marked to have a server
+ * side counterpart. The value of the annotation is the class of server side
+ * implementation.
+ * 
+ * @since 7.0
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface Component {
+
+    /**
+     * @return the server side counterpart for the annotated component connector
+     */
+    Class<? extends ClientConnector> value();
+
+    /**
+     * Depending on the used WidgetMap generator, these optional hints may be
+     * used to define how the client side components are loaded by the browser.
+     * The default is to eagerly load all widgets
+     * {@link EagerWidgetMapGenerator}, but if the {@link WidgetMapGenerator} is
+     * used by the widgetset, these load style hints are respected.
+     * <p>
+     * Lazy loading of a widget implementation means the client side component
+     * is not included in the initial JavaScript application loaded when the
+     * application starts. Instead the implementation is loaded to the client
+     * when it is first needed. Lazy loaded widget can be achieved by giving
+     * {@link LoadStyle#LAZY} value in {@link Component} annotation.
+     * <p>
+     * Lazy loaded widgets don't stress the size and startup time of the client
+     * side as much as eagerly loaded widgets. On the other hand there is a
+     * slight latency when lazy loaded widgets are first used as the client side
+     * needs to visit the server to fetch the client side implementation.
+     * <p>
+     * The {@link LoadStyle#DEFERRED} will also not stress the initially loaded
+     * JavaScript file. If this load style is defined, the widget implementation
+     * is preemptively loaded to the browser after the application is started
+     * and the communication to server idles. This load style kind of combines
+     * the best of both worlds.
+     * <p>
+     * Fine tunings to widget loading can also be made by overriding
+     * {@link WidgetMapGenerator} in the GWT module. Tunings might be helpful if
+     * the end users have slow connections and especially if they have high
+     * latency in their network. The {@link CustomWidgetMapGenerator} is an
+     * abstract generator implementation for easy customization. Vaadin package
+     * also includes {@link LazyWidgetMapGenerator} that makes as many widgets
+     * lazily loaded as possible.
+     * 
+     * @since 6.4
+     * 
+     * @return the hint for the widget set generator how the client side
+     *         implementation should be loaded to the browser
+     */
+    LoadStyle loadStyle() default LoadStyle.DEFERRED;
+
+    public enum LoadStyle {
+        /**
+         * The widget is included in the initial JS sent to the client.
+         */
+        EAGER,
+        /**
+         * Not included in the initial set of widgets, but added to queue from
+         * which it will be loaded when network is not busy or the
+         * implementation is required.
+         */
+        DEFERRED,
+        /**
+         * Loaded to the client only if needed.
+         */
+        LAZY
+    }
+}
index 3b72f73a3b408501eabf09bf05e67e37006ab1e2..8bf14fdbdb51773d380d51cf674cb3a1d5034518 100644 (file)
@@ -10,7 +10,9 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
+import com.vaadin.ui.CssLayout;
 
+@Component(CssLayout.class)
 public class CssLayoutConnector extends AbstractComponentContainerConnector {
 
     private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler(
index 860ec97a5b9c9c85829239d8e313c721a9c835b3..5c7f2c64c34c58d10b3fa13fb05c812165a7a374 100644 (file)
@@ -7,7 +7,10 @@ import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangedEvent;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
+import com.vaadin.ui.CustomComponent;
 
+@Component(value = CustomComponent.class, loadStyle = LoadStyle.EAGER)
 public class CustomComponentConnector extends
         AbstractComponentContainerConnector {
 
diff --git a/src/com/vaadin/terminal/gwt/client/ui/CustomFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/CustomFieldConnector.java
new file mode 100644 (file)
index 0000000..477a4b4
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.terminal.gwt.client.ui;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.ui.CustomField;
+
+@Component(value = CustomField.class)
+public class CustomFieldConnector extends CustomComponentConnector {
+
+    @Override
+    protected Widget createWidget() {
+        return GWT.create(VCustomComponent.class);
+    }
+
+    @Override
+    public VCustomComponent getWidget() {
+        return super.getWidget();
+    }
+}
index 2941afe901bad272af9b3d12100b611028408640..089245b392a18cc03f29b1b0b1de58b9428d21ef 100644 (file)
@@ -13,7 +13,9 @@ import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.CustomLayout;
 
+@Component(CustomLayout.class)
 public class CustomLayoutConnector extends AbstractComponentContainerConnector
         implements SimpleManagedLayout {
 
index 4b44585caa6550e70ff5625fb975d22a7fc1f9e3..dcb2ed80230b8977bdf1358ad839eb145a150d7e 100644 (file)
@@ -10,7 +10,9 @@ import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.DragAndDropWrapper;
 
+@Component(DragAndDropWrapper.class)
 public class DragAndDropWrapperConnector extends CustomComponentConnector {
 
     @Override
index a9b02203298684756c9c347ced4a5b9344345f23..bd8a242c67c576bac128eb8e64063b1ca79cc680 100644 (file)
@@ -23,7 +23,9 @@ import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.VConsole;
 import com.vaadin.terminal.gwt.client.VTooltip;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
+import com.vaadin.ui.Embedded;
 
+@Component(Embedded.class)
 public class EmbeddedConnector extends AbstractComponentConnector {
 
     public interface EmbeddedServerRPC extends ClickRPC, ServerRpc {
index 01bd8ce007cadcfd598312bb68592199e76f50f9..5ed86fce6daf89cac9efae5b58719542462a0756 100644 (file)
@@ -14,7 +14,9 @@ import com.vaadin.terminal.gwt.client.ComponentState;
 import com.vaadin.terminal.gwt.client.ConnectorMap;
 import com.vaadin.terminal.gwt.client.LayoutManager;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.Form;
 
+@Component(Form.class)
 public class FormConnector extends AbstractComponentContainerConnector
         implements SimpleManagedLayout {
 
index 1c402309accda504fbd9c58ede0e4f32337df847..bd9feed29cc132485e38d5fc0cd5f1691fed48f2 100644 (file)
@@ -10,7 +10,9 @@ import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.ui.VFormLayout.Caption;
 import com.vaadin.terminal.gwt.client.ui.VFormLayout.ErrorFlag;
+import com.vaadin.ui.FormLayout;
 
+@Component(FormLayout.class)
 public class FormLayoutConnector extends AbstractComponentContainerConnector {
     @Override
     public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
index d6acc36ea7831782d3a840ca9bd3a1b6f8395688..06e61bf5e9c2d6eedbee7b27d40b469e77d1d53f 100644 (file)
@@ -18,7 +18,9 @@ import com.vaadin.terminal.gwt.client.VCaption;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 import com.vaadin.terminal.gwt.client.ui.VGridLayout.Cell;
 import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot;
+import com.vaadin.ui.GridLayout;
 
+@Component(GridLayout.class)
 public class GridLayoutConnector extends AbstractComponentContainerConnector
         implements DirectionalManagedLayout {
 
index fc370fcd2d70c6288ea563ed006a75a55a11ab14..da1ea99f28cd17cac979b7d18ea1656da9464902 100644 (file)
@@ -4,7 +4,10 @@
 package com.vaadin.terminal.gwt.client.ui;
 
 import com.google.gwt.core.client.GWT;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
+import com.vaadin.ui.HorizontalLayout;
 
+@Component(value = HorizontalLayout.class, loadStyle = LoadStyle.EAGER)
 public class HorizontalLayoutConnector extends AbstractOrderedLayoutConnector {
 
     @Override
index 17d264a707102df254abdf94ea1196646bd1af59..4f441b2d048b265878fd0b29c1780c27acbfc0e7 100644 (file)
@@ -4,7 +4,10 @@
 package com.vaadin.terminal.gwt.client.ui;
 
 import com.google.gwt.core.client.GWT;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
+import com.vaadin.ui.HorizontalSplitPanel;
 
+@Component(value = HorizontalSplitPanel.class, loadStyle = LoadStyle.EAGER)
 public class HorizontalSplitPanelConnector extends AbstractSplitPanelConnector {
 
     @Override
index d5de2c1b09f1f38c34192924ff06d20f9cbfb5ea..31ffe199d818e4427800c955a4a5347ec15b2b80 100644 (file)
@@ -12,7 +12,9 @@ import com.vaadin.terminal.gwt.client.DateTimeService;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.FocusChangeListener;
 import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.TimeChangeListener;
+import com.vaadin.ui.InlineDateField;
 
+@Component(InlineDateField.class)
 public class InlineDateFieldConnector extends AbstractDateFieldConnector {
 
     @Override
index cd41fab7aff0e5faef1c19b04531797d0902276f..c33676845ab668dc3aae4e02b35d830106c293c8 100644 (file)
@@ -9,7 +9,9 @@ import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.Link;
 
+@Component(Link.class)
 public class LinkConnector extends AbstractComponentConnector {
 
     @Override
index c470acbcf1a0e9293c59f16e60c4b22321a12102..ce9fb91f9a1eade4061bfa8ca43ec0e8d5f17940 100644 (file)
@@ -6,7 +6,9 @@ package com.vaadin.terminal.gwt.client.ui;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.ui.ListSelect;
 
+@Component(ListSelect.class)
 public class ListSelectConnector extends OptionGroupBaseConnector {
 
     @Override
index 3a2a7a7292d90cadefbd93424385bcd9aee35f9d..36cc454a038921b5d97fb3868bcd53363220fb9d 100644 (file)
@@ -12,8 +12,10 @@ import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.Util;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
 import com.vaadin.terminal.gwt.client.ui.VMenuBar.CustomMenuItem;
 
+@Component(value = com.vaadin.ui.MenuBar.class, loadStyle = LoadStyle.LAZY)
 public class MenuBarConnector extends AbstractComponentConnector implements
         SimpleManagedLayout {
     /**
index c26058fe9985d602f5c93767e7176ebacd364471..1790a42b214f6099eb8fd524f532ccdc0155ff5d 100644 (file)
@@ -11,7 +11,9 @@ import com.vaadin.terminal.gwt.client.ComponentState;
 import com.vaadin.terminal.gwt.client.EventHelper;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.ui.ButtonConnector.ButtonServerRpc;
+import com.vaadin.ui.NativeButton;
 
+@Component(NativeButton.class)
 public class NativeButtonConnector extends AbstractComponentConnector {
 
     @Override
index c425ccb93d020f77e0427cb125fb8d8c450d9136..0d85f3ed951b432f6e22e8a9d2353ac8e1bb253c 100644 (file)
@@ -6,7 +6,9 @@ package com.vaadin.terminal.gwt.client.ui;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.ui.NativeSelect;
 
+@Component(NativeSelect.class)
 public class NativeSelectConnector extends OptionGroupBaseConnector {
 
     @Override
index 76204bcb078ee6ec4865b7585be3296e26ca54d6..8c9811756f7c34a2a34185952d0b0ee2ca082013 100644 (file)
@@ -13,7 +13,9 @@ import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.EventId;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.OptionGroup;
 
+@Component(OptionGroup.class)
 public class OptionGroupConnector extends OptionGroupBaseConnector {
 
     @Override
index 03a76839e7bda08c3c25f75413d4ef2b69201db5..4dc4098c14f335cc49c8bb6b5e2f3548ed030c4a 100644 (file)
@@ -17,7 +17,9 @@ import com.vaadin.terminal.gwt.client.MouseEventDetails;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.Util;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
+import com.vaadin.ui.Panel;
 
+@Component(Panel.class)
 public class PanelConnector extends AbstractComponentContainerConnector
         implements SimpleManagedLayout, PostLayoutListener {
 
index 5086bdb416993696c2459f29c15b8f59bdc4b012..996e82f4059eba7459bbfd0f1e35d2ce50575c55 100644 (file)
@@ -8,7 +8,9 @@ import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.PasswordField;
 
+@Component(PasswordField.class)
 public class PasswordFieldConnector extends TextFieldConnector {
 
     @Override
index 0e4afde99ae16231c317dc94fb9671e80cfe0ddc..05cd0466a9e8adebcd0442457275ae9c42babe4e 100644 (file)
@@ -13,7 +13,9 @@ import com.vaadin.terminal.gwt.client.DateTimeService;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.FocusChangeListener;
 import com.vaadin.terminal.gwt.client.ui.VCalendarPanel.TimeChangeListener;
+import com.vaadin.ui.DateField;
 
+@Component(DateField.class)
 public class PopupDateFieldConnector extends TextualDateConnector {
 
     /*
index 746b22577c01928f5210412b0d87241f2af88832..d2162bdbccf70fa115187aaaace97b108f258f85 100644 (file)
@@ -10,7 +10,9 @@ import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.VCaption;
 import com.vaadin.terminal.gwt.client.VCaptionWrapper;
+import com.vaadin.ui.PopupView;
 
+@Component(PopupView.class)
 public class PopupViewConnector extends AbstractComponentContainerConnector
         implements PostLayoutListener {
 
index 21c6a06a3671c7e0012395a9f57ad8c623a1e50f..3c3a5ecbc2d8472c3311d6ebbb6bbee066c57a57 100644 (file)
@@ -9,7 +9,9 @@ import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.ProgressIndicator;
 
+@Component(ProgressIndicator.class)
 public class ProgressIndicatorConnector extends AbstractFieldConnector {
 
     @Override
index 3ddeec10b7ead46c0cffdf6a69f745755d894f25..7db14d73f01a956e6010ebcb72dc91237ab157fb 100644 (file)
@@ -32,7 +32,10 @@ import com.vaadin.terminal.gwt.client.VConsole;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
 import com.vaadin.terminal.gwt.client.communication.StateChangeEvent.StateChangeHandler;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
+import com.vaadin.ui.Root;
 
+@Component(value = Root.class, loadStyle = LoadStyle.EAGER)
 public class RootConnector extends AbstractComponentContainerConnector {
 
     public interface RootServerRPC extends ClickRPC, ServerRpc {
index 4e299c947fa4c09d4ef4c0f3269450cc59b30ca4..24832e04cea1982da820f55b3d2acf9155e19040 100644 (file)
@@ -9,7 +9,9 @@ import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.Slider;
 
+@Component(Slider.class)
 public class SliderConnector extends AbstractFieldConnector {
 
     @Override
index 370d4bc0018834143ebf2d6fc54e973b6253c54a..14231c35046ca2f568aa8836ae3c6721b5f53eb5 100644 (file)
@@ -21,6 +21,7 @@ import com.vaadin.terminal.gwt.client.Util;
 import com.vaadin.terminal.gwt.client.ui.VScrollTable.ContextMenuDetails;
 import com.vaadin.terminal.gwt.client.ui.VScrollTable.VScrollTableBody.VScrollTableRow;
 
+@Component(com.vaadin.ui.Table.class)
 public class TableConnector extends AbstractComponentContainerConnector
         implements DirectionalManagedLayout, PostLayoutListener {
 
index 180fb8ac3499cd5b90f6afc17c612eefd5f7869a..297bb0640032ad4a547fd9957a90dd80f165209b 100644 (file)
@@ -9,7 +9,9 @@ import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.TabSheet;
 
+@Component(TabSheet.class)
 public class TabsheetConnector extends TabsheetBaseConnector implements
         SimpleManagedLayout {
 
index d5dc6dea4ec594add18ade7070d65dc1684e58a8..30a02cd86dfc6193d2a28f5384bb1f4e5dbb0246 100644 (file)
@@ -9,7 +9,9 @@ import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.TextArea;
 
+@Component(TextArea.class)
 public class TextAreaConnector extends TextFieldConnector {
 
     @Override
index 274810d6dfe32031d1f7ee584c37edb9eacaf3ea..ed46403cdf055423dbad112b3ea2fc14d36ae26d 100644 (file)
@@ -11,8 +11,11 @@ import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
 import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener;
+import com.vaadin.ui.TextField;
 
+@Component(value = TextField.class, loadStyle = LoadStyle.EAGER)
 public class TextFieldConnector extends AbstractFieldConnector implements
         BeforeShortcutActionListener {
 
index 9e670e46dffeaa7273ec7f68248e00493d1520ec..dce88ff5ec0c17e9735f68c0d03bc0af25ed4125 100644 (file)
@@ -13,7 +13,9 @@ import com.vaadin.terminal.gwt.client.ComponentState;
 import com.vaadin.terminal.gwt.client.TooltipInfo;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.ui.VTree.TreeNode;
+import com.vaadin.ui.Tree;
 
+@Component(Tree.class)
 public class TreeConnector extends AbstractComponentConnector {
 
     public static final String ATTRIBUTE_NODE_STYLE = "style";
index 575eea0288a89c3771d88b87f9e54ae0997c6052..15dda772c5a956f914185df7e0484e612c800778 100644 (file)
@@ -9,7 +9,9 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.ui.VScrollTable.VScrollTableBody.VScrollTableRow;
 import com.vaadin.terminal.gwt.client.ui.VTreeTable.PendingNavigationEvent;
+import com.vaadin.ui.TreeTable;
 
+@Component(TreeTable.class)
 public class TreeTableConnector extends TableConnector {
     public static final String ATTRIBUTE_HIERARCHY_COLUMN_INDEX = "hci";
 
index 03bb70d01add44dee319ad7ad8b21abb5ad51a6c..55e75879ca44ce03ccd414e84417244e65172c69 100644 (file)
@@ -9,7 +9,9 @@ import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.DirectionalManagedLayout;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.TwinColSelect;
 
+@Component(TwinColSelect.class)
 public class TwinColSelectConnector extends OptionGroupBaseConnector implements
         DirectionalManagedLayout {
 
index 3af42e95722addc590165ce1c924ed6d0d5e6349..b42f5d4bb6a77c0822982dfbb3b75f7e9dae7ec1 100644 (file)
@@ -23,15 +23,16 @@ public class UnknownComponentConnector extends AbstractComponentConnector {
         if (!isRealUpdate(uidl)) {
             return;
         }
-        getWidget().setCaption(
-                "Widgetset does not contain implementation for "
-                        + getWidget().serverClassName
-                        + ". Check its @ClientWidget mapping, widgetsets "
-                        + "GWT module description file and re-compile your"
-                        + " widgetset. In case you have downloaded a vaadin"
-                        + " add-on package, you might want to refer to "
-                        + "<a href='http://vaadin.com/using-addons'>add-on "
-                        + "instructions</a>. Unrendered UIDL:");
+        getWidget()
+                .setCaption(
+                        "Widgetset does not contain implementation for "
+                                + getWidget().serverClassName
+                                + ". Check its component connector's @Component mapping, widgetsets "
+                                + "GWT module description file and re-compile your"
+                                + " widgetset. In case you have downloaded a vaadin"
+                                + " add-on package, you might want to refer to "
+                                + "<a href='http://vaadin.com/using-addons'>add-on "
+                                + "instructions</a>. Unrendered UIDL:");
         if (getWidget().uidlTree != null) {
             getWidget().uidlTree.removeFromParent();
         }
index 182156d0e4899b2e453e7aead0bc88b62c71bc10..6bdc067737e999618508ade9393be3f41893d3ff 100644 (file)
@@ -8,7 +8,10 @@ import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
+import com.vaadin.ui.Upload;
 
+@Component(value = Upload.class, loadStyle = LoadStyle.LAZY)
 public class UploadConnector extends AbstractComponentConnector {
 
     @Override
index 0d17186786ccece8c5ab63b823b0bdf77b794303..a7109f453c21086327d50010aa826fb86277b67a 100644 (file)
@@ -4,7 +4,10 @@
 package com.vaadin.terminal.gwt.client.ui;
 
 import com.google.gwt.core.client.GWT;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
+import com.vaadin.ui.VerticalLayout;
 
+@Component(value = VerticalLayout.class, loadStyle = LoadStyle.EAGER)
 public class VerticalLayoutConnector extends AbstractOrderedLayoutConnector {
 
     @Override
index 26e393f5d672de523acc3e894205899d6574eecf..bbce8572c2a3018b6c3442f0f7207f3d42bb853b 100644 (file)
@@ -4,7 +4,10 @@
 package com.vaadin.terminal.gwt.client.ui;
 
 import com.google.gwt.core.client.GWT;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
+import com.vaadin.ui.VerticalSplitPanel;
 
+@Component(value = VerticalSplitPanel.class, loadStyle = LoadStyle.EAGER)
 public class VerticalSplitPanelConnector extends AbstractSplitPanelConnector {
 
     @Override
index c4e3555b07e1322ea13e49830397f0cb9f9f7aa2..95032ebfb284c8ce8b7ce63b8b563d03746f045d 100644 (file)
@@ -7,7 +7,9 @@ import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.ui.Video;
 
+@Component(Video.class)
 public class VideoConnector extends MediaBaseConnector {
     public static final String ATTR_POSTER = "poster";
 
index e209c2aaa1395aabfe20573b17ee1d794be26318..8c824b89a97ce8566741402672d6537acc790bec 100644 (file)
@@ -25,6 +25,7 @@ import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 import com.vaadin.terminal.gwt.client.ui.PanelConnector.PanelState;
 import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener;
 
+@Component(value = com.vaadin.ui.Window.class)
 public class WindowConnector extends AbstractComponentContainerConnector
         implements BeforeShortcutActionListener, SimpleManagedLayout,
         PostLayoutListener {
index d76afaf96244eda59e6f5eee08f36505ad08aa2d..70cf30f003a6673b434d21b27c07def50fba3056 100644 (file)
@@ -11,7 +11,11 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.Util;
 import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
+import com.vaadin.terminal.gwt.client.ui.Component;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
+import com.vaadin.ui.Label;
 
+@Component(value = Label.class, loadStyle = LoadStyle.EAGER)
 public class LabelConnector extends AbstractComponentConnector {
     public LabelConnector() {
     }
index 77835236a52ece1b436033e367271d6178dfeca8..e618cc253c5d281b11fa7c195219f21f520884bf 100644 (file)
@@ -9,8 +9,12 @@ import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.ui.AbstractFieldConnector;
+import com.vaadin.terminal.gwt.client.ui.Component;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
 import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener;
+import com.vaadin.ui.RichTextArea;
 
+@Component(value = RichTextArea.class, loadStyle = LoadStyle.LAZY)
 public class RichTextAreaConnector extends AbstractFieldConnector implements
         BeforeShortcutActionListener {
 
index 505cebaabf0b8012458b2704042a3656e2a1831e..727680bba2c6349ae3a1574d5179726e781c2d7d 100644 (file)
@@ -740,6 +740,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
         return seckey;
     }
 
+    @SuppressWarnings("unchecked")
     public void writeUidlResponse(boolean repaintAll,
             final PrintWriter outWriter, Root root, boolean analyzeLayouts)
             throws PaintException {
@@ -1040,12 +1041,12 @@ public abstract class AbstractCommunicationManager implements Serializable {
         }
         outWriter.print("}");
 
-        Collection<Class<? extends Paintable>> usedPaintableTypes = paintTarget
-                .getUsedPaintableTypes();
+        Collection<Class<? extends ClientConnector>> usedClientConnectors = paintTarget
+                .getUsedClientConnectors();
         boolean typeMappingsOpen = false;
         ClientCache clientCache = getClientCache(root);
 
-        for (Class<? extends Paintable> class1 : usedPaintableTypes) {
+        for (Class<? extends ClientConnector> class1 : usedClientConnectors) {
             if (clientCache.cache(class1)) {
                 // client does not know the mapping key for this type, send
                 // mapping to client
@@ -1059,14 +1060,37 @@ public abstract class AbstractCommunicationManager implements Serializable {
                 outWriter.print("\"");
                 outWriter.print(canonicalName);
                 outWriter.print("\" : ");
-                outWriter
-                        .print(getTagForType((Class<? extends ClientConnector>) class1));
+                outWriter.print(getTagForType(class1));
             }
         }
         if (typeMappingsOpen) {
             outWriter.print(" }");
         }
 
+        boolean typeInheritanceMapOpen = false;
+        if (typeMappingsOpen) {
+            // send the whole type inheritance map if any new mappings
+            for (Class<? extends ClientConnector> class1 : usedClientConnectors) {
+                if (!typeInheritanceMapOpen) {
+                    typeInheritanceMapOpen = true;
+                    outWriter.print(", \"typeInheritanceMap\" : { ");
+                } else {
+                    outWriter.print(" , ");
+                }
+                outWriter.print("\"");
+                outWriter.print(getTagForType(class1));
+                outWriter.print("\" : ");
+                // note that if the superclass is not in typeMappings, a "dummy"
+                // tag is used
+                outWriter
+                        .print(getTagForType((Class<? extends ClientConnector>) class1
+                                .getSuperclass()));
+            }
+            if (typeInheritanceMapOpen) {
+                outWriter.print(" }");
+            }
+        }
+
         // add any pending locale definitions requested by the client
         printLocaleDeclarations(outWriter);
 
index 56f72b2cd7a37217c2cbba3f5cc0f86ce4bad212..1b79f6e5b0b2f13d9e00eb6dd118e0be6ad3bc8b 100644 (file)
@@ -4,23 +4,15 @@
 
 package com.vaadin.terminal.gwt.server;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.io.Serializable;
-import java.io.StringWriter;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.Map;
 import java.util.Set;
 import java.util.Stack;
 import java.util.Vector;
-import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import com.vaadin.Application;
@@ -35,9 +27,7 @@ import com.vaadin.terminal.ThemeResource;
 import com.vaadin.terminal.VariableOwner;
 import com.vaadin.terminal.gwt.client.Connector;
 import com.vaadin.ui.Alignment;
-import com.vaadin.ui.ClientWidget;
 import com.vaadin.ui.CustomLayout;
-import com.vaadin.ui.Root;
 
 /**
  * User Interface Description Language Target.
@@ -86,7 +76,7 @@ public class JsonPaintTarget implements PaintTarget {
 
     private final Collection<Paintable> paintedComponents = new HashSet<Paintable>();
 
-    private final Collection<Class<? extends Paintable>> usedPaintableTypes = new LinkedList<Class<? extends Paintable>>();
+    private final Set<Class<? extends ClientConnector>> usedClientConnectors = new HashSet<Class<? extends ClientConnector>>();
 
     /**
      * Creates a new JsonPaintTarget.
@@ -988,159 +978,27 @@ public class JsonPaintTarget implements PaintTarget {
         return usedResources;
     }
 
-    private static final Map<Class<? extends Paintable>, Class<? extends Paintable>> widgetMappingCache = new HashMap<Class<? extends Paintable>, Class<? extends Paintable>>();
-
     @SuppressWarnings("unchecked")
     public String getTag(Paintable paintable) {
-        Class<? extends Paintable> class1;
-        synchronized (widgetMappingCache) {
-            class1 = widgetMappingCache.get(paintable.getClass());
+        if (!(paintable instanceof ClientConnector)) {
+            throw new IllegalArgumentException(
+                    "Tags are only available for ClientConnectors");
         }
-        if (class1 == null) {
-            /*
-             * Client widget annotation is searched from component hierarchy to
-             * detect the component that presumably has client side
-             * implementation. The server side name is used in the
-             * transportation, but encoded into integer strings to optimized
-             * transferred data.
-             */
-            class1 = paintable.getClass();
-            while (!hasClientWidgetMapping(class1)) {
-                Class<?> superclass = class1.getSuperclass();
-                if (superclass != null
-                        && Paintable.class.isAssignableFrom(superclass)) {
-                    class1 = (Class<? extends Paintable>) superclass;
-                } else {
-                    logger.warning("No superclass of "
-                            + paintable.getClass().getName()
-                            + " has a @ClientWidget"
-                            + " annotation. Component will not be mapped correctly on client side.");
-                    break;
-                }
-            }
-            synchronized (widgetMappingCache) {
-                widgetMappingCache.put(paintable.getClass(), class1);
-            }
-        }
-
-        usedPaintableTypes.add(class1);
-        return manager.getTagForType((Class<? extends ClientConnector>) class1);
-
-    }
-
-    private boolean hasClientWidgetMapping(Class<? extends Paintable> class1) {
-        if (Root.class == class1) {
-            return true;
+        Class<?> clazz = paintable.getClass();
+        while (!usedClientConnectors.contains(clazz)
+                && clazz.getSuperclass() != null
+                && ClientConnector.class
+                        .isAssignableFrom(clazz.getSuperclass())) {
+            usedClientConnectors.add((Class<? extends ClientConnector>) clazz);
+            clazz = clazz.getSuperclass();
         }
-        try {
-            return class1.isAnnotationPresent(ClientWidget.class);
-        } catch (NoClassDefFoundError e) {
-            String stacktrace = getStacktraceString(e);
-            if (stacktrace
-                    .contains("com.ibm.oti.reflect.AnnotationParser.parseClass")) {
-                // #7479 IBM JVM apparently tries to eagerly load the classes
-                // referred to by annotations. Checking the annotation from byte
-                // code to be sure that we are dealing the this case and not
-                // some other class loading issue.
-                if (bytecodeContainsClientWidgetAnnotation(class1)) {
-                    return true;
-                }
-            } else {
-                // throw exception forward
-                throw e;
-            }
-        } catch (LinkageError e) {
-            String stacktrace = getStacktraceString(e);
-            if (stacktrace
-                    .contains("org.jboss.modules.ModuleClassLoader.defineClass")) {
-                // #7822 JBoss AS 7 apparently tries to eagerly load the classes
-                // referred to by annotations. Checking the annotation from byte
-                // code to be sure that we are dealing the this case and not
-                // some other class loading issue.
-                if (bytecodeContainsClientWidgetAnnotation(class1)) {
-                    // Seems that JBoss still prints a stacktrace to the logs
-                    // even though the LinkageError has been caught
-                    return true;
-                }
-            } else {
-                // throw exception forward
-                throw e;
-            }
-        } catch (RuntimeException e) {
-            if (e.getStackTrace()[0].getClassName().equals(
-                    "org.glassfish.web.loader.WebappClassLoader")) {
-
-                // See #3920
-                // Glassfish 3 is darn eager to load the value class, even
-                // though we just want to check if the annotation exists.
-
-                // In some situations (depending on class loading order) it
-                // would be enough to return true here, but it is safer to check
-                // the annotation from byte code
-
-                if (bytecodeContainsClientWidgetAnnotation(class1)) {
-                    return true;
-                }
-            } else {
-                // throw exception forward
-                throw e;
-            }
-        }
-        return false;
-    }
-
-    private static String getStacktraceString(Throwable e) {
-        StringWriter writer = new StringWriter();
-        e.printStackTrace(new PrintWriter(writer));
-        String stacktrace = writer.toString();
-        return stacktrace;
-    }
-
-    private boolean bytecodeContainsClientWidgetAnnotation(
-            Class<? extends Paintable> class1) {
-
-        try {
-            String name = class1.getName().replace('.', '/') + ".class";
-
-            InputStream stream = class1.getClassLoader().getResourceAsStream(
-                    name);
-            BufferedReader bufferedReader = new BufferedReader(
-                    new InputStreamReader(stream));
-            try {
-                String line;
-                boolean atSourcefile = false;
-                while ((line = bufferedReader.readLine()) != null) {
-                    if (line.startsWith("SourceFile")) {
-                        atSourcefile = true;
-                    }
-                    if (atSourcefile) {
-                        if (line.contains("ClientWidget")) {
-                            return true;
-                        }
-                    }
-                    // TODO could optimize to quit at the end attribute
-                }
-            } catch (IOException e1) {
-                logger.log(Level.SEVERE,
-                        "An error occurred while finding widget mapping.", e1);
-            } finally {
-                try {
-                    bufferedReader.close();
-                } catch (IOException e1) {
-                    logger.log(Level.SEVERE, "Could not close reader.", e1);
-
-                }
-            }
-        } catch (Throwable t) {
-            logger.log(Level.SEVERE,
-                    "An error occurred while finding widget mapping.", t);
-        }
-
-        return false;
+        return manager
+                .getTagForType((Class<? extends ClientConnector>) paintable
+                        .getClass());
     }
 
-    Collection<Class<? extends Paintable>> getUsedPaintableTypes() {
-        return usedPaintableTypes;
+    Collection<Class<? extends ClientConnector>> getUsedClientConnectors() {
+        return usedClientConnectors;
     }
 
     public void addVariable(VariableOwner owner, String name,
index ae744aa4f8823ec8e5d5500ee8495ff6629b5df4..d1b554c358c36f3cdfc1bdf1e0b5ea667d914940 100644 (file)
@@ -32,8 +32,6 @@ import java.util.logging.Logger;
 import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
 import com.vaadin.event.dd.acceptcriteria.ClientCriterion;
 import com.vaadin.terminal.Paintable;
-import com.vaadin.ui.ClientWidget;
-import com.vaadin.ui.Root;
 
 /**
  * Utility class to collect widgetset related information from classpath.
@@ -94,8 +92,8 @@ public class ClassPathExplorer {
     }
 
     /**
-     * Finds server side widgets with {@link ClientWidget} annotation on the
-     * class path (entries that can contain widgets/widgetsets - see
+     * Finds server side widgets with ClientWidget annotation on the class path
+     * (entries that can contain widgets/widgetsets - see
      * getRawClasspathEntries()).
      * 
      * As a side effect, also accept criteria are searched under the same class
@@ -450,7 +448,7 @@ public class ClassPathExplorer {
 
     /**
      * Searches for all paintable classes and accept criteria under a location
-     * based on {@link ClientWidget} and {@link ClientCriterion} annotations.
+     * based on {@link ClientCriterion} annotations.
      * 
      * Note that client criteria are updated directly to the
      * {@link #acceptCriterion} field, whereas paintables are added to the
@@ -543,13 +541,13 @@ public class ClassPathExplorer {
     private static Set<Class<? extends AcceptCriterion>> acceptCriterion = new HashSet<Class<? extends AcceptCriterion>>();
 
     /**
-     * Checks a class for the {@link ClientWidget} and {@link ClientCriterion}
-     * annotations, and adds it to the appropriate collection if it has either.
+     * Checks a class for the {@link ClientCriterion} annotations, and adds it
+     * to the appropriate collection if it has either.
      * 
      * @param fullclassName
      * @param paintables
      *            the collection to which to add server side classes with
-     *            {@link ClientWidget} annotation
+     *            {@link ClientCriterion} annotation
      */
     @SuppressWarnings("unchecked")
     private static void tryToAdd(final String fullclassName,
@@ -564,10 +562,7 @@ public class ClassPathExplorer {
 
             Class<?> c = Class.forName(fullclassName);
 
-            if (c.getAnnotation(ClientWidget.class) != null || Root.class == c) {
-                paintables.add((Class<? extends Paintable>) c);
-                // System.out.println("Found paintable " + fullclassName);
-            } else if (c.getAnnotation(ClientCriterion.class) != null) {
+            if (c.getAnnotation(ClientCriterion.class) != null) {
                 acceptCriterion.add((Class<? extends AcceptCriterion>) c);
             }
         } catch (UnsupportedClassVersionError e) {
index 4ea4cbb8fe482ff1ac783486c36cb6dd8e9e0a75..9d5f48a276ce65225428e4963ba091b858c2436f 100644 (file)
@@ -6,57 +6,57 @@ package com.vaadin.terminal.gwt.widgetsetutils;
 import java.util.Collection;
 import java.util.HashSet;
 
-import com.vaadin.terminal.Paintable;
-import com.vaadin.ui.ClientWidget;
-import com.vaadin.ui.ClientWidget.LoadStyle;
+import com.vaadin.terminal.gwt.client.ComponentConnector;
+import com.vaadin.terminal.gwt.client.ui.Component;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
 
 /**
  * An abstract helper class that can be used to easily build a widgetset with
  * customized load styles for each components. In three abstract methods one can
- * override the default values given in {@link ClientWidget} annotations.
+ * override the default values given in {@link Component} annotations.
  * 
  * @see WidgetMapGenerator
  * 
  */
 public abstract class CustomWidgetMapGenerator extends WidgetMapGenerator {
 
-    private Collection<Class<? extends Paintable>> eagerPaintables = new HashSet<Class<? extends Paintable>>();
-    private Collection<Class<? extends Paintable>> lazyPaintables = new HashSet<Class<? extends Paintable>>();
-    private Collection<Class<? extends Paintable>> deferredPaintables = new HashSet<Class<? extends Paintable>>();
+    private Collection<Class<? extends ComponentConnector>> eagerPaintables = new HashSet<Class<? extends ComponentConnector>>();
+    private Collection<Class<? extends ComponentConnector>> lazyPaintables = new HashSet<Class<? extends ComponentConnector>>();
+    private Collection<Class<? extends ComponentConnector>> deferredPaintables = new HashSet<Class<? extends ComponentConnector>>();
 
     @Override
-    protected LoadStyle getLoadStyle(Class<? extends Paintable> paintableType) {
+    protected LoadStyle getLoadStyle(Class<? extends ComponentConnector> connector) {
         if (eagerPaintables == null) {
             init();
         }
-        if (eagerPaintables.contains(paintableType)) {
+        if (eagerPaintables.contains(connector)) {
             return LoadStyle.EAGER;
         }
-        if (lazyPaintables.contains(paintableType)) {
+        if (lazyPaintables.contains(connector)) {
             return LoadStyle.LAZY;
         }
-        if (deferredPaintables.contains(paintableType)) {
+        if (deferredPaintables.contains(connector)) {
             return LoadStyle.DEFERRED;
         }
-        return super.getLoadStyle(paintableType);
+        return super.getLoadStyle(connector);
     }
 
     private void init() {
-        Class<? extends Paintable>[] eagerComponents = getEagerComponents();
+        Class<? extends ComponentConnector>[] eagerComponents = getEagerComponents();
         if (eagerComponents != null) {
-            for (Class<? extends Paintable> class1 : eagerComponents) {
+            for (Class<? extends ComponentConnector> class1 : eagerComponents) {
                 eagerPaintables.add(class1);
             }
         }
-        Class<? extends Paintable>[] lazyComponents = getEagerComponents();
+        Class<? extends ComponentConnector>[] lazyComponents = getEagerComponents();
         if (lazyComponents != null) {
-            for (Class<? extends Paintable> class1 : lazyComponents) {
+            for (Class<? extends ComponentConnector> class1 : lazyComponents) {
                 lazyPaintables.add(class1);
             }
         }
-        Class<? extends Paintable>[] deferredComponents = getEagerComponents();
+        Class<? extends ComponentConnector>[] deferredComponents = getEagerComponents();
         if (deferredComponents != null) {
-            for (Class<? extends Paintable> class1 : deferredComponents) {
+            for (Class<? extends ComponentConnector> class1 : deferredComponents) {
                 deferredPaintables.add(class1);
             }
         }
@@ -66,18 +66,18 @@ public abstract class CustomWidgetMapGenerator extends WidgetMapGenerator {
      * @return an array of components whose load style should be overridden to
      *         {@link LoadStyle#EAGER}
      */
-    protected abstract Class<? extends Paintable>[] getEagerComponents();
+    protected abstract Class<? extends ComponentConnector>[] getEagerComponents();
 
     /**
      * @return an array of components whose load style should be overridden to
      *         {@link LoadStyle#LAZY}
      */
-    protected abstract Class<? extends Paintable>[] getLazyComponents();
+    protected abstract Class<? extends ComponentConnector>[] getLazyComponents();
 
     /**
      * @return an array of components whose load style should be overridden to
      *         {@link LoadStyle#DEFERRED}
      */
-    protected abstract Class<? extends Paintable>[] getDeferredComponents();
+    protected abstract Class<? extends ComponentConnector>[] getDeferredComponents();
 
 }
index 6381a3b4cbd84c0c6200dd2bde8583b637e9bf97..6e20169c3bfd1377223167222a19d6c8b1c8ee85 100644 (file)
@@ -3,8 +3,8 @@
  */
 package com.vaadin.terminal.gwt.widgetsetutils;
 
-import com.vaadin.terminal.Paintable;
-import com.vaadin.ui.ClientWidget.LoadStyle;
+import com.vaadin.terminal.gwt.client.ComponentConnector;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
 
 /**
  * WidgetMap generator that builds a widgetset that packs all included widgets
@@ -21,8 +21,10 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
  * 
  */
 public class EagerWidgetMapGenerator extends WidgetMapGenerator {
-    @Override
-    protected LoadStyle getLoadStyle(Class<? extends Paintable> paintableType) {
-        return LoadStyle.EAGER;
+       
+    
+       @Override
+    protected LoadStyle getLoadStyle(Class<? extends ComponentConnector> connector) {
+       return LoadStyle.EAGER;
     }
 }
index 7de72f09cea92b15ab329c655c5904a02fcc5d57..28f9f8a84fa81ae633e9d88741d1c19d8413fd66 100644 (file)
@@ -3,8 +3,9 @@
  */
 package com.vaadin.terminal.gwt.widgetsetutils;
 
-import com.vaadin.terminal.Paintable;
-import com.vaadin.ui.ClientWidget.LoadStyle;
+import com.vaadin.terminal.gwt.client.ComponentConnector;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
+
 
 /**
  * WidgetMap generator that builds a widgetset that optimizes the transferred
@@ -16,7 +17,7 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
  */
 public class LazyWidgetMapGenerator extends WidgetMapGenerator {
     @Override
-    protected LoadStyle getLoadStyle(Class<? extends Paintable> paintableType) {
+    protected LoadStyle getLoadStyle(Class<? extends ComponentConnector> connector) {
         return LoadStyle.LAZY;
     }
 
index 266b919c86dc23971dc5f4157b9110841266dbe7..8552168753750f065ae57388006fdb2fd50ec93c 100644 (file)
@@ -22,21 +22,20 @@ import com.google.gwt.core.ext.typeinfo.JClassType;
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
 import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
 import com.google.gwt.user.rebind.SourceWriter;
-import com.vaadin.terminal.Paintable;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
+import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.terminal.gwt.client.ui.Component;
+import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
 import com.vaadin.terminal.gwt.client.ui.RootConnector;
 import com.vaadin.terminal.gwt.client.ui.UnknownComponentConnector;
-import com.vaadin.ui.ClientWidget;
-import com.vaadin.ui.ClientWidget.LoadStyle;
-import com.vaadin.ui.Root;
+import com.vaadin.terminal.gwt.server.ClientConnector;
 
 /**
  * WidgetMapGenerator's are GWT generator to build WidgetMapImpl dynamically
- * based on {@link ClientWidget} annotations available in workspace. By
- * modifying the generator it is possible to do some fine tuning for the
- * generated widgetset (aka client side engine). The components to be included
- * in the client side engine can modified be overriding
- * {@link #getUsedPaintables()}.
+ * based on {@link Component} annotations available in workspace. By modifying
+ * the generator it is possible to do some fine tuning for the generated
+ * widgetset (aka client side engine). The components to be included in the
+ * client side engine can modified be overriding {@link #getUsedConnectors()}.
  * <p>
  * The generator also decides how the client side component implementations are
  * loaded to the browser. The default generator is
@@ -44,7 +43,7 @@ import com.vaadin.ui.Root;
  * that loads all widget implementation on application initialization. This has
  * been the only option until Vaadin 6.4.
  * <p>
- * This generator uses the loadStyle hints from the {@link ClientWidget}
+ * This generator uses the loadStyle hints from the {@link Component}
  * annotations. Depending on the {@link LoadStyle} used, the widget may be
  * included in the initially loaded JavaScript, loaded when the application has
  * started and there is no communication to server or lazy loaded when the
@@ -72,7 +71,7 @@ import com.vaadin.ui.Root;
  */
 public class WidgetMapGenerator extends Generator {
 
-    private static String paintableClassName = ComponentConnector.class
+    private static String componentConnectorClassName = ComponentConnector.class
             .getName();
 
     private String packageName;
@@ -129,15 +128,15 @@ public class WidgetMapGenerator extends Generator {
         SourceWriter sourceWriter = composer.createSourceWriter(context,
                 printWriter);
 
-        Collection<Class<? extends Paintable>> paintablesHavingWidgetAnnotation = getUsedPaintables();
+        Collection<Class<? extends ComponentConnector>> connectors = getUsedConnectors(context
+                .getTypeOracle());
 
-        validatePaintables(logger, context, paintablesHavingWidgetAnnotation);
+        validateConnectors(logger, connectors);
+        logConnectors(logger, context, connectors);
 
         // generator constructor source code
-        generateImplementationDetector(sourceWriter,
-                paintablesHavingWidgetAnnotation);
-        generateInstantiatorMethod(sourceWriter,
-                paintablesHavingWidgetAnnotation);
+        generateImplementationDetector(sourceWriter, connectors);
+        generateInstantiatorMethod(sourceWriter, connectors);
         // close generated class
         sourceWriter.outdent();
         sourceWriter.println("}");
@@ -149,45 +148,44 @@ public class WidgetMapGenerator extends Generator {
 
     }
 
-    /**
-     * Verifies that all client side components are available for client side
-     * GWT module.
-     * 
-     * @param logger
-     * @param context
-     * @param paintablesHavingWidgetAnnotation
-     */
-    private void validatePaintables(
-            TreeLogger logger,
-            GeneratorContext context,
-            Collection<Class<? extends Paintable>> paintablesHavingWidgetAnnotation) {
-        TypeOracle typeOracle = context.getTypeOracle();
-
-        for (Iterator<Class<? extends Paintable>> iterator = paintablesHavingWidgetAnnotation
-                .iterator(); iterator.hasNext();) {
-            Class<? extends Paintable> class1 = iterator.next();
-
-            Class<? extends com.vaadin.terminal.gwt.client.ComponentConnector> clientClass = getClientClass(class1);
-            if (typeOracle.findType(clientClass.getName()) == null) {
-                // GWT widget not inherited
-                logger.log(Type.WARN, "Widget class " + clientClass.getName()
-                        + " was not found. The component " + class1.getName()
-                        + " will not be included in the widgetset.");
-                iterator.remove();
+    private void validateConnectors(TreeLogger logger,
+            Collection<Class<? extends ComponentConnector>> connectors) {
+
+        Iterator<Class<? extends ComponentConnector>> iter = connectors
+                .iterator();
+        while (iter.hasNext()) {
+            Class<? extends ComponentConnector> connectorClass = iter.next();
+            Component annotation = connectorClass
+                    .getAnnotation(Component.class);
+            if (!ClientConnector.class.isAssignableFrom(annotation.value())) {
+                logger.log(
+                        Type.WARN,
+                        "Connector class "
+                                + annotation.value().getName()
+                                + " defined in @Component annotation is not a subclass of "
+                                + ClientConnector.class.getName()
+                                + ". The component connector "
+                                + connectorClass.getName()
+                                + " will not be included in the widgetset.");
+                iter.remove();
             }
-
         }
+
+    }
+
+    private void logConnectors(TreeLogger logger, GeneratorContext context,
+            Collection<Class<? extends ComponentConnector>> connectors) {
         logger.log(Type.INFO,
-                "Widget set will contain implementations for following components: ");
+                "Widget set will contain implementations for following component connectors: ");
 
         TreeSet<String> classNames = new TreeSet<String>();
         HashMap<String, String> loadStyle = new HashMap<String, String>();
-        for (Class<? extends Paintable> class1 : paintablesHavingWidgetAnnotation) {
-            String className = class1.getCanonicalName();
+        for (Class<? extends ComponentConnector> connectorClass : connectors) {
+            String className = connectorClass.getCanonicalName();
             classNames.add(className);
-            if (getLoadStyle(class1) == LoadStyle.DEFERRED) {
+            if (getLoadStyle(connectorClass) == LoadStyle.DEFERRED) {
                 loadStyle.put(className, "DEFERRED");
-            } else if (getLoadStyle(class1) == LoadStyle.LAZY) {
+            } else if (getLoadStyle(connectorClass) == LoadStyle.LAZY) {
                 loadStyle.put(className, "LAZY");
             }
 
@@ -210,36 +208,50 @@ public class WidgetMapGenerator extends Generator {
      * @return a collections of Vaadin components that will be added to
      *         widgetset
      */
-    protected Collection<Class<? extends Paintable>> getUsedPaintables() {
-        return ClassPathExplorer.getPaintablesHavingWidgetAnnotation();
+    @SuppressWarnings("unchecked")
+    private Collection<Class<? extends ComponentConnector>> getUsedConnectors(
+            TypeOracle typeOracle) {
+        JClassType connectorType = typeOracle.findType(Connector.class
+                .getName());
+        Collection<Class<? extends ComponentConnector>> connectors = new HashSet<Class<? extends ComponentConnector>>();
+        for (JClassType jClassType : connectorType.getSubtypes()) {
+            Component annotation = jClassType.getAnnotation(Component.class);
+            if (annotation != null) {
+                try {
+                    Class<? extends ComponentConnector> clazz = (Class<? extends ComponentConnector>) Class
+                            .forName(jClassType.getQualifiedSourceName());
+                    connectors.add(clazz);
+                } catch (ClassNotFoundException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        }
+        return connectors;
     }
 
     /**
      * Returns true if the widget for given component will be lazy loaded by the
      * client. The default implementation reads the information from the
-     * {@link ClientWidget} annotation.
+     * {@link Component} annotation.
      * <p>
      * The method can be overridden to optimize the widget loading mechanism. If
      * the Widgetset is wanted to be optimized for a network with a high latency
      * or for a one with a very fast throughput, it may be good to return false
      * for every component.
      * 
-     * @param paintableType
+     * @param connector
      * @return true iff the widget for given component should be lazy loaded by
      *         the client side engine
      */
-    protected LoadStyle getLoadStyle(Class<? extends Paintable> paintableType) {
-        if (Root.class == paintableType) {
-            return LoadStyle.EAGER;
-        }
-        ClientWidget annotation = paintableType
-                .getAnnotation(ClientWidget.class);
+    protected LoadStyle getLoadStyle(
+            Class<? extends ComponentConnector> connector) {
+        Component annotation = connector.getAnnotation(Component.class);
         return annotation.loadStyle();
     }
 
     private void generateInstantiatorMethod(
             SourceWriter sourceWriter,
-            Collection<Class<? extends Paintable>> paintablesHavingWidgetAnnotation) {
+            Collection<Class<? extends ComponentConnector>> connectorsHavingComponentAnnotation) {
 
         Collection<Class<?>> deferredWidgets = new LinkedList<Class<?>>();
 
@@ -247,17 +259,17 @@ public class WidgetMapGenerator extends Generator {
         // lookup with index than with the hashmap
 
         sourceWriter.println("public void ensureInstantiator(Class<? extends "
-                + paintableClassName + "> classType) {");
+                + componentConnectorClassName + "> classType) {");
         sourceWriter.println("if(!instmap.containsKey(classType)){");
         boolean first = true;
 
-        ArrayList<Class<? extends Paintable>> lazyLoadedWidgets = new ArrayList<Class<? extends Paintable>>();
+        ArrayList<Class<? extends ComponentConnector>> lazyLoadedWidgets = new ArrayList<Class<? extends ComponentConnector>>();
 
-        HashSet<Class<? extends com.vaadin.terminal.gwt.client.ComponentConnector>> widgetsWithInstantiator = new HashSet<Class<? extends com.vaadin.terminal.gwt.client.ComponentConnector>>();
+        HashSet<Class<? extends com.vaadin.terminal.gwt.client.ComponentConnector>> connectorsWithInstantiator = new HashSet<Class<? extends com.vaadin.terminal.gwt.client.ComponentConnector>>();
 
-        for (Class<? extends Paintable> class1 : paintablesHavingWidgetAnnotation) {
-            Class<? extends com.vaadin.terminal.gwt.client.ComponentConnector> clientClass = getClientClass(class1);
-            if (widgetsWithInstantiator.contains(clientClass)) {
+        for (Class<? extends ComponentConnector> class1 : connectorsHavingComponentAnnotation) {
+            Class<? extends ComponentConnector> clientClass = class1;
+            if (connectorsWithInstantiator.contains(clientClass)) {
                 continue;
             }
             if (clientClass == RootConnector.class) {
@@ -273,8 +285,9 @@ public class WidgetMapGenerator extends Generator {
                     + ".class) {");
 
             String instantiator = "new WidgetInstantiator() {\n public "
-                    + paintableClassName + " get() {\n return GWT.create("
-                    + clientClass.getName() + ".class );\n}\n}\n";
+                    + componentConnectorClassName
+                    + " get() {\n return GWT.create(" + clientClass.getName()
+                    + ".class );\n}\n}\n";
 
             LoadStyle loadStyle = getLoadStyle(class1);
 
@@ -301,14 +314,15 @@ public class WidgetMapGenerator extends Generator {
                 sourceWriter.print(");");
             }
             sourceWriter.print("}");
-            widgetsWithInstantiator.add(clientClass);
+            connectorsWithInstantiator.add(clientClass);
         }
 
         sourceWriter.println("}");
 
         sourceWriter.println("}");
 
-        sourceWriter.println("public Class<? extends " + paintableClassName
+        sourceWriter.println("public Class<? extends "
+                + componentConnectorClassName
                 + ">[] getDeferredLoadedWidgets() {");
 
         sourceWriter.println("return new Class[] {");
@@ -318,10 +332,7 @@ public class WidgetMapGenerator extends Generator {
                 sourceWriter.println(",");
             }
             first = false;
-            ClientWidget annotation = class2.getAnnotation(ClientWidget.class);
-            Class<? extends com.vaadin.terminal.gwt.client.ComponentConnector> value = annotation
-                    .value();
-            sourceWriter.print(value.getName() + ".class");
+            sourceWriter.print(class2.getName() + ".class");
         }
 
         sourceWriter.println("};");
@@ -334,11 +345,11 @@ public class WidgetMapGenerator extends Generator {
 
         // TODO an index of last ensured widget in array
 
-        sourceWriter.println("public " + paintableClassName
-                + " instantiate(Class<? extends " + paintableClassName
+        sourceWriter.println("public " + componentConnectorClassName
+                + " instantiate(Class<? extends " + componentConnectorClassName
                 + "> classType) {");
         sourceWriter.indent();
-        sourceWriter.println(paintableClassName
+        sourceWriter.println(componentConnectorClassName
                 + " p = super.instantiate(classType); if(p!= null) return p;");
         sourceWriter.println("return instmap.get(classType).get();");
 
@@ -355,23 +366,23 @@ public class WidgetMapGenerator extends Generator {
      */
     private void generateImplementationDetector(
             SourceWriter sourceWriter,
-            Collection<Class<? extends Paintable>> paintablesHavingWidgetAnnotation) {
+            Collection<Class<? extends ComponentConnector>> paintablesHavingWidgetAnnotation) {
         sourceWriter
                 .println("public Class<? extends "
-                        + paintableClassName
+                        + componentConnectorClassName
                         + "> "
-                        + "getImplementationByServerSideClassName(String fullyQualifiedName) {");
+                        + "getConnectorClassForServerSideClassName(String fullyQualifiedName) {");
         sourceWriter.indent();
         sourceWriter
                 .println("fullyQualifiedName = fullyQualifiedName.intern();");
 
-        for (Class<? extends Paintable> class1 : paintablesHavingWidgetAnnotation) {
-            Class<? extends com.vaadin.terminal.gwt.client.ComponentConnector> clientClass = getClientClass(class1);
+        for (Class<? extends ComponentConnector> connectorClass : paintablesHavingWidgetAnnotation) {
+            Class<? extends ClientConnector> clientConnectorClass = getClientConnectorClass(connectorClass);
             sourceWriter.print("if ( fullyQualifiedName == \"");
-            sourceWriter.print(class1.getName());
+            sourceWriter.print(clientConnectorClass.getName());
             sourceWriter.print("\" ) { ensureInstantiator("
-                    + clientClass.getName() + ".class); return ");
-            sourceWriter.print(clientClass.getName());
+                    + connectorClass.getName() + ".class); return ");
+            sourceWriter.print(connectorClass.getName());
             sourceWriter.println(".class;}");
             sourceWriter.print("else ");
         }
@@ -382,15 +393,9 @@ public class WidgetMapGenerator extends Generator {
 
     }
 
-    private static Class<? extends com.vaadin.terminal.gwt.client.ComponentConnector> getClientClass(
-            Class<? extends Paintable> class1) {
-        Class<? extends com.vaadin.terminal.gwt.client.ComponentConnector> clientClass;
-        if (Root.class == class1) {
-            clientClass = RootConnector.class;
-        } else {
-            ClientWidget annotation = class1.getAnnotation(ClientWidget.class);
-            clientClass = annotation.value();
-        }
-        return clientClass;
+    private static Class<? extends ClientConnector> getClientConnectorClass(
+            Class<? extends ComponentConnector> connectorClass) {
+        Component annotation = connectorClass.getAnnotation(Component.class);
+        return (Class<? extends ClientConnector>) annotation.value();
     }
 }
index f1dc6ba732822939265dff186bccd42d95ff1bf6..20ef7e38cc5c3bf4296cbdcb9a490d9b15010c78 100644 (file)
@@ -28,7 +28,6 @@ import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
  * 
  */
 @SuppressWarnings("serial")
-@ClientWidget(AbsoluteLayoutConnector.class)
 public class AbsoluteLayout extends AbstractLayout implements
         LayoutClickNotifier {
 
index 7efc2d47ec7ff337b7c34c1271ee5a7211eb63e3..b937c7bc2b74b3816e1963753be95a6f1c0566fb 100644 (file)
@@ -3,8 +3,6 @@
  */
 package com.vaadin.ui;
 
-import com.vaadin.terminal.gwt.client.ui.AccordionConnector;
-
 /**
  * An accordion is a component similar to a {@link TabSheet}, but with a
  * vertical orientation and the selected component presented between tabs.
@@ -16,7 +14,6 @@ import com.vaadin.terminal.gwt.client.ui.AccordionConnector;
  * 
  * @see TabSheet
  */
-@ClientWidget(AccordionConnector.class)
 public class Accordion extends TabSheet {
 
 }
index 9759b130f6b600eb1a85f07b6a4cb0204cfffb2b..ac2ee869a6a8cacb41773ba88ea7868506d7828a 100644 (file)
@@ -5,7 +5,6 @@
 package com.vaadin.ui;
 
 import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.gwt.client.ui.AudioConnector;
 
 /**
  * The Audio component translates into an HTML5 &lt;audio&gt; element and as
@@ -28,7 +27,6 @@ import com.vaadin.terminal.gwt.client.ui.AudioConnector;
  * @author Vaadin Ltd
  * @since 6.7.0
  */
-@ClientWidget(AudioConnector.class)
 public class Audio extends AbstractMedia {
 
     public Audio() {
index dbebd9200c663edf64fe42ac1efd634824fae01a..fc564c3237278ae1217edc3478ec0effdc67dd67 100644 (file)
@@ -20,11 +20,9 @@ import com.vaadin.event.ShortcutAction.ModifierKey;
 import com.vaadin.event.ShortcutListener;
 import com.vaadin.terminal.gwt.client.ComponentState;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.ui.ButtonConnector;
 import com.vaadin.terminal.gwt.client.ui.ButtonConnector.ButtonServerRpc;
 import com.vaadin.terminal.gwt.client.ui.ButtonState;
 import com.vaadin.tools.ReflectTools;
-import com.vaadin.ui.ClientWidget.LoadStyle;
 import com.vaadin.ui.Component.Focusable;
 
 /**
@@ -36,7 +34,6 @@ import com.vaadin.ui.Component.Focusable;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(value = ButtonConnector.class, loadStyle = LoadStyle.EAGER)
 public class Button extends AbstractComponent implements
         FieldEvents.BlurNotifier, FieldEvents.FocusNotifier, Focusable,
         Action.ShortcutNotifier {
index 8cc4a7f1eb070a980dc79f885c4b623bb8b4b6d5..f51110755e493391e06c233ba6e82ba9a6ff78c3 100644 (file)
@@ -13,10 +13,8 @@ import com.vaadin.event.FieldEvents.FocusEvent;
 import com.vaadin.event.FieldEvents.FocusListener;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.CheckBoxConnector;
 import com.vaadin.terminal.gwt.client.ui.VCheckBox;
 
-@ClientWidget(CheckBoxConnector.class)
 public class CheckBox extends AbstractField<Boolean> {
     /**
      * Creates a new checkbox.
diff --git a/src/com/vaadin/ui/ClientWidget.java b/src/com/vaadin/ui/ClientWidget.java
deleted file mode 100644 (file)
index 93f17f3..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-/**
- * 
- */
-package com.vaadin.ui;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import com.vaadin.terminal.gwt.client.ComponentConnector;
-import com.vaadin.terminal.gwt.widgetsetutils.CustomWidgetMapGenerator;
-import com.vaadin.terminal.gwt.widgetsetutils.EagerWidgetMapGenerator;
-import com.vaadin.terminal.gwt.widgetsetutils.LazyWidgetMapGenerator;
-import com.vaadin.terminal.gwt.widgetsetutils.WidgetMapGenerator;
-
-/**
- * Annotation defining the default client side counterpart in GWT terminal for
- * {@link Component}.
- * <p>
- * With this annotation server side Vaadin component is marked to have a client
- * side counterpart. The value of the annotation is the class of client side
- * implementation.
- * <p>
- * Note, even though client side implementation is needed during development,
- * one may safely remove them from the classpath of the production server.
- * 
- * @since 6.2
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface ClientWidget {
-    /**
-     * @return the client side counterpart for the annotated component
-     */
-    Class<? extends ComponentConnector> value();
-
-    /**
-     * Depending on the used WidgetMap generator, these optional hints may be
-     * used to define how the client side components are loaded by the browser.
-     * The default is to eagerly load all widgets
-     * {@link EagerWidgetMapGenerator}, but if the {@link WidgetMapGenerator} is
-     * used by the widgetset, these load style hints are respected.
-     * <p>
-     * Lazy loading of a widget implementation means the client side component
-     * is not included in the initial JavaScript application loaded when the
-     * application starts. Instead the implementation is loaded to the client
-     * when it is first needed. Lazy loaded widget can be achieved by giving
-     * {@link LoadStyle#LAZY} value in ClientWidget annotation.
-     * <p>
-     * Lazy loaded widgets don't stress the size and startup time of the client
-     * side as much as eagerly loaded widgets. On the other hand there is a
-     * slight latency when lazy loaded widgets are first used as the client side
-     * needs to visit the server to fetch the client side implementation.
-     * <p>
-     * The {@link LoadStyle#DEFERRED} will also not stress the initially loaded
-     * JavaScript file. If this load style is defined, the widget implementation
-     * is preemptively loaded to the browser after the application is started
-     * and the communication to server idles. This load style kind of combines
-     * the best of both worlds.
-     * <p>
-     * Fine tunings to widget loading can also be made by overriding
-     * {@link WidgetMapGenerator} in the GWT module. Tunings might be helpful if
-     * the end users have slow connections and especially if they have high
-     * latency in their network. The {@link CustomWidgetMapGenerator} is an
-     * abstract generator implementation for easy customization. Vaadin package
-     * also includes {@link LazyWidgetMapGenerator} that makes as many widgets
-     * lazily loaded as possible.
-     * 
-     * @since 6.4
-     * 
-     * @return the hint for the widget set generator how the client side
-     *         implementation should be loaded to the browser
-     */
-    LoadStyle loadStyle() default LoadStyle.DEFERRED;
-
-    public enum LoadStyle {
-        /**
-         * The widget is included in the initial JS sent to the client.
-         */
-        EAGER,
-        /**
-         * Not included in the initial set of widgets, but added to queue from
-         * which it will be loaded when network is not busy or the
-         * implementation is required.
-         */
-        DEFERRED,
-        /**
-         * Loaded to the client only if needed.
-         */
-        LAZY
-    }
-
-}
index 60349b0a43a82e6271fddf75514582d341d0302e..46f78ac7d5fc56620215bf5fbb4cdebcc757a348 100644 (file)
@@ -9,7 +9,6 @@ import java.util.Collection;
 import com.vaadin.data.Container;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.ComboBoxConnector;
 import com.vaadin.terminal.gwt.client.ui.VFilterSelect;
 
 /**
@@ -21,7 +20,6 @@ import com.vaadin.terminal.gwt.client.ui.VFilterSelect;
  * 
  */
 @SuppressWarnings("serial")
-@ClientWidget(ComboBoxConnector.class)
 public class ComboBox extends Select {
 
     private String inputPrompt = null;
index 1b3f5306eb8ff4da76694fbec1c68f163ffdcbf0..a0ff86e3be27581da2cdb7171885852687ef365e 100644 (file)
@@ -60,7 +60,6 @@ import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
  * @since 6.1 brought in from "FastLayouts" incubator project
  * 
  */
-@ClientWidget(CssLayoutConnector.class)
 public class CssLayout extends AbstractLayout implements LayoutClickNotifier {
 
     private CssLayoutServerRPC rpc = new CssLayoutServerRPC() {
index 691c9d3c324917ee62a614d9bce5540b2914705f..98d650f6db2925a282d2a4347dac88e773e369d0 100644 (file)
@@ -7,9 +7,6 @@ package com.vaadin.ui;
 import java.io.Serializable;
 import java.util.Iterator;
 
-import com.vaadin.terminal.gwt.client.ui.CustomComponentConnector;
-import com.vaadin.ui.ClientWidget.LoadStyle;
-
 /**
  * Custom component provides simple implementation of Component interface for
  * creation of new UI components by composition of existing components.
@@ -25,7 +22,6 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(value = CustomComponentConnector.class, loadStyle = LoadStyle.EAGER)
 public class CustomComponent extends AbstractComponentContainer {
 
     /**
index 67063db95ed4b74c56b4e0cebaf1a7216588c239..c333309fbf06a8625e18c56af283c1ba8bfe0599 100644 (file)
@@ -11,7 +11,6 @@ import java.util.Iterator;
 import com.vaadin.data.Property;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.CustomComponentConnector;
 
 /**
  * A {@link Field} whose UI content can be constructed by the user, enabling the
@@ -35,7 +34,6 @@ import com.vaadin.terminal.gwt.client.ui.CustomComponentConnector;
  * 
  * @since 7.0
  */
-@ClientWidget(CustomComponentConnector.class)
 public abstract class CustomField<T> extends AbstractField<T> implements
         ComponentContainer {
 
index a97a317b9d2d4131c261df9b015834ece5c9ccbe..cb0cf25e6f53a956dd9c1ab18d93348117f65943 100644 (file)
@@ -12,7 +12,6 @@ import java.util.Iterator;
 
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.CustomLayoutConnector;
 
 /**
  * <p>
@@ -44,7 +43,6 @@ import com.vaadin.terminal.gwt.client.ui.CustomLayoutConnector;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(CustomLayoutConnector.class)
 public class CustomLayout extends AbstractLayout {
 
     private static final int BUFFER_SIZE = 10000;
index 4e6be98f7aa0f74b3a16b240c185061a07caa094..311019c2e489912618a317bb292814c0e0f58ac0 100644 (file)
@@ -26,7 +26,6 @@ import com.vaadin.event.FieldEvents.FocusEvent;
 import com.vaadin.event.FieldEvents.FocusListener;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.PopupDateFieldConnector;
 import com.vaadin.terminal.gwt.client.ui.VDateField;
 
 /**
@@ -50,7 +49,6 @@ import com.vaadin.terminal.gwt.client.ui.VDateField;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(PopupDateFieldConnector.class)
 public class DateField extends AbstractField<Date> implements
         FieldEvents.BlurNotifier, FieldEvents.FocusNotifier {
 
index dcefc545d9523cd252f680589e1b05ad3db04e05..937942f3d3c50c0e8f7b5db8f9899187530e05a0 100644 (file)
@@ -21,13 +21,11 @@ import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.StreamVariable;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.ui.DragAndDropWrapperConnector;
 import com.vaadin.terminal.gwt.client.ui.VDragAndDropWrapper;
 import com.vaadin.terminal.gwt.client.ui.dd.HorizontalDropLocation;
 import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
 
 @SuppressWarnings("serial")
-@ClientWidget(DragAndDropWrapperConnector.class)
 public class DragAndDropWrapper extends CustomComponent implements DropTarget,
         DragSource {
 
index b936a62471756ea58545c1fea148682f9069df85..688176fb3e541ffa461c7d864410150555dcbd6e 100644 (file)
@@ -27,7 +27,6 @@ import com.vaadin.terminal.gwt.client.ui.EmbeddedConnector.EmbeddedServerRPC;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(EmbeddedConnector.class)
 public class Embedded extends AbstractComponent {
 
     /**
index a66c8e723bf959dc395ad7f284fc32125c92f9a3..74607b65d0044e37b0e0c56e7bb331933434c887 100644 (file)
@@ -30,7 +30,6 @@ import com.vaadin.terminal.ErrorMessage;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.UserError;
-import com.vaadin.terminal.gwt.client.ui.FormConnector;
 
 /**
  * Form component provides easy way of creating and managing sets fields.
@@ -65,7 +64,6 @@ import com.vaadin.terminal.gwt.client.ui.FormConnector;
  * @deprecated Use {@link FieldGroup} instead of {@link Form} for more
  *             flexibility.
  */
-@ClientWidget(FormConnector.class)
 @Deprecated
 public class Form extends AbstractField<Object> implements Item.Editor,
         Buffered, Item, Validatable, Action.Notifier, HasComponents {
index 756c79a4b1022b9adb18ac49886e9518463668c9..63a973e30d6f18b0aa2177ebd16942f15965a2e9 100644 (file)
@@ -4,7 +4,6 @@
 
 package com.vaadin.ui;
 
-import com.vaadin.terminal.gwt.client.ui.FormLayoutConnector;
 
 /**
  * FormLayout is used by {@link Form} to layout fields. It may also be used
@@ -21,7 +20,6 @@ import com.vaadin.terminal.gwt.client.ui.FormLayoutConnector;
  * bottom are by default on.
  * 
  */
-@ClientWidget(FormLayoutConnector.class)
 public class FormLayout extends AbstractOrderedLayout {
 
     public FormLayout() {
index 0c8089258fa3bd3c29edd4e2e1d2fc3febe51496..23497f758f14d88daf9ee30a69b8047f30b159e9 100644 (file)
@@ -50,7 +50,6 @@ import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(GridLayoutConnector.class)
 public class GridLayout extends AbstractLayout implements
         Layout.AlignmentHandler, Layout.SpacingHandler, LayoutClickNotifier {
 
index c053d711e28050090072eea643f4d2c74227375a..807704e7cfd7a0ea06222b83b9bf06b02410eeca 100644 (file)
@@ -3,8 +3,6 @@
  */
 package com.vaadin.ui;
 
-import com.vaadin.terminal.gwt.client.ui.HorizontalLayoutConnector;
-import com.vaadin.ui.ClientWidget.LoadStyle;
 
 /**
  * Horizontal layout
@@ -18,7 +16,6 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
  * @since 5.3
  */
 @SuppressWarnings("serial")
-@ClientWidget(value = HorizontalLayoutConnector.class, loadStyle = LoadStyle.EAGER)
 public class HorizontalLayout extends AbstractOrderedLayout {
 
     public HorizontalLayout() {
index db3223aa88e2c2399488b02897ab398b5ddb8134..7ea07cc61cf36665a58b68a2a5975ed05146ed3a 100644 (file)
@@ -3,8 +3,6 @@
  */
 package com.vaadin.ui;
 
-import com.vaadin.terminal.gwt.client.ui.HorizontalSplitPanelConnector;
-import com.vaadin.ui.ClientWidget.LoadStyle;
 
 /**
  * A horizontal split panel contains two components and lays them horizontally.
@@ -29,7 +27,6 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
  * @VERSION@
  * @since 6.5
  */
-@ClientWidget(value = HorizontalSplitPanelConnector.class, loadStyle = LoadStyle.EAGER)
 public class HorizontalSplitPanel extends AbstractSplitPanel {
     public HorizontalSplitPanel() {
         super();
index 3ae77dd856602bd401e9eb9c3201991662e319ae..cf617033187ef16522fa2fb43ed52dc63ff8b069 100644 (file)
@@ -7,7 +7,6 @@ package com.vaadin.ui;
 import java.util.Date;
 
 import com.vaadin.data.Property;
-import com.vaadin.terminal.gwt.client.ui.InlineDateFieldConnector;
 
 /**
  * <p>
@@ -22,7 +21,6 @@ import com.vaadin.terminal.gwt.client.ui.InlineDateFieldConnector;
  * @VERSION@
  * @since 5.0
  */
-@ClientWidget(InlineDateFieldConnector.class)
 public class InlineDateField extends DateField {
 
     public InlineDateField() {
index 3092faa251cc29e4cd876851f56ea8f78bfb0c8c..c69a68002b3356a7d531b1258fd5142bd9ca0e0f 100644 (file)
@@ -10,8 +10,6 @@ import com.vaadin.data.Property;
 import com.vaadin.data.util.ObjectProperty;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.label.LabelConnector;
-import com.vaadin.ui.ClientWidget.LoadStyle;
 
 /**
  * Label component for showing non-editable short texts.
@@ -38,7 +36,6 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(value = LabelConnector.class, loadStyle = LoadStyle.EAGER)
 // TODO generics for interface Property
 public class Label extends AbstractComponent implements Property,
         Property.Viewer, Property.ValueChangeListener,
index 3be5265bf30c1d5e2853e5612149165d141c7273..4f57acc6e5d22d57176ea09bb1f9fcc251a9cd34 100644 (file)
@@ -7,7 +7,6 @@ package com.vaadin.ui;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.gwt.client.ui.LinkConnector;
 
 /**
  * Link is used to create external or internal URL links.
@@ -18,7 +17,6 @@ import com.vaadin.terminal.gwt.client.ui.LinkConnector;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(LinkConnector.class)
 public class Link extends AbstractComponent {
 
     /* Target window border type constant: No window border */
index cf76babaca162c9b1284905159dcf72f8c988c56..35ccb34b3c135842926253498a18f62aa4f20f1a 100644 (file)
@@ -9,14 +9,12 @@ import java.util.Collection;
 import com.vaadin.data.Container;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.ListSelectConnector;
 
 /**
  * This is a simple list select without, for instance, support for new items,
  * lazyloading, and other advanced features.
  */
 @SuppressWarnings("serial")
-@ClientWidget(ListSelectConnector.class)
 public class ListSelect extends AbstractSelect {
 
     private int columns = 0;
index 7d0d307daa6edde41fede589346cce6f40b9a8d4..a58a742e8c477a72c625255e22790cb5944cd0ae 100644 (file)
@@ -13,9 +13,7 @@ import java.util.Stack;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.gwt.client.ui.MenuBarConnector;
 import com.vaadin.terminal.gwt.client.ui.VMenuBar;
-import com.vaadin.ui.ClientWidget.LoadStyle;
 
 /**
  * <p>
@@ -25,7 +23,6 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
  * </p>
  */
 @SuppressWarnings("serial")
-@ClientWidget(value = MenuBarConnector.class, loadStyle = LoadStyle.LAZY)
 public class MenuBar extends AbstractComponent {
 
     // Items of the top-level menu
index ede63f6d78ce4da96bb2271d1ad0b605dba6d23f..f14b4486743eec60ae6c68e987631e59ceca05b4 100644 (file)
@@ -3,10 +3,8 @@
  */
 package com.vaadin.ui;
 
-import com.vaadin.terminal.gwt.client.ui.NativeButtonConnector;
 
 @SuppressWarnings("serial")
-@ClientWidget(NativeButtonConnector.class)
 public class NativeButton extends Button {
 
     public NativeButton() {
index e7db9aa3ec81291ecab0a67d8c6da6f0ecd14f71..1f85f57c971d2af930c97eb965730d1ac05f8d54 100644 (file)
@@ -9,7 +9,6 @@ import java.util.Collection;
 import com.vaadin.data.Container;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.NativeSelectConnector;
 
 /**
  * This is a simple drop-down select without, for instance, support for
@@ -18,7 +17,6 @@ import com.vaadin.terminal.gwt.client.ui.NativeSelectConnector;
  * better choice.
  */
 @SuppressWarnings("serial")
-@ClientWidget(NativeSelectConnector.class)
 public class NativeSelect extends AbstractSelect {
 
     // width in characters, mimics TextField
index 789c16202d51ee98f7489fe0fb478114e1f6f3da..5d671cbb137f26d61024b13c98b5ec01725ddb27 100644 (file)
@@ -17,14 +17,12 @@ import com.vaadin.event.FieldEvents.FocusEvent;
 import com.vaadin.event.FieldEvents.FocusListener;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.OptionGroupConnector;
 import com.vaadin.terminal.gwt.client.ui.VOptionGroup;
 
 /**
  * Configures select to be used as an option group.
  */
 @SuppressWarnings("serial")
-@ClientWidget(OptionGroupConnector.class)
 public class OptionGroup extends AbstractSelect implements
         FieldEvents.BlurNotifier, FieldEvents.FocusNotifier {
 
index a4ec70f551fdafe552b3efee2471f874b0cb3cc2..763cfb8457ea077d2f93f88bd653fbc49bc5d257 100644 (file)
@@ -31,7 +31,6 @@ import com.vaadin.ui.Component.Focusable;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(PanelConnector.class)
 public class Panel extends AbstractComponentContainer implements Scrollable,
         ComponentContainer.ComponentAttachListener,
         ComponentContainer.ComponentDetachListener, Action.Notifier, Focusable {
index 725376d61758bffdc565d3838408a1b3b4afc4af..c1fccebbfeecf7c5670dae135ae5e52c4de1e01e 100644 (file)
@@ -4,13 +4,11 @@
 package com.vaadin.ui;
 
 import com.vaadin.data.Property;
-import com.vaadin.terminal.gwt.client.ui.PasswordFieldConnector;
 
 /**
  * A field that is used to enter secret text information like passwords. The
  * entered text is not displayed on the screen.
  */
-@ClientWidget(PasswordFieldConnector.class)
 public class PasswordField extends AbstractTextField {
 
     /**
index ef17b9135f02e7482eb65e0a27040daec820507e..6babb5854fd81d9c9ec79ea82f4a19943cf5db54 100644 (file)
@@ -10,7 +10,6 @@ import java.util.Map;
 
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.PopupViewConnector;
 
 /**
  * 
@@ -22,7 +21,6 @@ import com.vaadin.terminal.gwt.client.ui.PopupViewConnector;
  * @author Vaadin Ltd.
  */
 @SuppressWarnings("serial")
-@ClientWidget(PopupViewConnector.class)
 public class PopupView extends AbstractComponentContainer {
 
     private Content content;
index 334727e449dbce2612eaaab8d70f7166f29bf49e..f080199c727a3935472151e535db77c42af05bdd 100644 (file)
@@ -8,7 +8,6 @@ import com.vaadin.data.Property;
 import com.vaadin.data.util.ObjectProperty;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.ProgressIndicatorConnector;
 
 /**
  * <code>ProgressIndicator</code> is component that shows user state of a
@@ -25,7 +24,6 @@ import com.vaadin.terminal.gwt.client.ui.ProgressIndicatorConnector;
  * @since 4
  */
 @SuppressWarnings("serial")
-@ClientWidget(ProgressIndicatorConnector.class)
 public class ProgressIndicator extends AbstractField<Number> implements
         Property.Viewer, Property.ValueChangeListener {
 
index 8646f84c9912192a6f660d63f5e8684a5b755113..5c052e78f469e2498567a5b82e63762465b797f7 100644 (file)
@@ -10,8 +10,6 @@ import java.util.Map;
 import com.vaadin.data.Property;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.richtextarea.RichTextAreaConnector;
-import com.vaadin.ui.ClientWidget.LoadStyle;
 
 /**
  * A simple RichTextArea to edit HTML format text.
@@ -20,7 +18,6 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
  * {@link RichTextArea} may produce unexpected results as formatting is counted
  * into length of field.
  */
-@ClientWidget(value = RichTextAreaConnector.class, loadStyle = LoadStyle.LAZY)
 public class RichTextArea extends AbstractField<String> {
 
     /**
index 144b640be5c689229936083cd93dff1ceaadb6f8..8181950fad2bd7079346956c20c579d6e4f01db4 100644 (file)
@@ -73,8 +73,6 @@ import com.vaadin.ui.Window.CloseListener;
  * 
  * @since 7.0
  */
-// @ClientWidget(View.class) - Can't have annotation because of eager
-// classloaders in application servers and hard coded logic in client side code
 public abstract class Root extends AbstractComponentContainer implements
         Action.Container, Action.Notifier {
 
index 3bbfa29f2b4717c28a81e5893c9c39726d23cd6e..5398f1139161c540bd0c551afa29724a0bd2e4d9 100644 (file)
@@ -23,7 +23,6 @@ import com.vaadin.event.FieldEvents.FocusListener;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.gwt.client.ui.ComboBoxConnector;
 
 /**
  * <p>
@@ -44,7 +43,6 @@ import com.vaadin.terminal.gwt.client.ui.ComboBoxConnector;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(ComboBoxConnector.class)
 public class Select extends AbstractSelect implements AbstractSelect.Filtering,
         FieldEvents.BlurNotifier, FieldEvents.FocusNotifier {
 
index 59aa5cd214ecd94dc8fcc2ecbe5ab7f117333d1c..4509f7af1eddcf539d745c9db9fecbdb90e14bd4 100644 (file)
@@ -8,7 +8,6 @@ import java.util.Map;
 
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.SliderConnector;
 
 /**
  * A component for selecting a numerical value within a range.
@@ -46,7 +45,6 @@ import com.vaadin.terminal.gwt.client.ui.SliderConnector;
  * 
  * @author Vaadin Ltd.
  */
-@ClientWidget(SliderConnector.class)
 public class Slider extends AbstractField<Double> {
 
     public static final int ORIENTATION_HORIZONTAL = 0;
index 7bafb7e75c5fdb3888cc8c79c54b057fce93231f..82a2930dd854cb3ff0e8567233b69e512c183c5e 100644 (file)
@@ -24,7 +24,6 @@ import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.Resource;
 import com.vaadin.terminal.gwt.client.ui.TabsheetBaseConnector;
-import com.vaadin.terminal.gwt.client.ui.TabsheetConnector;
 import com.vaadin.terminal.gwt.client.ui.VTabsheet;
 import com.vaadin.ui.Component.Focusable;
 import com.vaadin.ui.themes.Reindeer;
@@ -59,7 +58,6 @@ import com.vaadin.ui.themes.Runo;
  * @VERSION@
  * @since 3.0
  */
-@ClientWidget(TabsheetConnector.class)
 public class TabSheet extends AbstractComponentContainer implements Focusable,
         FocusNotifier, BlurNotifier {
 
index ff83a9ef2eef5fad9a74f08bbe6951f1bc63b3b9..1c62679e86f37cde429a19afbdb422fd48ceccf2 100644 (file)
@@ -47,7 +47,6 @@ import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.Resource;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.ui.TableConnector;
 import com.vaadin.terminal.gwt.client.ui.VScrollTable;
 import com.vaadin.terminal.gwt.client.ui.dd.VLazyInitItemIdentifiers;
 
@@ -75,7 +74,6 @@ import com.vaadin.terminal.gwt.client.ui.dd.VLazyInitItemIdentifiers;
  * @since 3.0
  */
 @SuppressWarnings({ "deprecation" })
-@ClientWidget(TableConnector.class)
 public class Table extends AbstractSelect implements Action.Container,
         Container.Ordered, Container.Sortable, ItemClickSource,
         ItemClickNotifier, DragSource, DropTarget, HasComponents {
index dafeb8afa70c48a23dbe3c1f352e62304db7a775..adb980818e868ccccc7cd69e86ed212aedfaf04b 100644 (file)
@@ -7,12 +7,10 @@ package com.vaadin.ui;
 import com.vaadin.data.Property;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.TextAreaConnector;
 
 /**
  * A text field that supports multi line editing.
  */
-@ClientWidget(TextAreaConnector.class)
 public class TextArea extends AbstractTextField {
 
     private static final int DEFAULT_ROWS = 5;
index 9b6fd6ada1eb8c839a7b7c5c20762cbce8b06dce..567e9c1c1002bd050a368c698d7aebaa77436d0b 100644 (file)
@@ -5,8 +5,6 @@
 package com.vaadin.ui;
 
 import com.vaadin.data.Property;
-import com.vaadin.terminal.gwt.client.ui.TextFieldConnector;
-import com.vaadin.ui.ClientWidget.LoadStyle;
 
 /**
  * <p>
@@ -29,7 +27,6 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(value = TextFieldConnector.class, loadStyle = LoadStyle.EAGER)
 public class TextField extends AbstractTextField {
 
     /**
index 499fe9d63fd99c1925eca2c79088809b3a437ab5..49cf3ea78a77e7cdd10b860b901974fe9abcc17f 100644 (file)
@@ -61,7 +61,6 @@ import com.vaadin.tools.ReflectTools;
  * @since 3.0
  */
 @SuppressWarnings({ "serial", "deprecation" })
-@ClientWidget(TreeConnector.class)
 public class Tree extends AbstractSelect implements Container.Hierarchical,
         Action.Container, ItemClickSource, ItemClickNotifier, DragSource,
         DropTarget {
index 3dce3d864576f2812842019407085c85f282953e..3fe080787a98a3ab63f803f08c6d316d6ab52d88 100644 (file)
@@ -13,7 +13,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.logging.Logger;
 
-import com.google.gwt.user.client.ui.Tree;
 import com.vaadin.data.Container;
 import com.vaadin.data.Container.Hierarchical;
 import com.vaadin.data.Container.ItemSetChangeEvent;
@@ -48,7 +47,6 @@ import com.vaadin.ui.treetable.HierarchicalContainerOrderedWrapper;
  * share UI state in the container.
  */
 @SuppressWarnings({ "serial" })
-@ClientWidget(TreeTableConnector.class)
 public class TreeTable extends Table implements Hierarchical {
 
     private static final Logger logger = Logger.getLogger(TreeTable.class
index 2e2fbb53fce950e896da464e3b161d153da4267f..f64f05d9a80ee98142b6d111454932666a6ddf47 100644 (file)
@@ -9,7 +9,6 @@ import java.util.Collection;
 import com.vaadin.data.Container;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.gwt.client.ui.TwinColSelectConnector;
 import com.vaadin.terminal.gwt.client.ui.VTwinColSelect;
 
 /**
@@ -17,7 +16,6 @@ import com.vaadin.terminal.gwt.client.ui.VTwinColSelect;
  * side for selected items.
  */
 @SuppressWarnings("serial")
-@ClientWidget(TwinColSelectConnector.class)
 public class TwinColSelect extends AbstractSelect {
 
     private int columns = 0;
index 3498eaa7947a8fc9ea1a6f8286c0380cb2d6cb83..6aee91e935a2a5f78d3de6521fc8222a2b7a14f2 100644 (file)
@@ -15,10 +15,8 @@ import java.util.Map;
 import com.vaadin.terminal.PaintException;
 import com.vaadin.terminal.PaintTarget;
 import com.vaadin.terminal.StreamVariable.StreamingProgressEvent;
-import com.vaadin.terminal.gwt.client.ui.UploadConnector;
 import com.vaadin.terminal.gwt.server.NoInputStreamException;
 import com.vaadin.terminal.gwt.server.NoOutputStreamException;
-import com.vaadin.ui.ClientWidget.LoadStyle;
 
 /**
  * Component for uploading files from client to server.
@@ -61,7 +59,6 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(value = UploadConnector.class, loadStyle = LoadStyle.LAZY)
 public class Upload extends AbstractComponent implements Component.Focusable {
 
     /**
index b067490406fd382462750d6461e53b573ee93333..a04d052d98e462d667e172e430c78c47f4329d27 100644 (file)
@@ -3,9 +3,6 @@
  */
 package com.vaadin.ui;
 
-import com.vaadin.terminal.gwt.client.ui.VerticalLayoutConnector;
-import com.vaadin.ui.ClientWidget.LoadStyle;
-
 /**
  * Vertical layout
  * 
@@ -19,7 +16,6 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
  * @since 5.3
  */
 @SuppressWarnings("serial")
-@ClientWidget(value = VerticalLayoutConnector.class, loadStyle = LoadStyle.EAGER)
 public class VerticalLayout extends AbstractOrderedLayout {
 
     public VerticalLayout() {
index 6cfde788b04ffb0d056389698301793bdf959985..7c4a523ba431f8bf899f10624df30db1d0d1a933 100644 (file)
@@ -3,8 +3,6 @@
  */
 package com.vaadin.ui;
 
-import com.vaadin.terminal.gwt.client.ui.VerticalSplitPanelConnector;
-import com.vaadin.ui.ClientWidget.LoadStyle;
 
 /**
  * A vertical split panel contains two components and lays them vertically. The
@@ -23,7 +21,6 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
  * </pre>
  * 
  */
-@ClientWidget(value = VerticalSplitPanelConnector.class, loadStyle = LoadStyle.EAGER)
 public class VerticalSplitPanel extends AbstractSplitPanel {
 
     public VerticalSplitPanel() {
index 2fc7cbc87087d387bd2a1e14ae8f9fd0f097df64..e3eae78988ff243c8241d88e4f118192367c5ba8 100644 (file)
@@ -30,7 +30,6 @@ import com.vaadin.terminal.gwt.client.ui.VideoConnector;
  * @author Vaadin Ltd
  * @since 6.7.0
  */
-@ClientWidget(VideoConnector.class)
 public class Video extends AbstractMedia {
 
     private Resource poster;
index ceda9a544b7c6b88cacefab57698d7622f8f77fd..1ac9839f4cfc9fd25847f763932f482c71d5a629 100644 (file)
@@ -74,7 +74,6 @@ import com.vaadin.terminal.gwt.client.ui.WindowConnector.WindowState;
  * @since 3.0
  */
 @SuppressWarnings("serial")
-@ClientWidget(WindowConnector.class)
 public class Window extends Panel implements FocusNotifier, BlurNotifier {
 
     /**
index 685a71ad2a561da70787270b4706200bb4734a79..2b38a3438e581c5f382575efdb0fd3dae2d21316 100644 (file)
@@ -9,7 +9,6 @@ import com.vaadin.event.dd.TargetDetails;
 import com.vaadin.event.dd.acceptcriteria.AcceptAll;
 import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
 import com.vaadin.ui.AbstractComponent;
-import com.vaadin.ui.ClientWidget;
 import com.vaadin.ui.Component;
 import com.vaadin.ui.CssLayout;
 import com.vaadin.ui.CustomComponent;
@@ -38,7 +37,6 @@ public class CustomDDImplementation extends CustomComponent {
      * Check the @ClientWidget
      * 
      */
-    @ClientWidget(MyDropTargetConnector.class)
     class MyDropTarget extends AbstractComponent implements DropTarget {
         public DropHandler getDropHandler() {
             return new DropHandler() {
@@ -76,7 +74,6 @@ public class CustomDDImplementation extends CustomComponent {
      * operations that are controlled via server side api.
      * 
      */
-    @ClientWidget(MyDragSourceConnector.class)
     public class MyDragSource extends AbstractComponent implements Component {
 
     }
index 025a226f720ba239e25b2f1dbcac07e1c5c216dc..05698ec195a4685c2dc43714aeb31ab2d7aef356 100644 (file)
@@ -8,7 +8,10 @@ import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
+import com.vaadin.terminal.gwt.client.ui.Component;
+import com.vaadin.tests.dd.CustomDDImplementation.MyDragSource;
 
+@Component(MyDragSource.class)
 public class MyDragSourceConnector extends AbstractComponentConnector {
 
     @Override
index dac08039ba3de1f714214f5fd1e5db1def1d2b32..648d5d0430c68eecb5875995f79bb6a36db050b6 100644 (file)
@@ -9,6 +9,10 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
 
+import com.vaadin.terminal.gwt.client.ui.Component;
+import com.vaadin.tests.dd.CustomDDImplementation.MyDropTarget;
+
+@Component(MyDropTarget.class)
 public class MyDropTargetConnector extends AbstractComponentConnector {
 
     @Override