package de.spline.kvm; import java.awt.*; import java.net.MalformedURLException; import java.net.URL; import java.util.Locale; import java.util.Map; import de.spline.kvm.events.EventMulticaster; import de.spline.kvm.events.LifetimeListener; import de.spline.kvm.utils.ReflectionUtils; import nn.pp.rc.RemoteConsoleApplet; import nn.pp.rc.ServerConsolePanelBase; /** * This is a class, to run an applet without an browser. It just overrides the * necessary methods to run the applet. The applet "window" displayed in tbe * browser is not drawn, but the interesting stuff (aka. the remote console) * is in a separate Frame. */ public class StandaloneApplet extends RemoteConsoleApplet { protected String host; protected Map parameters; protected LifetimeListener lifetimeListener = null; public StandaloneApplet(String host, Map parameters) { this.host = host; this.parameters = parameters; } /** * Add a listener for the lifetime events of the applet. * * @param listener Listener instance to add */ public void addLifetimeListener(LifetimeListener listener) { lifetimeListener = EventMulticaster.add(listener, lifetimeListener); } /** * Remove a listener for the lifetime events of the applet. * * @param listener Listener instance to remove */ public void removeLifetimeListener(LifetimeListener listener) { lifetimeListener = EventMulticaster.remove(listener, lifetimeListener); } @Override public Image getImage(URL url) { return getToolkit().getImage(url); } @Override public URL getCodeBase() { URL url = null; try { url = new URL("https", host, 443, ""); } catch (MalformedURLException e) { e.printStackTrace(); } return url; } @Override public URL getDocumentBase() { return getCodeBase(); } @Override public Locale getLocale() { return Locale.getDefault(); } /** * This are the parameters of the applet. The applet usually get the values * from html tags inside the applet tag. We have parsed this tags into a * map and simply return these values here. * * @param name Name of the parameter to get * @return Value of the parameter */ @Override public String getParameter(String name) { return parameters.get(name.toUpperCase()); } @Override public void init() { super.init(); // The initial label is removed during init and this is causing // NullPointerExceptions when the popup should be displayed, so we // simply add the label again. ServerConsolePanelBase consolePanel = ReflectionUtils.getConsolePanel(this); PopupMenu menu = ReflectionUtils.getOptionMenu(consolePanel); menu.setLabel("Options"); } @Override public void stop() { super.stop(); destroy(); lifetimeListener.appletStopped(); } }