diff options
author | Leif Åstrand <leif@vaadin.com> | 2012-06-11 21:52:26 +0300 |
---|---|---|
committer | Leif Åstrand <leif@vaadin.com> | 2012-06-11 21:52:26 +0300 |
commit | 9b757f047fc8450d8a7d3d7aa5a7b7e43bfa1312 (patch) | |
tree | e3814cb6b78cb90570f2b9c31978728e44c7ec33 /src/com/vaadin/ui/JavascriptManager.java | |
parent | 24e3409e6ff117ff954f36a9c9378690c76634f8 (diff) | |
download | vaadin-framework-9b757f047fc8450d8a7d3d7aa5a7b7e43bfa1312.tar.gz vaadin-framework-9b757f047fc8450d8a7d3d7aa5a7b7e43bfa1312.zip |
Initial javascript callback support (#6730)
Diffstat (limited to 'src/com/vaadin/ui/JavascriptManager.java')
-rw-r--r-- | src/com/vaadin/ui/JavascriptManager.java | 53 |
1 files changed, 53 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..e52962f177 --- /dev/null +++ b/src/com/vaadin/ui/JavascriptManager.java @@ -0,0 +1,53 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.ui; + +import java.util.HashMap; +import java.util.Map; + +import com.vaadin.external.json.JSONArray; +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 error handling + callback.call(arguments); + } + }); + } + + @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(); + } + } + +} |