aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2012-04-02 22:54:24 +0300
committerArtur Signell <artur@vaadin.com>2012-04-05 00:08:21 +0300
commit8079a7d0148a96d1048904c4b4eba25708a22a15 (patch)
treec9c99d33949e6bd59f2ba6ab1d8e789bf78ac54d
parent56c932f02679d525da5a1ec3de3669a0482456ad (diff)
downloadvaadin-framework-8079a7d0148a96d1048904c4b4eba25708a22a15.tar.gz
vaadin-framework-8079a7d0148a96d1048904c4b4eba25708a22a15.zip
Simplified Rpc registration on server side (#8591)
-rw-r--r--src/com/vaadin/ui/AbsoluteLayout.java2
-rw-r--r--src/com/vaadin/ui/AbstractComponent.java24
-rw-r--r--src/com/vaadin/ui/AbstractOrderedLayout.java2
-rw-r--r--src/com/vaadin/ui/AbstractSplitPanel.java2
-rw-r--r--src/com/vaadin/ui/Button.java2
-rw-r--r--src/com/vaadin/ui/CssLayout.java2
-rw-r--r--src/com/vaadin/ui/Embedded.java2
-rw-r--r--src/com/vaadin/ui/GridLayout.java2
-rw-r--r--src/com/vaadin/ui/Panel.java2
-rw-r--r--src/com/vaadin/ui/Root.java2
-rw-r--r--src/com/vaadin/ui/Window.java2
11 files changed, 32 insertions, 12 deletions
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,13 +1615,33 @@ 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.
*
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<Component> components = new LinkedList<Component>();
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();
}