001: package com.canoo.webtest.extension.applet.runner;
002:
003: import com.canoo.webtest.extension.applet.AbstractAppletTag;
004: import com.canoo.webtest.extension.applet.AppletPluginArguments;
005: import com.canoo.webtest.extension.applet.AppletPluginResults;
006: import org.apache.log4j.Logger;
007:
008: import javax.swing.JApplet;
009: import java.applet.Applet;
010: import java.applet.AppletContext;
011: import java.applet.AudioClip;
012: import java.awt.Image;
013: import java.awt.Toolkit;
014: import java.io.IOException;
015: import java.io.InputStream;
016: import java.net.URL;
017: import java.util.Enumeration;
018: import java.util.HashMap;
019: import java.util.Iterator;
020: import java.util.List;
021: import java.util.Map;
022: import java.util.Vector;
023:
024: /**
025: * The context in which an applet is running.
026: * <p><b>Note:</b> According to the javadoc, the stream-access methods should be limited by the
027: * codebase of the applet. This has not been implemented yet.
028: * <p><b>Note:</b> The two methods {@link #getAudioClip(java.net.URL)} and {@link #getImage(java.net.URL)}
029: * should maintain a cache of previously seen medias. It isn't required, but the implementations do it.
030: *
031: * @author Denis N. Antonioli
032: */
033: public class Context implements AppletContext {
034: private static final Logger LOG = Logger.getLogger(Context.class);
035: public static final String DEFAULT_TARGET = "_top";
036:
037: private final AppletPluginResults fAppletPluginResults;
038:
039: private final List fApplets = new Vector();
040: private final Map fStreams = new HashMap();
041:
042: private Enumeration getAppletElements() {
043: return ((Vector) fApplets).elements();
044: }
045:
046: public Context(AppletPluginResults appletPluginResults) {
047: fAppletPluginResults = appletPluginResults;
048: }
049:
050: public AudioClip getAudioClip(URL url) {
051: return Applet.newAudioClip(url);
052: }
053:
054: public Image getImage(URL url) {
055: return Toolkit.getDefaultToolkit().createImage(url);
056: }
057:
058: public Applet getApplet(String name) {
059: if (name == null) {
060: return null;
061: }
062: for (Enumeration en = getAppletElements(); en.hasMoreElements();) {
063: AbstractAppletStub abstractAppletStub = (AbstractAppletStub) en
064: .nextElement();
065: if (name.equals(abstractAppletStub.getParameter("name"))) {
066: return abstractAppletStub.getApplet();
067: }
068: }
069: return null;
070: }
071:
072: public Enumeration getApplets() {
073: return getAppletElements();
074: }
075:
076: public void showDocument(URL url) {
077: showDocument(url, DEFAULT_TARGET);
078: }
079:
080: public void showDocument(URL url, String target) {
081: LOG.info("Storing attempt to show document "
082: + url.toExternalForm() + " in target " + target);
083: fAppletPluginResults.setFrame(target, url);
084: }
085:
086: public void showStatus(String status) {
087: for (Enumeration en = getAppletElements(); en.hasMoreElements();) {
088: ((AbstractAppletStub) en.nextElement()).showStatus(status);
089: }
090: }
091:
092: public void setStream(String key, InputStream inputStream)
093: throws IOException {
094: if (inputStream == null) {
095: fStreams.remove(key);
096: } else {
097: fStreams.put(key, inputStream);
098: }
099: }
100:
101: public InputStream getStream(String key) {
102: return (InputStream) fStreams.get(key);
103: }
104:
105: public Iterator getStreamKeys() {
106: return fStreams.keySet().iterator();
107: }
108:
109: AbstractAppletStub newStub(final Applet applet,
110: final AbstractAppletTag appletTag,
111: final AppletPluginArguments appletPluginArguments) {
112: AbstractAppletStub stub;
113: if (applet instanceof JApplet) {
114: stub = new SwingStub(this , (JApplet) applet, appletTag,
115: appletPluginArguments.getBaseWindowName());
116: } else {
117: stub = new AwtStub(this , applet, appletTag,
118: appletPluginArguments.getBaseWindowName());
119: }
120: fApplets.add(stub);
121: return stub;
122: }
123:
124: public AppletPluginResults getAppletPluginResults() {
125: return fAppletPluginResults;
126: }
127: }
|