From 9b757f047fc8450d8a7d3d7aa5a7b7e43bfa1312 Mon Sep 17 00:00:00 2001 From: Leif Åstrand Date: Mon, 11 Jun 2012 21:52:26 +0300 Subject: Initial javascript callback support (#6730) --- src/com/vaadin/ui/JavascriptManager.java | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/com/vaadin/ui/JavascriptManager.java (limited to 'src/com/vaadin/ui/JavascriptManager.java') 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 callbacks = new HashMap(); + + // 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(); + } + } + +} -- cgit v1.2.3