* Creates an AbsoluteLayout with full size.
*/
public AbsoluteLayout() {
- registerRpcImplementation(rpc, AbsoluteLayoutServerRPC.class);
+ registerRpc(rpc);
setSizeFull();
}
* 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.
private boolean spacing = false;
public AbstractOrderedLayout() {
- registerRpcImplementation(rpc, AbstractOrderedLayoutServerRPC.class);
+ registerRpc(rpc);
}
/**
};
public AbstractSplitPanel() {
- registerRpcImplementation(rpc, AbstractSplitPanelRPC.class);
+ registerRpc(rpc);
setSplitPosition(50, Unit.PERCENTAGE, false);
}
* Creates a new push button.
*/
public Button() {
- registerRpcImplementation(rpc, ButtonServerRpc.class);
+ registerRpc(rpc);
}
/**
protected LinkedList<Component> components = new LinkedList<Component>();
public CssLayout() {
- registerRpcImplementation(rpc, CssLayoutServerRPC.class);
+ registerRpc(rpc);
}
/**
* Creates a new empty Embedded object.
*/
public Embedded() {
- registerRpcImplementation(rpc, EmbeddedServerRPC.class);
+ registerRpc(rpc);
}
/**
public GridLayout(int columns, int rows) {
setColumns(columns);
setRows(rows);
- registerRpcImplementation(rpc, GridLayoutServerRPC.class);
+ registerRpc(rpc);
}
/**
* the content for the panel.
*/
public Panel(ComponentContainer content) {
- registerRpcImplementation(rpc, PanelServerRPC.class);
+ registerRpc(rpc);
setContent(content);
setWidth(100, Unit.PERCENTAGE);
getState().setTabIndex(-1);
* {@link VerticalLayout} with margins enabled as its content.
*/
public Root() {
- registerRpcImplementation(rpc, RootServerRPC.class);
+ registerRpc(rpc);
setSizeFull();
}
*/
public Window(String caption, ComponentContainer content) {
super(caption, content);
- registerRpcImplementation(rpc, WindowServerRPC.class);
+ registerRpc(rpc);
setSizeUndefined();
}