]> source.dussan.org Git - vaadin-framework.git/commitdiff
Generator to ease initialization of client to server rpc proxies
authorArtur Signell <artur@vaadin.com>
Mon, 2 Apr 2012 21:08:53 +0000 (00:08 +0300)
committerArtur Signell <artur@vaadin.com>
Wed, 4 Apr 2012 21:08:23 +0000 (00:08 +0300)
15 files changed:
src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml
src/com/vaadin/terminal/gwt/client/communication/RpcProxy.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java
src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java
src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java
src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java
src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java
src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java
src/com/vaadin/terminal/gwt/client/ui/RootConnector.java
src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java
src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyCreatorGenerator.java [new file with mode: 0644]

index db273271e9827ddc0e8e4b8d2c295a2903c02aee..854464f1eef6b4fa52a9650e439ffb601986f4e5 100644 (file)
                        class="com.vaadin.terminal.gwt.client.communication.ServerRpc" />
        </generate-with>
 
+       <!-- Generate client side proxies for client to server RPC interfaces -->
+       <generate-with
+               class="com.vaadin.terminal.gwt.widgetsetutils.RpcProxyCreatorGenerator">
+               <when-type-assignable
+                       class="com.vaadin.terminal.gwt.client.communication.RpcProxy.RpcProxyCreator" />
+       </generate-with>
+
        <!-- Generate client side RPC manager for server to client RPC -->
        <generate-with
                class="com.vaadin.terminal.gwt.widgetsetutils.RpcManagerGenerator">
diff --git a/src/com/vaadin/terminal/gwt/client/communication/RpcProxy.java b/src/com/vaadin/terminal/gwt/client/communication/RpcProxy.java
new file mode 100644 (file)
index 0000000..7742d82
--- /dev/null
@@ -0,0 +1,34 @@
+package com.vaadin.terminal.gwt.client.communication;\r
+\r
+import com.google.gwt.core.client.GWT;\r
+import com.vaadin.terminal.gwt.client.ServerConnector;\r
+\r
+/**\r
+ * Class for creating proxy instances for Client to Server RPC.\r
+ * \r
+ * @since 7.0\r
+ */\r
+public class RpcProxy {\r
+\r
+    private static RpcProxyCreator impl = GWT.create(RpcProxyCreator.class);\r
+\r
+    /**\r
+     * Create a proxy class for the given Rpc interface and assign it to the\r
+     * given connector.\r
+     * \r
+     * @param rpcInterface\r
+     *            The rpc interface to construct a proxy for\r
+     * @param connector\r
+     *            The connector this proxy is connected to\r
+     * @return A proxy class used for calling Rpc methods.\r
+     */\r
+    public static <T extends ServerRpc> T create(Class<T> rpcInterface,\r
+            ServerConnector connector) {\r
+        return impl.create(rpcInterface, connector);\r
+    }\r
+\r
+    public interface RpcProxyCreator {\r
+        <T extends ServerRpc> T create(Class<T> rpcInterface,\r
+                ServerConnector connector);\r
+    }\r
+}\r
index c600cf1500a27adbb28e8ebe99378d683f6ecdaf..72386400fe729fe10130b52f47bfe5ee632554d5 100644 (file)
@@ -15,6 +15,7 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.DirectionalManagedLayout;
 import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.terminal.gwt.client.communication.RpcProxy;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 import com.vaadin.terminal.gwt.client.ui.VAbsoluteLayout.AbsoluteWrapper;
 import com.vaadin.ui.AbsoluteLayout;
@@ -42,13 +43,12 @@ public class AbsoluteLayoutConnector extends
 
     };
 
-    private AbsoluteLayoutServerRPC rpc = GWT
-            .create(AbsoluteLayoutServerRPC.class);
+    private AbsoluteLayoutServerRPC rpc;
 
     @Override
     protected void init() {
         super.init();
-        initRPC(rpc);
+        rpc = RpcProxy.create(AbsoluteLayoutServerRPC.class, this);
     }
 
     @Override
index cc357cf77280096d641fd2ded7969078ff4e31c3..78a6ce889b28a543430200a8207e9905680767c3 100644 (file)
@@ -20,7 +20,6 @@ import com.vaadin.terminal.gwt.client.TooltipInfo;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.VConsole;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-import com.vaadin.terminal.gwt.client.communication.ServerRpc.InitializableClientToServerRpc;
 import com.vaadin.terminal.gwt.client.communication.SharedState;
 import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
 
@@ -357,20 +356,6 @@ public abstract class AbstractComponentConnector extends AbstractConnector
         this.state = (ComponentState) state;
     }
 
-    /**
-     * Initialize the given RPC proxy object so it is connected to this
-     * paintable.
-     * 
-     * @param clientToServerRpc
-     *            The RPC instance to initialize. Must have been created using
-     *            GWT.create().
-     */
-    protected <T extends ServerRpc> T initRPC(T clientToServerRpc) {
-        ((InitializableClientToServerRpc) clientToServerRpc).initRpc(
-                getConnectorId(), getConnection());
-        return clientToServerRpc;
-    }
-
     public LayoutManager getLayoutManager() {
         return LayoutManager.get(getConnection());
     }
index e58dce522373f05b678613889884dbc5e736f3a0..046767a88d529af457c21d510472d49cb1733aae 100644 (file)
@@ -5,7 +5,6 @@ package com.vaadin.terminal.gwt.client.ui;
 
 import java.util.List;
 
-import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.Style;
 import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.ui.Widget;
@@ -17,6 +16,7 @@ import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.Util;
 import com.vaadin.terminal.gwt.client.VCaption;
 import com.vaadin.terminal.gwt.client.ValueMap;
+import com.vaadin.terminal.gwt.client.communication.RpcProxy;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 import com.vaadin.terminal.gwt.client.ui.layout.ComponentConnectorLayoutSlot;
 import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot;
@@ -24,13 +24,12 @@ import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot;
 public abstract class AbstractOrderedLayoutConnector extends
         AbstractComponentContainerConnector implements DirectionalManagedLayout {
 
-    public interface AbstractOrderedLayoutServerRPC extends
-            LayoutClickRPC, ServerRpc {
+    public interface AbstractOrderedLayoutServerRPC extends LayoutClickRPC,
+            ServerRpc {
 
     }
 
-    AbstractOrderedLayoutServerRPC rpc = GWT
-            .create(AbstractOrderedLayoutServerRPC.class);
+    AbstractOrderedLayoutServerRPC rpc;
 
     private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler(
             this) {
@@ -50,7 +49,7 @@ public abstract class AbstractOrderedLayoutConnector extends
 
     @Override
     public void init() {
-        initRPC(rpc);
+        rpc = RpcProxy.create(AbstractOrderedLayoutServerRPC.class, this);
         getLayoutManager().registerDependency(this,
                 getWidget().spacingMeasureElement);
     }
index 65018aaadfa192f32a4d5dc420dcc43560f03076..827490524a34f9fa96870831f0920a6b304dc2d7 100644 (file)
@@ -19,6 +19,7 @@ import com.vaadin.terminal.gwt.client.ComponentState;
 import com.vaadin.terminal.gwt.client.Connector;
 import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangedEvent;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
+import com.vaadin.terminal.gwt.client.communication.RpcProxy;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
 import com.vaadin.terminal.gwt.client.ui.VAbstractSplitPanel.SplitterMoveHandler;
@@ -127,12 +128,12 @@ public abstract class AbstractSplitPanelConnector extends
 
     }
 
-    private AbstractSplitPanelRPC rpc = GWT.create(AbstractSplitPanelRPC.class);
+    private AbstractSplitPanelRPC rpc;
 
     @Override
     protected void init() {
         super.init();
-        initRPC(rpc);
+        rpc = RpcProxy.create(AbstractSplitPanelRPC.class, this);
         // TODO Remove
         getWidget().client = getConnection();
 
index 1549aa873d1f3a34befc494ec1dfb79969e93e87..07d62a10e785ece095666375abd98e3b1ef424e2 100644 (file)
@@ -12,6 +12,7 @@ import com.vaadin.terminal.gwt.client.ComponentState;
 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.RpcProxy;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
 import com.vaadin.ui.Button;
@@ -48,8 +49,8 @@ public class ButtonConnector extends AbstractComponentConnector {
     @Override
     public void init() {
         super.init();
-        ButtonServerRpc rpcProxy = GWT.create(ButtonServerRpc.class);
-        getWidget().buttonRpcProxy = initRPC(rpcProxy);
+        getWidget().buttonRpcProxy = RpcProxy.create(ButtonServerRpc.class,
+                this);
     }
 
     @Override
index 8bf14fdbdb51773d380d51cf674cb3a1d5034518..b45e238825eb755d0f8f0fd16ff5f4c344e5e784 100644 (file)
@@ -9,6 +9,7 @@ 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.terminal.gwt.client.communication.RpcProxy;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 import com.vaadin.ui.CssLayout;
 
@@ -33,12 +34,12 @@ public class CssLayoutConnector extends AbstractComponentContainerConnector {
 
     }
 
-    private CssLayoutServerRPC rpc = GWT.create(CssLayoutServerRPC.class);
+    private CssLayoutServerRPC rpc;
 
     @Override
     protected void init() {
         super.init();
-        initRPC(rpc);
+        rpc = RpcProxy.create(CssLayoutServerRPC.class, this);
     }
 
     @Override
index bd8a242c67c576bac128eb8e64063b1ca79cc680..14fe7bd74426a6bf090f984c90cc1d983f321f0c 100644 (file)
@@ -22,6 +22,7 @@ import com.vaadin.terminal.gwt.client.MouseEventDetails;
 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.RpcProxy;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 import com.vaadin.ui.Embedded;
 
@@ -33,12 +34,12 @@ public class EmbeddedConnector extends AbstractComponentConnector {
 
     public static final String ALTERNATE_TEXT = "alt";
 
-    EmbeddedServerRPC rpc = GWT.create(EmbeddedServerRPC.class);
+    EmbeddedServerRPC rpc;
 
     @Override
     protected void init() {
         super.init();
-        initRPC(rpc);
+        rpc = RpcProxy.create(EmbeddedServerRPC.class, this);
     }
 
     @Override
index 06e61bf5e9c2d6eedbee7b27d40b469e77d1d53f..73dd291f421dbd7697f5f6a67e2cb1307c7a10b5 100644 (file)
@@ -15,6 +15,7 @@ import com.vaadin.terminal.gwt.client.ConnectorMap;
 import com.vaadin.terminal.gwt.client.DirectionalManagedLayout;
 import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.VCaption;
+import com.vaadin.terminal.gwt.client.communication.RpcProxy;
 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;
@@ -43,11 +44,11 @@ public class GridLayoutConnector extends AbstractComponentContainerConnector
 
     }
 
-    private GridLayoutServerRPC rpc = GWT.create(GridLayoutServerRPC.class);
+    private GridLayoutServerRPC rpc;
 
     @Override
     public void init() {
-        initRPC(rpc);
+        rpc = RpcProxy.create(GridLayoutServerRPC.class, this);
         getLayoutManager().registerDependency(this,
                 getWidget().spacingMeasureElement);
     }
index 1790a42b214f6099eb8fd524f532ccdc0155ff5d..144b5eb391774850bf96416be306a4e98ea3c463 100644 (file)
@@ -10,6 +10,7 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection;
 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.communication.RpcProxy;
 import com.vaadin.terminal.gwt.client.ui.ButtonConnector.ButtonServerRpc;
 import com.vaadin.ui.NativeButton;
 
@@ -20,8 +21,8 @@ public class NativeButtonConnector extends AbstractComponentConnector {
     public void init() {
         super.init();
 
-        ButtonServerRpc rpcProxy = GWT.create(ButtonServerRpc.class);
-        getWidget().buttonRpcProxy = initRPC(rpcProxy);
+        getWidget().buttonRpcProxy = RpcProxy.create(ButtonServerRpc.class,
+                this);
     }
 
     @Override
index 4dc4098c14f335cc49c8bb6b5e2f3548ed030c4a..89219f5be8db761e0c2a75f83d3503695cef8cae 100644 (file)
@@ -16,6 +16,7 @@ import com.vaadin.terminal.gwt.client.LayoutManager;
 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.RpcProxy;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 import com.vaadin.ui.Panel;
 
@@ -70,11 +71,11 @@ public class PanelConnector extends AbstractComponentContainerConnector
 
     private Integer uidlScrollLeft;
 
-    private PanelServerRPC rpc = GWT.create(PanelServerRPC.class);
+    private PanelServerRPC rpc;
 
     @Override
     public void init() {
-        initRPC(rpc);
+        rpc = RpcProxy.create(PanelServerRPC.class, this);
         VPanel panel = getWidget();
         LayoutManager layoutManager = getLayoutManager();
 
index 7db14d73f01a956e6010ebcb72dc91237ab157fb..3cff41dbd30ae93a6d1bb960e3415dbbd4470484 100644 (file)
@@ -29,6 +29,7 @@ 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.VConsole;
+import com.vaadin.terminal.gwt.client.communication.RpcProxy;
 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;
@@ -42,7 +43,7 @@ public class RootConnector extends AbstractComponentContainerConnector {
 
     }
 
-    private RootServerRPC rpc = GWT.create(RootServerRPC.class);
+    private RootServerRPC rpc;
 
     private HandlerRegistration childStateChangeHandlerRegistration;
 
@@ -57,7 +58,7 @@ public class RootConnector extends AbstractComponentContainerConnector {
     @Override
     protected void init() {
         super.init();
-        initRPC(rpc);
+        rpc = RpcProxy.create(RootServerRPC.class, this);
     }
 
     @Override
index 8c824b89a97ce8566741402672d6537acc790bec..811b00d929a952fd6dac8fa1efa99871ef3666e7 100644 (file)
@@ -21,6 +21,7 @@ import com.vaadin.terminal.gwt.client.LayoutManager;
 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.RpcProxy;
 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;
@@ -45,7 +46,7 @@ public class WindowConnector extends AbstractComponentContainerConnector
         }
     };
 
-    private WindowServerRPC rpc = GWT.create(WindowServerRPC.class);
+    private WindowServerRPC rpc;
 
     @Override
     protected boolean delegateCaptionHandling() {
@@ -55,7 +56,8 @@ public class WindowConnector extends AbstractComponentContainerConnector
     @Override
     protected void init() {
         super.init();
-        initRPC(rpc);
+        rpc = RpcProxy.create(WindowServerRPC.class, this);
+
         getLayoutManager().registerDependency(this,
                 getWidget().contentPanel.getElement());
         getLayoutManager().registerDependency(this, getWidget().header);
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyCreatorGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyCreatorGenerator.java
new file mode 100644 (file)
index 0000000..ad4dd8a
--- /dev/null
@@ -0,0 +1,130 @@
+package com.vaadin.terminal.gwt.widgetsetutils;\r
+\r
+import java.io.PrintWriter;\r
+import java.util.Date;\r
+\r
+import com.google.gwt.core.client.GWT;\r
+import com.google.gwt.core.ext.Generator;\r
+import com.google.gwt.core.ext.GeneratorContext;\r
+import com.google.gwt.core.ext.TreeLogger;\r
+import com.google.gwt.core.ext.TreeLogger.Type;\r
+import com.google.gwt.core.ext.UnableToCompleteException;\r
+import com.google.gwt.core.ext.typeinfo.JClassType;\r
+import com.google.gwt.core.ext.typeinfo.TypeOracle;\r
+import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;\r
+import com.google.gwt.user.rebind.SourceWriter;\r
+import com.vaadin.terminal.gwt.client.ServerConnector;\r
+import com.vaadin.terminal.gwt.client.communication.RpcProxy.RpcProxyCreator;\r
+import com.vaadin.terminal.gwt.client.communication.ServerRpc;\r
+import com.vaadin.terminal.gwt.client.communication.ServerRpc.InitializableClientToServerRpc;\r
+\r
+public class RpcProxyCreatorGenerator extends Generator {\r
+\r
+    @Override\r
+    public String generate(TreeLogger logger, GeneratorContext ctx,\r
+            String requestedClassName) throws UnableToCompleteException {\r
+        logger.log(TreeLogger.DEBUG, "Running RpcProxyCreatorGenerator");\r
+        TypeOracle typeOracle = ctx.getTypeOracle();\r
+        assert (typeOracle != null);\r
+\r
+        JClassType requestedType = typeOracle.findType(requestedClassName);\r
+        String packageName = requestedType.getPackage().getName();\r
+        String className = requestedType.getSimpleSourceName() + "Impl";\r
+        if (requestedType == null) {\r
+            logger.log(TreeLogger.ERROR, "Unable to find metadata for type '"\r
+                    + requestedClassName + "'", null);\r
+            throw new UnableToCompleteException();\r
+        }\r
+\r
+        createType(logger, ctx, packageName, className);\r
+        return packageName + "." + className;\r
+    }\r
+\r
+    private void createType(TreeLogger logger, GeneratorContext context,\r
+            String packageName, String className) {\r
+        ClassSourceFileComposerFactory composer = new ClassSourceFileComposerFactory(\r
+                packageName, className);\r
+\r
+        PrintWriter printWriter = context.tryCreate(logger,\r
+                composer.getCreatedPackage(),\r
+                composer.getCreatedClassShortName());\r
+        if (printWriter == null) {\r
+            // print writer is null if source code has already been generated\r
+            return;\r
+        }\r
+        Date date = new Date();\r
+        TypeOracle typeOracle = context.getTypeOracle();\r
+\r
+        // init composer, set class properties, create source writer\r
+        composer.addImport(GWT.class.getCanonicalName());\r
+        composer.addImport(ServerRpc.class.getCanonicalName());\r
+        composer.addImport(ServerConnector.class.getCanonicalName());\r
+        composer.addImport(InitializableClientToServerRpc.class\r
+                .getCanonicalName());\r
+        composer.addImport(IllegalArgumentException.class.getCanonicalName());\r
+        composer.addImplementedInterface(RpcProxyCreator.class\r
+                .getCanonicalName());\r
+\r
+        SourceWriter sourceWriter = composer.createSourceWriter(context,\r
+                printWriter);\r
+        sourceWriter.indent();\r
+\r
+        sourceWriter\r
+                .println("public <T extends ServerRpc> T create(Class<T> rpcInterface, ServerConnector connector) {");\r
+        sourceWriter.indent();\r
+\r
+        sourceWriter\r
+                .println("if (rpcInterface == null || connector == null) {");\r
+        sourceWriter.indent();\r
+        sourceWriter\r
+                .println("throw new IllegalArgumentException(\"RpcInterface and/or connector cannot be null\");");\r
+        sourceWriter.outdent();\r
+        sourceWriter\r
+                .println("} else if (connector.getConnectorId() == null) {");\r
+        sourceWriter.indent();\r
+        sourceWriter\r
+                .println("throw new IllegalArgumentException(\"Connector must be initialized before creating Rpc instances.\");");\r
+        sourceWriter.outdent();\r
+\r
+        JClassType initializableInterface = typeOracle.findType(ServerRpc.class\r
+                .getCanonicalName());\r
+\r
+        for (JClassType rpcType : initializableInterface.getSubtypes()) {\r
+            String rpcClassName = rpcType.getQualifiedSourceName();\r
+            if (InitializableClientToServerRpc.class.getCanonicalName().equals(\r
+                    rpcClassName)) {\r
+                // InitializableClientToServerRpc is a special marker interface\r
+                // that should not get a generated class\r
+                continue;\r
+            }\r
+            sourceWriter.println("} else if (rpcInterface == " + rpcClassName\r
+                    + ".class) {");\r
+            sourceWriter.indent();\r
+            sourceWriter.println(rpcClassName + " rpc = GWT.create("\r
+                    + rpcClassName + ".class);");\r
+            sourceWriter\r
+                    .println("((InitializableClientToServerRpc) rpc).initRpc(connector.getConnectorId(), connector.getConnection());");\r
+            sourceWriter.println("return (T) rpc;");\r
+            sourceWriter.outdent();\r
+        }\r
+\r
+        sourceWriter.println("} else {");\r
+        sourceWriter.indent();\r
+        sourceWriter\r
+                .println("throw new IllegalArgumentException(\"No RpcInterface of type \"+ rpcInterface.getName() + \" was found.\");");\r
+        sourceWriter.outdent();\r
+        // End of if\r
+        sourceWriter.println("}");\r
+        // End of method\r
+        sourceWriter.println("}");\r
+\r
+        // close generated class\r
+        sourceWriter.outdent();\r
+        sourceWriter.println("}");\r
+        // commit generated class\r
+        context.commit(logger, printWriter);\r
+        logger.log(Type.INFO, composer.getCreatedClassName() + " created in "\r
+                + (new Date().getTime() - date.getTime()) / 1000 + "seconds");\r
+\r
+    }\r
+}\r