]> source.dussan.org Git - vaadin-framework.git/commitdiff
Change api to use callback instead or rpc for js callbacks (#8888)
authorLeif Åstrand <leif@vaadin.com>
Tue, 12 Jun 2012 10:03:22 +0000 (13:03 +0300)
committerLeif Åstrand <leif@vaadin.com>
Tue, 12 Jun 2012 10:03:22 +0000 (13:03 +0300)
Also change JavascriptCallback.call to throw JSONException

src/com/vaadin/terminal/AbstractJavascriptExtension.java
src/com/vaadin/terminal/JavascriptRpcHelper.java
src/com/vaadin/terminal/gwt/client/JavascriptConnectorHelper.java
src/com/vaadin/ui/AbstractJavascriptComponent.java
src/com/vaadin/ui/JavascriptCallback.java
src/com/vaadin/ui/JavascriptManager.java
tests/testbench/com/vaadin/tests/features/JavascriptManagerTest.java

index 20e3aa5bfc26ed5f24f956c8f37aa9eb860531c0..e741e2af1e0ff68952618daef6abc7c3edbab8fe 100644 (file)
@@ -9,12 +9,12 @@ import com.vaadin.ui.JavascriptCallback;
 public class AbstractJavascriptExtension extends AbstractExtension {
     private JavascriptRpcHelper rpcHelper = new JavascriptRpcHelper(this);
 
-    protected void registerRpc(JavascriptCallback javascriptCallback,
-            String functionName) {
-        rpcHelper.registerRpc(javascriptCallback, functionName);
+    protected void registerCallback(String functionName,
+            JavascriptCallback javascriptCallback) {
+        rpcHelper.registerCallback(functionName, javascriptCallback);
     }
 
-    protected void callRpcFunction(String name, Object... arguments) {
-        rpcHelper.callRpcFunction(name, arguments);
+    protected void invokeCallback(String name, Object... arguments) {
+        rpcHelper.invokeCallback(name, arguments);
     }
 }
index effab05412af956c6eff05d40d05fed852c315f5..b5664628334f6d543be7683c803ff29113679d25 100644 (file)
@@ -10,6 +10,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import com.vaadin.external.json.JSONArray;
+import com.vaadin.external.json.JSONException;
 import com.vaadin.tools.ReflectTools;
 import com.vaadin.ui.JavascriptCallback;
 import com.vaadin.ui.JavascriptManager.JavascriptCallbackRpc;
@@ -27,8 +28,8 @@ public class JavascriptRpcHelper {
         this.connector = connector;
     }
 
-    public void registerRpc(JavascriptCallback javascriptCallback,
-            String functionName) {
+    public void registerCallback(String functionName,
+            JavascriptCallback javascriptCallback) {
         callbacks.put(functionName, javascriptCallback);
         ensureRpc();
     }
@@ -38,14 +39,18 @@ public class JavascriptRpcHelper {
             javascriptCallbackRpc = new JavascriptCallbackRpc() {
                 public void call(String name, JSONArray arguments) {
                     JavascriptCallback callback = callbacks.get(name);
-                    callback.call(arguments);
+                    try {
+                        callback.call(arguments);
+                    } catch (JSONException e) {
+                        throw new IllegalArgumentException(e);
+                    }
                 }
             };
             connector.registerRpc(javascriptCallbackRpc);
         }
     }
 
-    public void callRpcFunction(String name, Object... arguments) {
+    public void invokeCallback(String name, Object... arguments) {
         JSONArray args = new JSONArray(Arrays.asList(arguments));
         connector.addMethodInvocationToQueue(
                 JavascriptCallbackRpc.class.getName(), CALL_METHOD,
index f784704036f43a150245a19e694b49371edfe3c3..c635c3dc2ed6ffdb7f19b020a4de27c1cd8076d7 100644 (file)
@@ -103,17 +103,24 @@ public class JavascriptConnectorHelper {
             },
             'getRpcProxyFunction': function(iface, method) {
                     return $entry(function() {
-                        if (method == undefined) {
-                            var args = [iface, Array.prototype.slice.call(arguments, 0)];
-                            iface = "com.vaadin.ui.JavascriptManager$JavascriptCallbackRpc";
-                            method = "call";
-                        } else {
-                            var args = arguments;
-                        }
-                        
-                        h.@com.vaadin.terminal.gwt.client.JavascriptConnectorHelper::fireRpc(Ljava/lang/String;Ljava/lang/String;Lcom/google/gwt/core/client/JsArray;)(iface, method, args);
+                        h.@com.vaadin.terminal.gwt.client.JavascriptConnectorHelper::fireRpc(Ljava/lang/String;Ljava/lang/String;Lcom/google/gwt/core/client/JsArray;)(iface, method, arguments);
                     });
             },
+            'getCallback': function(name) {
+                return $entry(function() {
+                    var args = [name, Array.prototype.slice.call(arguments, 0)];
+                    var iface = "com.vaadin.ui.JavascriptManager$JavascriptCallbackRpc";
+                    var method = "call";
+                    h.@com.vaadin.terminal.gwt.client.JavascriptConnectorHelper::fireRpc(Ljava/lang/String;Ljava/lang/String;Lcom/google/gwt/core/client/JsArray;)(iface, method, args);
+                });
+            },
+            'registerCallback': function(name, callback) {
+                //TODO maintain separate map
+                if (!registeredRpc[name]) {
+                    registeredRpc[name] = [];
+                }
+                registeredRpc[name].push(rpcHandler);
+            },
             'registerRpc': function(iface, rpcHandler) {
                 if (!registeredRpc[iface]) {
                     registeredRpc[iface] = [];
index 19adb308e99426d2dfc28c02e29e210e3a295bab..0a26c10239cf9abd4094ef53b1ac0d55595f6150 100644 (file)
@@ -8,12 +8,12 @@ import com.vaadin.terminal.JavascriptRpcHelper;
 public class AbstractJavascriptComponent extends AbstractComponent {
     private JavascriptRpcHelper rpcHelper = new JavascriptRpcHelper(this);
 
-    protected void registerRpc(JavascriptCallback javascriptCallback,
-            String functionName) {
-        rpcHelper.registerRpc(javascriptCallback, functionName);
+    protected void registerCallback(String functionName,
+            JavascriptCallback javascriptCallback) {
+        rpcHelper.registerCallback(functionName, javascriptCallback);
     }
 
-    protected void callRpcFunction(String name, Object... arguments) {
-        rpcHelper.callRpcFunction(name, arguments);
+    protected void invokeCallback(String name, Object... arguments) {
+        rpcHelper.invokeCallback(name, arguments);
     }
 }
index 4a34167256ab557bb076d483b1e6586021a5820c..89700b3faf0a1d9ee06d0763e6e279aefe862ab5 100644 (file)
@@ -7,7 +7,8 @@ package com.vaadin.ui;
 import java.io.Serializable;
 
 import com.vaadin.external.json.JSONArray;
+import com.vaadin.external.json.JSONException;
 
 public interface JavascriptCallback extends Serializable {
-    public void call(JSONArray arguments);
+    public void call(JSONArray arguments) throws JSONException;
 }
index e52962f17739e1f9f0285be3abbf7c23be3d0f33..72295dce2b5ef8b5ab93d057be796f413a843f9c 100644 (file)
@@ -8,6 +8,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import com.vaadin.external.json.JSONArray;
+import com.vaadin.external.json.JSONException;
 import com.vaadin.terminal.AbstractExtension;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 import com.vaadin.terminal.gwt.client.extensions.javascriptmanager.JavascriptManagerState;
@@ -25,8 +26,12 @@ public class JavascriptManager extends AbstractExtension {
         registerRpc(new JavascriptCallbackRpc() {
             public void call(String name, JSONArray arguments) {
                 JavascriptCallback callback = callbacks.get(name);
-                // TODO error handling
-                callback.call(arguments);
+                // TODO handle situation if name is not registered
+                try {
+                    callback.call(arguments);
+                } catch (JSONException e) {
+                    throw new IllegalArgumentException(e);
+                }
             }
         });
     }
index 18abf9f8b8568df31ac5d4206d66550ce5a4f042..92f809569862d474df0002af9071473d7865a356 100644 (file)
@@ -20,18 +20,14 @@ public class JavascriptManagerTest extends AbstractTestRoot {
     protected void setup(WrappedRequest request) {
         addComponent(log);
         getJavascriptManager().addCallback("testing", new JavascriptCallback() {
-            public void call(JSONArray arguments) {
-                try {
-                    log.log("Got " + arguments.length() + " arguments");
-                    log.log("Argument 1 as a number: " + arguments.getInt(0));
-                    log.log("Argument 2 as a string: " + arguments.getString(1));
-                    log.log("Argument 3.p as a boolean: "
-                            + arguments.getJSONObject(2).getBoolean("p"));
-                    log.log("Argument 4 is JSONObject.NULL: "
-                            + (arguments.get(3) == JSONObject.NULL));
-                } catch (JSONException e) {
-                    throw new RuntimeException(e);
-                }
+            public void call(JSONArray arguments) throws JSONException {
+                log.log("Got " + arguments.length() + " arguments");
+                log.log("Argument 1 as a number: " + arguments.getInt(0));
+                log.log("Argument 2 as a string: " + arguments.getString(1));
+                log.log("Argument 3.p as a boolean: "
+                        + arguments.getJSONObject(2).getBoolean("p"));
+                log.log("Argument 4 is JSONObject.NULL: "
+                        + (arguments.get(3) == JSONObject.NULL));
             }
         });
         executeJavaScript("window.testing(42, 'text', {p: true}, null)");