From: Artur Signell Date: Mon, 2 Apr 2012 19:54:24 +0000 (+0300) Subject: Simplified Rpc registration on server side (#8591) X-Git-Tag: 7.0.0.alpha2~153 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8079a7d0148a96d1048904c4b4eba25708a22a15;p=vaadin-framework.git Simplified Rpc registration on server side (#8591) --- diff --git a/src/com/vaadin/ui/AbsoluteLayout.java b/src/com/vaadin/ui/AbsoluteLayout.java index 20ef7e38cc..42ad0c5e4c 100644 --- a/src/com/vaadin/ui/AbsoluteLayout.java +++ b/src/com/vaadin/ui/AbsoluteLayout.java @@ -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(); } diff --git a/src/com/vaadin/ui/AbstractComponent.java b/src/com/vaadin/ui/AbstractComponent.java index 7acdc296e4..189142519d 100644 --- a/src/com/vaadin/ui/AbstractComponent.java +++ b/src/com/vaadin/ui/AbstractComponent.java @@ -1615,12 +1615,32 @@ public abstract class AbstractComponent implements Component, MethodEventSource * RPC interface class for which the implementation should be * registered */ - protected void registerRpcImplementation(T implementation, - Class rpcInterfaceType) { + protected void registerRpc(T implementation, Class rpcInterfaceType) { rpcManagerMap.put(rpcInterfaceType, new ServerRpcManager(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 void registerRpc(T implementation) { + Class[] interfaces = implementation.getClass().getInterfaces(); + if (interfaces.length != 1) { + throw new RuntimeException( + "Use registerRpc(T implementation, Class rpcInterfaceType) if the Rpc implementation implements more than one interface"); + } + Class type = (Class) interfaces[0]; + registerRpc(implementation, type); + } + /** * Returns an RPC proxy for a given server to client RPC interface for this * component. diff --git a/src/com/vaadin/ui/AbstractOrderedLayout.java b/src/com/vaadin/ui/AbstractOrderedLayout.java index a70501d187..4a1df6c9bc 100644 --- a/src/com/vaadin/ui/AbstractOrderedLayout.java +++ b/src/com/vaadin/ui/AbstractOrderedLayout.java @@ -55,7 +55,7 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements private boolean spacing = false; public AbstractOrderedLayout() { - registerRpcImplementation(rpc, AbstractOrderedLayoutServerRPC.class); + registerRpc(rpc); } /** diff --git a/src/com/vaadin/ui/AbstractSplitPanel.java b/src/com/vaadin/ui/AbstractSplitPanel.java index fae9ba732f..2e31436ee2 100644 --- a/src/com/vaadin/ui/AbstractSplitPanel.java +++ b/src/com/vaadin/ui/AbstractSplitPanel.java @@ -47,7 +47,7 @@ public abstract class AbstractSplitPanel extends AbstractLayout { }; public AbstractSplitPanel() { - registerRpcImplementation(rpc, AbstractSplitPanelRPC.class); + registerRpc(rpc); setSplitPosition(50, Unit.PERCENTAGE, false); } diff --git a/src/com/vaadin/ui/Button.java b/src/com/vaadin/ui/Button.java index daa7e20ca7..7deb048655 100644 --- a/src/com/vaadin/ui/Button.java +++ b/src/com/vaadin/ui/Button.java @@ -54,7 +54,7 @@ public class Button extends AbstractComponent implements * Creates a new push button. */ public Button() { - registerRpcImplementation(rpc, ButtonServerRpc.class); + registerRpc(rpc); } /** diff --git a/src/com/vaadin/ui/CssLayout.java b/src/com/vaadin/ui/CssLayout.java index a0ff86e3be..ddee26f0c0 100644 --- a/src/com/vaadin/ui/CssLayout.java +++ b/src/com/vaadin/ui/CssLayout.java @@ -76,7 +76,7 @@ public class CssLayout extends AbstractLayout implements LayoutClickNotifier { protected LinkedList components = new LinkedList(); public CssLayout() { - registerRpcImplementation(rpc, CssLayoutServerRPC.class); + registerRpc(rpc); } /** diff --git a/src/com/vaadin/ui/Embedded.java b/src/com/vaadin/ui/Embedded.java index 688176fb3e..8d31e0060d 100644 --- a/src/com/vaadin/ui/Embedded.java +++ b/src/com/vaadin/ui/Embedded.java @@ -89,7 +89,7 @@ public class Embedded extends AbstractComponent { * Creates a new empty Embedded object. */ public Embedded() { - registerRpcImplementation(rpc, EmbeddedServerRPC.class); + registerRpc(rpc); } /** diff --git a/src/com/vaadin/ui/GridLayout.java b/src/com/vaadin/ui/GridLayout.java index 23497f758f..f3fd276d7f 100644 --- a/src/com/vaadin/ui/GridLayout.java +++ b/src/com/vaadin/ui/GridLayout.java @@ -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); } /** diff --git a/src/com/vaadin/ui/Panel.java b/src/com/vaadin/ui/Panel.java index 763cfb8457..26c7e63908 100644 --- a/src/com/vaadin/ui/Panel.java +++ b/src/com/vaadin/ui/Panel.java @@ -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); diff --git a/src/com/vaadin/ui/Root.java b/src/com/vaadin/ui/Root.java index 8181950fad..32c40836c0 100644 --- a/src/com/vaadin/ui/Root.java +++ b/src/com/vaadin/ui/Root.java @@ -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(); } diff --git a/src/com/vaadin/ui/Window.java b/src/com/vaadin/ui/Window.java index 1ac9839f4c..aa49a36b55 100644 --- a/src/com/vaadin/ui/Window.java +++ b/src/com/vaadin/ui/Window.java @@ -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(); }