]> source.dussan.org Git - vaadin-framework.git/commitdiff
Simplified Rpc registration on server side (#8591)
authorArtur Signell <artur@vaadin.com>
Mon, 2 Apr 2012 19:54:24 +0000 (22:54 +0300)
committerArtur Signell <artur@vaadin.com>
Wed, 4 Apr 2012 21:08:21 +0000 (00:08 +0300)
src/com/vaadin/ui/AbsoluteLayout.java
src/com/vaadin/ui/AbstractComponent.java
src/com/vaadin/ui/AbstractOrderedLayout.java
src/com/vaadin/ui/AbstractSplitPanel.java
src/com/vaadin/ui/Button.java
src/com/vaadin/ui/CssLayout.java
src/com/vaadin/ui/Embedded.java
src/com/vaadin/ui/GridLayout.java
src/com/vaadin/ui/Panel.java
src/com/vaadin/ui/Root.java
src/com/vaadin/ui/Window.java

index 20ef7e38cc5c3bf4296cbdcb9a490d9b15010c78..42ad0c5e4c2a16809b683ed8a5e85b44ae4fd17f 100644 (file)
@@ -49,7 +49,7 @@ public class AbsoluteLayout extends AbstractLayout implements
      * Creates an AbsoluteLayout with full size.
      */
     public AbsoluteLayout() {
-        registerRpcImplementation(rpc, AbsoluteLayoutServerRPC.class);
+        registerRpc(rpc);
         setSizeFull();
     }
 
index 7acdc296e4ea6588deb06c89a2e1c035acc066db..189142519d05a31b07c19e949edc36b055608656 100644 (file)
@@ -1615,12 +1615,32 @@ public abstract class AbstractComponent implements Component, MethodEventSource
      *            RPC interface class for which the implementation should be
      *            registered
      */
-    protected <T> void registerRpcImplementation(T implementation,
-            Class<T> rpcInterfaceType) {
+    protected <T> void registerRpc(T implementation, Class<T> rpcInterfaceType) {
         rpcManagerMap.put(rpcInterfaceType, new ServerRpcManager<T>(this,
                 implementation, rpcInterfaceType));
     }
 
+    /**
+     * Registers an RPC interface implementation for this component.
+     * 
+     * A component can listen to multiple RPC interfaces, and subclasses can
+     * register additional implementations.
+     * 
+     * @since 7.0
+     * 
+     * @param implementation
+     *            RPC interface implementation. Also used to deduce the type.
+     */
+    protected <T> void registerRpc(T implementation) {
+        Class<?>[] interfaces = implementation.getClass().getInterfaces();
+        if (interfaces.length != 1) {
+            throw new RuntimeException(
+                    "Use registerRpc(T implementation, Class<T> rpcInterfaceType) if the Rpc implementation implements more than one interface");
+        }
+        Class<T> type = (Class<T>) interfaces[0];
+        registerRpc(implementation, type);
+    }
+
     /**
      * Returns an RPC proxy for a given server to client RPC interface for this
      * component.
index a70501d187674aab28a56514f4be2dd036222aac..4a1df6c9bc78f54f2e10a6869b03cb2ad203dc36 100644 (file)
@@ -55,7 +55,7 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
     private boolean spacing = false;
 
     public AbstractOrderedLayout() {
-        registerRpcImplementation(rpc, AbstractOrderedLayoutServerRPC.class);
+        registerRpc(rpc);
     }
 
     /**
index fae9ba732f39240f1fe25c5bc1b54ef19220c102..2e31436ee23a6c2936238e0b2b01594b1749873e 100644 (file)
@@ -47,7 +47,7 @@ public abstract class AbstractSplitPanel extends AbstractLayout {
     };
 
     public AbstractSplitPanel() {
-        registerRpcImplementation(rpc, AbstractSplitPanelRPC.class);
+        registerRpc(rpc);
         setSplitPosition(50, Unit.PERCENTAGE, false);
     }
 
index daa7e20ca73a8e05e60b59f57fc01e265c183598..7deb0486554a0dd35c03f7f917722498239cdfdb 100644 (file)
@@ -54,7 +54,7 @@ public class Button extends AbstractComponent implements
      * Creates a new push button.
      */
     public Button() {
-        registerRpcImplementation(rpc, ButtonServerRpc.class);
+        registerRpc(rpc);
     }
 
     /**
index a0ff86e3be27581da2cdb7171885852687ef365e..ddee26f0c020d9333e05ca75cd70a504f0c11df8 100644 (file)
@@ -76,7 +76,7 @@ public class CssLayout extends AbstractLayout implements LayoutClickNotifier {
     protected LinkedList<Component> components = new LinkedList<Component>();
 
     public CssLayout() {
-        registerRpcImplementation(rpc, CssLayoutServerRPC.class);
+        registerRpc(rpc);
     }
 
     /**
index 688176fb3e541ffa461c7d864410150555dcbd6e..8d31e0060dc814a21247af2a957ea9c25446831d 100644 (file)
@@ -89,7 +89,7 @@ public class Embedded extends AbstractComponent {
      * Creates a new empty Embedded object.
      */
     public Embedded() {
-        registerRpcImplementation(rpc, EmbeddedServerRPC.class);
+        registerRpc(rpc);
     }
 
     /**
index 23497f758f14d88daf9ee30a69b8047f30b159e9..f3fd276d7fc1a2c7051b700c78670dfb46045aeb 100644 (file)
@@ -130,7 +130,7 @@ public class GridLayout extends AbstractLayout implements
     public GridLayout(int columns, int rows) {
         setColumns(columns);
         setRows(rows);
-        registerRpcImplementation(rpc, GridLayoutServerRPC.class);
+        registerRpc(rpc);
     }
 
     /**
index 763cfb8457ea077d2f93f88bd653fbc49bc5d257..26c7e63908f06cac75fdc61cf93c7b77e6421f20 100644 (file)
@@ -67,7 +67,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
      *            the content for the panel.
      */
     public Panel(ComponentContainer content) {
-        registerRpcImplementation(rpc, PanelServerRPC.class);
+        registerRpc(rpc);
         setContent(content);
         setWidth(100, Unit.PERCENTAGE);
         getState().setTabIndex(-1);
index 8181950fad2bd7079346956c20c579d6e4f01db4..32c40836c04b6e54029678441f9a9c407a27312b 100644 (file)
@@ -422,7 +422,7 @@ public abstract class Root extends AbstractComponentContainer implements
      * {@link VerticalLayout} with margins enabled as its content.
      */
     public Root() {
-        registerRpcImplementation(rpc, RootServerRPC.class);
+        registerRpc(rpc);
         setSizeFull();
     }
 
index 1ac9839f4cfc9fd25847f763932f482c71d5a629..aa49a36b55bc553f65e7d94fdc159f59e801ce4d 100644 (file)
@@ -149,7 +149,7 @@ public class Window extends Panel implements FocusNotifier, BlurNotifier {
      */
     public Window(String caption, ComponentContainer content) {
         super(caption, content);
-        registerRpcImplementation(rpc, WindowServerRPC.class);
+        registerRpc(rpc);
         setSizeUndefined();
     }