diff options
author | Artur Signell <artur@vaadin.com> | 2012-04-03 00:08:53 +0300 |
---|---|---|
committer | Artur Signell <artur@vaadin.com> | 2012-04-05 00:08:23 +0300 |
commit | dab7c9fa82c4d9301e00e1c24e46890fa130c7e5 (patch) | |
tree | 129cb1c35402fcb3bd25e126d17936d8c6b30552 /src/com | |
parent | 8079a7d0148a96d1048904c4b4eba25708a22a15 (diff) | |
download | vaadin-framework-dab7c9fa82c4d9301e00e1c24e46890fa130c7e5.tar.gz vaadin-framework-dab7c9fa82c4d9301e00e1c24e46890fa130c7e5.zip |
Generator to ease initialization of client to server rpc proxies
Diffstat (limited to 'src/com')
15 files changed, 207 insertions, 42 deletions
diff --git a/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml b/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml index db273271e9..854464f1ee 100644 --- a/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml +++ b/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml @@ -54,6 +54,13 @@ 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 index 0000000000..7742d82441 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/communication/RpcProxy.java @@ -0,0 +1,34 @@ +package com.vaadin.terminal.gwt.client.communication;
+
+import com.google.gwt.core.client.GWT;
+import com.vaadin.terminal.gwt.client.ServerConnector;
+
+/**
+ * Class for creating proxy instances for Client to Server RPC.
+ *
+ * @since 7.0
+ */
+public class RpcProxy {
+
+ private static RpcProxyCreator impl = GWT.create(RpcProxyCreator.class);
+
+ /**
+ * Create a proxy class for the given Rpc interface and assign it to the
+ * given connector.
+ *
+ * @param rpcInterface
+ * The rpc interface to construct a proxy for
+ * @param connector
+ * The connector this proxy is connected to
+ * @return A proxy class used for calling Rpc methods.
+ */
+ public static <T extends ServerRpc> T create(Class<T> rpcInterface,
+ ServerConnector connector) {
+ return impl.create(rpcInterface, connector);
+ }
+
+ public interface RpcProxyCreator {
+ <T extends ServerRpc> T create(Class<T> rpcInterface,
+ ServerConnector connector);
+ }
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java index c600cf1500..72386400fe 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java @@ -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 diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java index cc357cf772..78a6ce889b 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java @@ -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()); } diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java index e58dce5223..046767a88d 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java @@ -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); } diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java index 65018aaadf..827490524a 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java @@ -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(); diff --git a/src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java b/src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java index 1549aa873d..07d62a10e7 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java @@ -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 diff --git a/src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java index 8bf14fdbdb..b45e238825 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java @@ -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 diff --git a/src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java b/src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java index bd8a242c67..14fe7bd744 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java @@ -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 diff --git a/src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java index 06e61bf5e9..73dd291f42 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java @@ -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); } diff --git a/src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java b/src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java index 1790a42b21..144b5eb391 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java @@ -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 diff --git a/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java index 4dc4098c14..89219f5be8 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java @@ -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(); diff --git a/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java b/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java index 7db14d73f0..3cff41dbd3 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java @@ -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 diff --git a/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java b/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java index 8c824b89a9..811b00d929 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java @@ -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 index 0000000000..ad4dd8a3c8 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyCreatorGenerator.java @@ -0,0 +1,130 @@ +package com.vaadin.terminal.gwt.widgetsetutils;
+
+import java.io.PrintWriter;
+import java.util.Date;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.ext.Generator;
+import com.google.gwt.core.ext.GeneratorContext;
+import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.TreeLogger.Type;
+import com.google.gwt.core.ext.UnableToCompleteException;
+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.gwt.client.ServerConnector;
+import com.vaadin.terminal.gwt.client.communication.RpcProxy.RpcProxyCreator;
+import com.vaadin.terminal.gwt.client.communication.ServerRpc;
+import com.vaadin.terminal.gwt.client.communication.ServerRpc.InitializableClientToServerRpc;
+
+public class RpcProxyCreatorGenerator extends Generator {
+
+ @Override
+ public String generate(TreeLogger logger, GeneratorContext ctx,
+ String requestedClassName) throws UnableToCompleteException {
+ logger.log(TreeLogger.DEBUG, "Running RpcProxyCreatorGenerator");
+ TypeOracle typeOracle = ctx.getTypeOracle();
+ assert (typeOracle != null);
+
+ JClassType requestedType = typeOracle.findType(requestedClassName);
+ String packageName = requestedType.getPackage().getName();
+ String className = requestedType.getSimpleSourceName() + "Impl";
+ if (requestedType == null) {
+ logger.log(TreeLogger.ERROR, "Unable to find metadata for type '"
+ + requestedClassName + "'", null);
+ throw new UnableToCompleteException();
+ }
+
+ createType(logger, ctx, packageName, className);
+ return packageName + "." + className;
+ }
+
+ private void createType(TreeLogger logger, GeneratorContext context,
+ String packageName, String className) {
+ ClassSourceFileComposerFactory composer = new ClassSourceFileComposerFactory(
+ packageName, className);
+
+ PrintWriter printWriter = context.tryCreate(logger,
+ composer.getCreatedPackage(),
+ composer.getCreatedClassShortName());
+ if (printWriter == null) {
+ // print writer is null if source code has already been generated
+ return;
+ }
+ Date date = new Date();
+ TypeOracle typeOracle = context.getTypeOracle();
+
+ // init composer, set class properties, create source writer
+ composer.addImport(GWT.class.getCanonicalName());
+ composer.addImport(ServerRpc.class.getCanonicalName());
+ composer.addImport(ServerConnector.class.getCanonicalName());
+ composer.addImport(InitializableClientToServerRpc.class
+ .getCanonicalName());
+ composer.addImport(IllegalArgumentException.class.getCanonicalName());
+ composer.addImplementedInterface(RpcProxyCreator.class
+ .getCanonicalName());
+
+ SourceWriter sourceWriter = composer.createSourceWriter(context,
+ printWriter);
+ sourceWriter.indent();
+
+ sourceWriter
+ .println("public <T extends ServerRpc> T create(Class<T> rpcInterface, ServerConnector connector) {");
+ sourceWriter.indent();
+
+ sourceWriter
+ .println("if (rpcInterface == null || connector == null) {");
+ sourceWriter.indent();
+ sourceWriter
+ .println("throw new IllegalArgumentException(\"RpcInterface and/or connector cannot be null\");");
+ sourceWriter.outdent();
+ sourceWriter
+ .println("} else if (connector.getConnectorId() == null) {");
+ sourceWriter.indent();
+ sourceWriter
+ .println("throw new IllegalArgumentException(\"Connector must be initialized before creating Rpc instances.\");");
+ sourceWriter.outdent();
+
+ JClassType initializableInterface = typeOracle.findType(ServerRpc.class
+ .getCanonicalName());
+
+ for (JClassType rpcType : initializableInterface.getSubtypes()) {
+ String rpcClassName = rpcType.getQualifiedSourceName();
+ if (InitializableClientToServerRpc.class.getCanonicalName().equals(
+ rpcClassName)) {
+ // InitializableClientToServerRpc is a special marker interface
+ // that should not get a generated class
+ continue;
+ }
+ sourceWriter.println("} else if (rpcInterface == " + rpcClassName
+ + ".class) {");
+ sourceWriter.indent();
+ sourceWriter.println(rpcClassName + " rpc = GWT.create("
+ + rpcClassName + ".class);");
+ sourceWriter
+ .println("((InitializableClientToServerRpc) rpc).initRpc(connector.getConnectorId(), connector.getConnection());");
+ sourceWriter.println("return (T) rpc;");
+ sourceWriter.outdent();
+ }
+
+ sourceWriter.println("} else {");
+ sourceWriter.indent();
+ sourceWriter
+ .println("throw new IllegalArgumentException(\"No RpcInterface of type \"+ rpcInterface.getName() + \" was found.\");");
+ sourceWriter.outdent();
+ // End of if
+ sourceWriter.println("}");
+ // End of method
+ sourceWriter.println("}");
+
+ // close generated class
+ sourceWriter.outdent();
+ sourceWriter.println("}");
+ // commit generated class
+ context.commit(logger, printWriter);
+ logger.log(Type.INFO, composer.getCreatedClassName() + " created in "
+ + (new Date().getTime() - date.getTime()) / 1000 + "seconds");
+
+ }
+}
|