]> source.dussan.org Git - vaadin-framework.git/commitdiff
Enable overriding which connectors are in the widgetset (#10710) 14/614/2
authorLeif Åstrand <leif@vaadin.com>
Thu, 10 Jan 2013 12:23:31 +0000 (14:23 +0200)
committerLeif Åstrand <leif@vaadin.com>
Thu, 10 Jan 2013 16:54:05 +0000 (18:54 +0200)
Change-Id: I98d09a1a9c1855e3385b6d48950a45c0388ba0bb

client-compiler/src/com/vaadin/server/widgetsetutils/ConnectorBundleLoaderFactory.java

index 09aae5b662c7d6c7d2f92b1551fd9a81eba5cba2..f8aa58606407a322507677fa1b69283131874773 100644 (file)
@@ -757,12 +757,9 @@ public class ConnectorBundleLoaderFactory extends Generator {
             connectorsByLoadStyle.put(loadStyle, new ArrayList<JClassType>());
         }
 
-        JClassType connectorType = typeOracle.getType(ServerConnector.class
-                .getName());
-        JClassType[] subtypes = connectorType.getSubtypes();
-
         // Find all types with a valid mapping
-        Collection<JClassType> selectedTypes = getMappedTypes(logger, subtypes);
+        Collection<JClassType> selectedTypes = getConnectorsForWidgetset(
+                logger, typeOracle);
 
         // Group by load style
         for (JClassType connectorSubtype : selectedTypes) {
@@ -816,8 +813,40 @@ public class ConnectorBundleLoaderFactory extends Generator {
         return bundles;
     }
 
-    private Collection<JClassType> getMappedTypes(TreeLogger logger,
-            JClassType[] types) throws UnableToCompleteException {
+    /**
+     * Returns the connector types that should be included in the widgetset.
+     * This method can be overridden to create a widgetset only containing
+     * selected connectors.
+     * <p>
+     * The default implementation finds all type implementing
+     * {@link ServerConnector} that have a @{@link Connect} annotation. It also
+     * checks that multiple connectors aren't connected to the same server-side
+     * class.
+     * 
+     * @param logger
+     *            the logger to which information can be logged
+     * @param typeOracle
+     *            the type oracle that can be used for finding types
+     * @return a collection of all the connector types that should be included
+     *         in the widgetset
+     * @throws UnableToCompleteException
+     *             if the operation fails
+     */
+    protected Collection<JClassType> getConnectorsForWidgetset(
+            TreeLogger logger, TypeOracle typeOracle)
+            throws UnableToCompleteException {
+        JClassType serverConnectorType;
+        try {
+            serverConnectorType = typeOracle.getType(ServerConnector.class
+                    .getName());
+        } catch (NotFoundException e) {
+            logger.log(Type.ERROR,
+                    "Can't find " + ServerConnector.class.getName());
+            throw new UnableToCompleteException();
+        }
+
+        JClassType[] types = serverConnectorType.getSubtypes();
+
         Map<String, JClassType> mappings = new HashMap<String, JClassType>();
 
         // Keep track of what has happened to avoid logging intermediate state