summaryrefslogtreecommitdiffstats
path: root/src/com/vaadin/terminal/JavaScriptCallbackHelper.java
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2012-06-14 21:18:49 +0300
committerLeif Åstrand <leif@vaadin.com>2012-06-14 21:18:49 +0300
commit72c0f66e2aa588acbb517e6d9b482c7a75faf9f1 (patch)
tree52f6a4f9febfe344d5fcb7e5a3eeb18934d0f427 /src/com/vaadin/terminal/JavaScriptCallbackHelper.java
parent755adc2731383e6e04ddfa5bee04b6ed6feaf243 (diff)
downloadvaadin-framework-72c0f66e2aa588acbb517e6d9b482c7a75faf9f1.tar.gz
vaadin-framework-72c0f66e2aa588acbb517e6d9b482c7a75faf9f1.zip
Use callbacks directly as fields in connector object (#8888)
Diffstat (limited to 'src/com/vaadin/terminal/JavaScriptCallbackHelper.java')
-rw-r--r--src/com/vaadin/terminal/JavaScriptCallbackHelper.java17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/com/vaadin/terminal/JavaScriptCallbackHelper.java b/src/com/vaadin/terminal/JavaScriptCallbackHelper.java
index 5ea5e56255..c1da8b36ba 100644
--- a/src/com/vaadin/terminal/JavaScriptCallbackHelper.java
+++ b/src/com/vaadin/terminal/JavaScriptCallbackHelper.java
@@ -11,6 +11,7 @@ import java.util.Map;
import com.vaadin.external.json.JSONArray;
import com.vaadin.external.json.JSONException;
+import com.vaadin.terminal.gwt.client.JavaScriptConnectorHelper.JavaScriptConnectorState;
import com.vaadin.tools.ReflectTools;
import com.vaadin.ui.JavaScript.JavaScriptCallbackRpc;
import com.vaadin.ui.JavaScriptCallback;
@@ -31,9 +32,19 @@ public class JavaScriptCallbackHelper {
public void registerCallback(String functionName,
JavaScriptCallback javaScriptCallback) {
callbacks.put(functionName, javaScriptCallback);
+ JavaScriptConnectorState state = getConnectorState();
+ if (state.getCallbackNames().add(functionName)) {
+ connector.requestRepaint();
+ }
ensureRpc();
}
+ private JavaScriptConnectorState getConnectorState() {
+ JavaScriptConnectorState state = (JavaScriptConnectorState) connector
+ .getState();
+ return state;
+ }
+
private void ensureRpc() {
if (javascriptCallbackRpc == null) {
javascriptCallbackRpc = new JavaScriptCallbackRpc() {
@@ -51,6 +62,12 @@ public class JavaScriptCallbackHelper {
}
public void invokeCallback(String name, Object... arguments) {
+ if (callbacks.containsKey(name)) {
+ throw new IllegalStateException(
+ "Can't call callback "
+ + name
+ + " on the client because a callback with the same name is registered on the server.");
+ }
JSONArray args = new JSONArray(Arrays.asList(arguments));
connector.addMethodInvocationToQueue(
JavaScriptCallbackRpc.class.getName(), CALL_METHOD,