Java tutorial
/* * Copyright 2010 Adrian Buerki * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.gwtai.applet.client; import java.util.HashMap; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Widget; /** * GWT-side utility class. * * @author Adrian Buerki <a.buerki@gmail.com> */ public class AppletJSUtil { static { CallbackUtil.defineBridgeMethod(); } /** * Constructs an <code>HTML</code> element which contains an applet tag. The HTML specification * states that the <code>applet</code> tag is deprecated. But the browser support for the <code>object</code> * and <code>embed</code> tag is currently inconsistent. So using the <code>applet</code> tag is the only * consistent way to deploy a Java Applet across browsers on all platforms. * * @param applet The <code>Applet</code> to take the information from. * @return An <code>HTML</code> element which contains an applet tag. */ public static Widget createAppletWidget(Applet applet) { String htmlCode = createAppletHTML(applet); if (htmlCode != null) { return new HTML(htmlCode); } return null; } /** * Constructs an applet tag. The HTML specification states that the <code>applet</code> tag is deprecated. * But the browser support for the <code>object</code> and <code>embed</code> tag is currently * inconsistent. So using the <code>applet</code> tag is the only consistent way to deploy a Java Applet * across browsers on all platforms. * * @param applet The <code>Applet</code> to take the information from. * @return The applet tag. */ public static String createAppletHTML(Applet applet) { if (applet instanceof AppletAccomplice) { AppletAccomplice aapplet = (AppletAccomplice) applet; String htmlCode = "<applet mayscript='true'" + " code='" + aapplet.getCode() + "' width='" + aapplet.getWidth() + "' height='" + aapplet.getHeight() + "' name='" + aapplet.getName() + "' id='" + aapplet.getName() + "' alt='Java Runtime Environment is not working on your system'"; if (null != aapplet.getCodebase()) { htmlCode += "codebase='" + aapplet.getCodebase() + "'"; } if (null != aapplet.getArchive()) { htmlCode += "archive='" + aapplet.getArchive() + "'"; } if (null != aapplet.getAlign()) { htmlCode += "align='" + aapplet.getAlign() + "'"; } htmlCode += ">"; HashMap<String, String> parameters = aapplet.getParameters(); if (parameters != null && !parameters.isEmpty()) { for (String name : parameters.keySet()) { htmlCode += createParamTag(name, parameters.get(name)); } } htmlCode += createParamTag("java_version", aapplet.getJavaVersion()); htmlCode += createParamTag("java_arguments", aapplet.getJavaArguments()); htmlCode += createParamTag("separate_jvm", aapplet.hasSeparateJVM()); htmlCode += createParamTag("image", aapplet.getLoadingImage()); htmlCode += createParamTag("applet_name", aapplet.getName()); htmlCode += "</applet>"; return htmlCode; } return null; } public static Widget createAppletWidget(Applet applet, String forceJavaVersion) { if (applet instanceof AppletAccomplice) { AppletAccomplice aapplet = (AppletAccomplice) applet; String codebase = GWT.getModuleBaseURL(); String htmlCode = "<p style='text-align: center;'><script src='http://java.com/js/deployJava.js'></script>" + "<script>deployJava.runApplet({codebase:'" + codebase + "', "; if (null != aapplet.getArchive()) { htmlCode += "archive:'" + aapplet.getArchive() + "', "; } htmlCode += "code:'" + aapplet.getCode() + "', width:'" + aapplet.getWidth() + "', Height:'" + aapplet.getHeight() + "'}, null, '" + forceJavaVersion + "');" + "</script></p>"; return new HTML(htmlCode); } return null; } /** * Registers an instance of your <code>AppletCallback</code> * implementation to listen for callbacks coming from the given * <code>Applet</code>. The actual <code>Applet</code> implementation * can check whether an <code>AppletCallback</code> handler is installed, * if so it can notify the given <code>AppletCallback</code> instance * about updates or events. * * Example: * * First, register a listening <code>AppletCallback</code> object: * <code>AppletJSUtil.registerAppletCallback(stopWatchApplet, * new StopWatchCallback(panelLaps));</code> * * Then callback to GWT from your <code>Applet</code> implementation * (Java): * <code>AppletUtil.callback(StopWatchAppletImpl.this, _swLabel.getText());</code> * * @param applet - * The <code>Applet</code> instance to listen to. * @param appletCallback - * The <code>AppletCallback</code> instance to notify once a * callback is coming. */ public static void registerAppletCallback(Applet applet, AppletCallback<? extends Object> appletCallback) { if (applet instanceof AppletAccomplice) { AppletAccomplice aapplet = (AppletAccomplice) applet; CallbackUtil.registerCallback(aapplet.getName(), appletCallback); } } /** * Calls the method with the given name on the <code>Applet</code> * instance. * * @param applet - * The <code>Applet</code> instance to call the method on. * @param methodName - * The name of the method to call. */ public static void call(Applet applet, String methodName) { if (applet instanceof AppletAccomplice) { String id = ((AppletAccomplice) applet).getId(); Element elem = DOM.getElementById(id); call(elem, methodName); } } /** * Calls the method with the given name on the <code>Applet</code> * instance. * * @param applet - * The <code>Applet</code> instance to call the method on. * @param methodName - * The name of the method to call. * @param args - * The method arguments. */ public static void call(Applet applet, String methodName, Object[] args) { if (applet instanceof AppletAccomplice) { String id = ((AppletAccomplice) applet).getId(); Element elem = DOM.getElementById(id); call(elem, methodName, args); } } /** * Helper-method to create a param tag. */ private static String createParamTag(String name, Object value) { if (value != null) { return "<param name='" + name + "' value='" + value + "'>"; } return ""; } /** * Helper-method to do the actual calling. */ private static native Object call(Element elem, String methodName) /*-{ var theFunc = elem[methodName]; return theFunc(); }-*/; /** * Helper-method to do the actual calling. */ private static native Object call(Element elem, String methodName, Object args) /*-{ var theFunc = elem[methodName]; return theFunc(args); }-*/; }