diff options
author | Johannes Dahlström <johannesd@vaadin.com> | 2012-06-13 17:46:09 +0300 |
---|---|---|
committer | Johannes Dahlström <johannesd@vaadin.com> | 2012-06-13 17:46:09 +0300 |
commit | 52d06a13b9e20cb752a21413e15adc250daa5e1c (patch) | |
tree | ac0e5878490d802960d9463354721ce1820b4aa8 /src/com/vaadin/ui/JavascriptManager.java | |
parent | de5fd8e0aefa0c43e2b0fe724102bca92eeaaf96 (diff) | |
parent | adcf03c1b5f05b38cda25819b732745c1a4859fc (diff) | |
download | vaadin-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.java | 58 |
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(); + } + } + +} |