aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/vaadin/ui/JavascriptManager.java
diff options
context:
space:
mode:
authorJohannes Dahlström <johannesd@vaadin.com>2012-06-13 17:46:09 +0300
committerJohannes Dahlström <johannesd@vaadin.com>2012-06-13 17:46:09 +0300
commit52d06a13b9e20cb752a21413e15adc250daa5e1c (patch)
treeac0e5878490d802960d9463354721ce1820b4aa8 /src/com/vaadin/ui/JavascriptManager.java
parentde5fd8e0aefa0c43e2b0fe724102bca92eeaaf96 (diff)
parentadcf03c1b5f05b38cda25819b732745c1a4859fc (diff)
downloadvaadin-framework-52d06a13b9e20cb752a21413e15adc250daa5e1c.tar.gz
vaadin-framework-52d06a13b9e20cb752a21413e15adc250daa5e1c.zip
Merge remote-tracking branch 'origin/master'
Conflicts: src/com/vaadin/terminal/gwt/server/DragAndDropService.java
Diffstat (limited to 'src/com/vaadin/ui/JavascriptManager.java')
-rw-r--r--src/com/vaadin/ui/JavascriptManager.java58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/com/vaadin/ui/JavascriptManager.java b/src/com/vaadin/ui/JavascriptManager.java
new file mode 100644
index 0000000000..72295dce2b
--- /dev/null
+++ b/src/com/vaadin/ui/JavascriptManager.java
@@ -0,0 +1,58 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.ui;
+
+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;
+
+public class JavascriptManager extends AbstractExtension {
+ private Map<String, JavascriptCallback> callbacks = new HashMap<String, JavascriptCallback>();
+
+ // Can not be defined in client package as this JSONArray is not available
+ // in GWT
+ public interface JavascriptCallbackRpc extends ServerRpc {
+ public void call(String name, JSONArray arguments);
+ }
+
+ public JavascriptManager() {
+ registerRpc(new JavascriptCallbackRpc() {
+ public void call(String name, JSONArray arguments) {
+ JavascriptCallback callback = callbacks.get(name);
+ // TODO handle situation if name is not registered
+ try {
+ callback.call(arguments);
+ } catch (JSONException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+ });
+ }
+
+ @Override
+ public JavascriptManagerState getState() {
+ return (JavascriptManagerState) super.getState();
+ }
+
+ public void addCallback(String name, JavascriptCallback javascriptCallback) {
+ callbacks.put(name, javascriptCallback);
+ if (getState().getNames().add(name)) {
+ requestRepaint();
+ }
+ }
+
+ public void removeCallback(String name) {
+ callbacks.remove(name);
+ if (getState().getNames().remove(name)) {
+ requestRepaint();
+ }
+ }
+
+}