diff options
Diffstat (limited to 'sj2/stardiv/app/AppletViewer.java')
-rw-r--r-- | sj2/stardiv/app/AppletViewer.java | 1025 |
1 files changed, 1025 insertions, 0 deletions
diff --git a/sj2/stardiv/app/AppletViewer.java b/sj2/stardiv/app/AppletViewer.java new file mode 100644 index 0000000000..735d3456e5 --- /dev/null +++ b/sj2/stardiv/app/AppletViewer.java @@ -0,0 +1,1025 @@ +/************************************************************************* + * + * $RCSfile: AppletViewer.java,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:54:03 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +package stardiv.app; + +import java.awt.Toolkit; + +import java.net.InetAddress; + +//import stardiv.applet.AppletMessageHandler; +import stardiv.applet.AppletExecutionContext; +import stardiv.applet.DocumentProxy; + +//import stardiv.js.ip.RootTaskManager; +//import stardiv.js.ip.BaseObj; +//import stardiv.js.ide.Ide; +//import stardiv.js.ne.RunTime; +//import stardiv.js.base.IdentifierPool; +//import stardiv.js.base.Identifier; +//import stardiv.memory.AtomUnion; +//import stardiv.js.ip.Ctor; +import stardiv.controller.SjSettings; + +import java.util.*; +import java.io.*; +import java.awt.*; +import java.awt.event.*; +import java.applet.*; +import java.net.URL; +import java.net.MalformedURLException; + + +/** + * A frame to show the applet tag in. + */ +class TextFrame extends Frame { + /** + * Create the tag frame. + */ + TextFrame(int x, int y, String title, String text) { + setTitle(title); + TextArea txt = new TextArea(20, 60); + txt.setText(text); + txt.setEditable(false); + + add("Center", txt); + + Panel p = new Panel(); + add("South", p); + Button b = new Button(amh.getMessage("button.dismiss", "Dismiss")); + p.add(b); + + class ActionEventListener implements ActionListener { + public void actionPerformed(ActionEvent evt) { + dispose(); + } + } + b.addActionListener(new ActionEventListener()); + + pack(); + setLocation(x, y); + setVisible(true); + + WindowListener windowEventListener = new WindowAdapter() { + + public void windowClosing(WindowEvent evt) { + dispose(); + } + }; + + addWindowListener(windowEventListener); + } + private static AppletMessageHandler amh = new AppletMessageHandler("textframe"); + +} + +/** + * The toplevel applet viewer. + */ +public class AppletViewer extends Frame implements Observer { + com.sun.star.lib.sandbox.ResourceViewer resourceViewer; + + /** + * Some constants... + */ + private static String defaultSaveFile = "Applet.ser"; + + /** + * Look here for the properties file + */ + public static File theUserPropertiesFile; + public static File theAppletViewerPropsFile; + + //private Ide aIde; + //private RootTaskManager aRTM; + //private BaseObj aRootObj; + + private AppletExecutionContext appletExecutionContext = null; + Hashtable atts = null; + + static DocumentProxy documentViewer = null; + + /** + * The status line. + */ + Label label; + + /** + * output status messages to this stream + */ + + PrintStream statusMsgStream; + + static Vector contexts = new Vector(); + + private final class UserActionListener implements ActionListener { + public void actionPerformed(ActionEvent evt) { + processUserAction(evt); + } + } + + static { + String sep = File.separator; + + File userHome = new File(System.getProperty("user.home")); + + File AVHome = new File(userHome, ".hotjava"); + // ensure the props folder can be made + AVHome.mkdirs(); + + theUserPropertiesFile = new File(AVHome, "properties"); + File JH = new File(System.getProperty("java.home")); + theAppletViewerPropsFile = new File(JH, "lib" + sep + "appletviewer.properties"); + }; + + /** + * Create the applet viewer + */ + public AppletViewer(int x, int y, URL doc, Hashtable atts, PrintStream statusMsgStream) { +// resourceViewer = new stardiv.util.ResourceViewer(); +// resourceViewer.show(); + System.err.println("#*#*#*:" + sun.awt.ScreenUpdater.updater); + this.statusMsgStream = statusMsgStream; + this.atts = atts; + + setTitle(amh.getMessage("tool.title", atts.get("code"))); + + MenuBar mb = new MenuBar(); + + Menu m = new Menu(amh.getMessage("menu.applet")); + + addMenuItem(m, "menuitem.restart"); + addMenuItem(m, "menuitem.reload"); + addMenuItem(m, "menuitem.stop"); + addMenuItem(m, "menuitem.save"); + addMenuItem(m, "menuitem.start"); + addMenuItem(m, "menuitem.clone"); + m.add(new MenuItem("-")); + addMenuItem(m, "menuitem.tag"); + addMenuItem(m, "menuitem.info"); + addMenuItem(m, "menuitem.edit").setEnabled( false ); + addMenuItem(m, "menuitem.encoding"); + m.add(new MenuItem("-")); + addMenuItem(m, "menuitem.print"); + m.add(new MenuItem("-")); + addMenuItem(m, "menuitem.props"); + m.add(new MenuItem("-")); + addMenuItem(m, "menuitem.close"); + // if (factory.isStandalone()) { + addMenuItem(m, "menuitem.quit"); + // } + + mb.add(m); + + setMenuBar(mb); + + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent evt) { + appletExecutionContext.shutdown(); + } + + public void windowIconified(WindowEvent evt) { + appletExecutionContext.sendLoad(); + } + + public void windowDeiconified(WindowEvent evt) { + appletExecutionContext.sendStart(); + } + }); + + add("South", label = new Label(amh.getMessage("label.hello"))); + + appletExecutionContext = new AppletExecutionContext(doc, atts, this, 0); + appletExecutionContext.init(); + + appletExecutionContext.addObserver(this); + contexts.addElement(appletExecutionContext); + + pack(); + setVisible(true); + +// appletExecutionContext.send(); + appletExecutionContext.startUp(); + +/* + if( atts.get( "mayscript" ) != null ) { + aIde = new Ide(); + aRTM = aIde.getActRootTaskManager(); + aRootObj = new BaseObj( aRTM ); + //Ctor aCtor = new AppletCtor( aRTM, "Window" ); + //aRootObj.initProperties( aCtor, aCtor.getStaticPropCount(), aCtor.getBasePropCount() ); + //aRootObj.setCtor( aCtor ); + aRTM.setRootObj( aRootObj ); + RunTime aRT = new RunTime( aRootObj, aRTM ); + aIde.setRootObj( aRootObj ); + + AtomUnion aAU = new AtomUnion(); + BaseObj aDocument = new BaseObj( aRTM ); + aAU.setObject( aDocument ); + Identifier aId = IdentifierPool.aGlobalPool.addIdentifier( "RootObject" ); + aRootObj.newProperty( aId, aAU ); + IdentifierPool.aGlobalPool.releaseIdentifier( aId ); + + String pName = (String)atts.get( "name" ); + if( pName != null ) { + BaseObj aApplet = new BaseObj( aRTM ); + aAU.setObject( aApplet ); + aId = IdentifierPool.aGlobalPool.addIdentifier( pName ); + aDocument.newProperty( aId, aAU ); + IdentifierPool.aGlobalPool.releaseIdentifier( aId ); + } + } + */ + } + + public MenuItem addMenuItem(Menu m, String s) { + MenuItem mItem = new MenuItem(amh.getMessage(s)); + mItem.addActionListener(new UserActionListener()); + return m.add(mItem); + } + + /** + * Ignore. + */ + public void showDocument(URL url) { + } + + /** + * Ignore. + */ + public void showDocument(URL url, String target) { + } + + /** + * Show status. + */ + public void showStatus(String status) { + label.setText(status); + } + + public void update(Observable observable, Object status) { + showStatus((String)status); + } + + public Object getJavaScriptJSObjectWindow() { + //if( aRootObj != null ) + // return aRootObj.getJSObject(); + return null; + } + + + /** + * System parameters. + */ + static Hashtable systemParam = new Hashtable(); + + static { + systemParam.put("codebase", "codebase"); + systemParam.put("code", "code"); + systemParam.put("alt", "alt"); + systemParam.put("width", "width"); + systemParam.put("height", "height"); + systemParam.put("align", "align"); + systemParam.put("vspace", "vspace"); + systemParam.put("hspace", "hspace"); + } + + /** + * Print the HTML tag. + */ + public static void printTag(PrintStream out, Hashtable atts) { + out.print("<applet"); + + String v = (String)atts.get("codebase"); + if (v != null) { + out.print(" codebase=\"" + v + "\""); + } + + v = (String)atts.get("code"); + if (v == null) { + v = "applet.class"; + } + out.print(" code=\"" + v + "\""); + v = (String)atts.get("width"); + if (v == null) { + v = "150"; + } + out.print(" width=" + v); + + v = (String)atts.get("height"); + if (v == null) { + v = "100"; + } + out.print(" height=" + v); + + v = (String)atts.get("name"); + if (v != null) { + out.print(" name=\"" + v + "\""); + } + out.println(">"); + + // A very slow sorting algorithm + int len = atts.size(); + String params[] = new String[len]; + len = 0; + for (Enumeration e = atts.keys() ; e.hasMoreElements() ;) { + String param = (String)e.nextElement(); + int i = 0; + for (; i < len ; i++) { + if (params[i].compareTo(param) >= 0) { + break; + } + } + System.arraycopy(params, i, params, i + 1, len - i); + params[i] = param; + len++; + } + + for (int i = 0 ; i < len ; i++) { + String param = params[i]; + if (systemParam.get(param) == null) { + out.println("<param name=" + param + + " value=\"" + atts.get(param) + "\">"); + } + } + out.println("</applet>"); + } + + /** + * Make sure the atrributes are uptodate. + */ + public void updateAtts() { + Dimension d = getSize(); + Insets in = getInsets(); + atts.put("width", new Integer(d.width - (in.left + in.right)).toString()); + atts.put("height", new Integer(d.height - (in.top + in.bottom)).toString()); + } + + /** + * Save the applet to a well known file (for now) as a serialized object + */ + void appletSave() { + // REMIND -- should check that the applet has really stopped + FileDialog fd = new FileDialog(this, "Serialize Applet into File", FileDialog.SAVE); + // needed for a bug under Solaris... + fd.setDirectory(System.getProperty("user.dir")); + fd.setFile(defaultSaveFile); + fd.show(); + String fname = fd.getFile(); + if (fname == null) { + return; // cancelled + } + String dname = fd.getDirectory(); + File file = new File(dname, fname); + + try { + OutputStream s = new FileOutputStream(file); + ObjectOutputStream os = new ObjectOutputStream(s); + showStatus(amh.getMessage("appletsave.err1", + appletExecutionContext.getApplet().toString(), file.toString())); + os.writeObject(appletExecutionContext.getApplet()); + } catch (IOException ex) { + System.err.println(amh.getMessage("appletsave.err2", ex)); + } + } + + /** + * Clone the viewer and the applet. + */ + void appletClone() { + Point p = getLocation(); + updateAtts(); + // factory.createAppletViewer(p.x + 30, p.y + 10, + // pHelper.panel.documentURL, (Hashtable)pHelper.panel.atts.clone()); + } + + /** + * Show the applet tag. + */ + void appletTag() { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + updateAtts(); + printTag(new PrintStream(out), atts); + showStatus(amh.getMessage("applettag")); + + Point p = getLocation(); + new TextFrame(p.x + 50, p.y + 20, amh.getMessage("applettag.textframe"), out.toString()); + } + + /** + * Show the applet info. + */ + void appletInfo() { + String str = appletExecutionContext.getApplet().getAppletInfo(); + if (str == null) { + str = amh.getMessage("appletinfo.applet"); + } + str += "\n\n"; + + String atts[][] = appletExecutionContext.getApplet().getParameterInfo(); + if (atts != null) { + for (int i = 0 ; i < atts.length ; i++) { + str += atts[i][0] + " -- " + atts[i][1] + " -- " + atts[i][2] + "\n"; + } + } else { + str += amh.getMessage("appletinfo.param"); + } + + Point p = getLocation(); + new TextFrame(p.x + 50, p.y + 20, amh.getMessage("appletinfo.textframe"), str); + + } + + /** + * Show character encoding type + */ + void appletCharacterEncoding() { + showStatus(amh.getMessage("appletencoding", encoding)); + } + + /** + * Edit the applet. + */ + void appletEdit() { + } + + /** + * Print the applet. + */ + void appletPrint() { + PrintJob pj = Toolkit.getDefaultToolkit(). + getPrintJob(this, amh.getMessage("appletprint.printjob"), (Properties)null); + + + if (pj != null) { + Dimension pageDim = pj.getPageDimension(); + int pageRes = pj.getPageResolution(); + boolean lastFirst = pj.lastPageFirst(); + + Graphics g = pj.getGraphics(); + if (g != null) { + appletExecutionContext.getApplet().printComponents(g); + g.dispose(); + } else { + statusMsgStream.println(amh.getMessage("appletprint.fail")); + } + statusMsgStream.println(amh.getMessage("appletprint.finish")); + pj.end(); + + } else { + statusMsgStream.println(amh.getMessage("appletprint.cancel")); + } + } + + /** + * Properties. + */ + AppletProps props; + public synchronized void networkProperties() { + if (props == null) { + props = new AppletProps(appletExecutionContext); + } + props.addNotify(); + props.setVisible(true); + } + + /** + * Close this viewer. + * Stop, Destroy, Dispose and Quit an AppletView, then + * reclaim resources and exit the program if this is + * the last applet. + */ + public void appletClose() { + appletExecutionContext.shutdown(); + contexts.removeElement(this); + + if (contexts.size() == 0) { + appletSystemExit(); + } + } + + +// public static void writeClasses() { +// try { +// java.io.FileOutputStream file = new FileOutputStream("classes.txt"); +// java.io.PrintStream printStream = new java.io.PrintStream(file); + +// printStream.println("- .* .*"); +// Enumeration elements = stardiv.util.HardClassContext.classList.elements(); +// while(elements.hasMoreElements()) { +// String string = (String)elements.nextElement(); + +// String packageName = ""; +// String className = string; + +// int lastIndex = string.lastIndexOf('.'); +// if(lastIndex > -1) { +// packageName = string.substring(0, lastIndex); +// className = string.substring(lastIndex + 1); +// } + +// printStream.print("+ "); +// int index; +// while((index = packageName.indexOf('.')) > -1) { +// printStream.print(packageName.substring(0, index) + "\\\\"); +// packageName = packageName.substring(index + 1); +// } +// printStream.print(packageName + " "); + +// while((index = className.indexOf('$')) > -1) { +// printStream.print(className.substring(0, index) + "\\$"); +// className = className.substring(index + 1); +// } +// printStream.println(className + "\\.class"); +// } +// file.close(); +// } +// catch(java.io.IOException eio) { +// System.err.println("IOException:" + eio); +// } +// } + + /** + * Exit the program. + * Exit from the program (if not stand alone) - do no clean-up + */ + private void appletSystemExit() { + // if (factory.isStandalone()) + System.exit(0); + } + + /** + * Quit all viewers. + * Shutdown all viewers properly then + * exit from the program (if not stand alone) + */ + protected void appletQuit() { + appletExecutionContext.shutdown(); + appletSystemExit(); + } + + /** + * Handle events. + */ + public void processUserAction(ActionEvent evt) { + + String label = ((MenuItem)evt.getSource()).getLabel(); + + if (amh.getMessage("menuitem.restart").equals(label)) { + appletExecutionContext.restart(); + return; + } + + if (amh.getMessage("menuitem.reload").equals(label)) { + appletExecutionContext.reload(); + return; + } + + if (amh.getMessage("menuitem.clone").equals(label)) { + appletClone(); + return; + } + + if (amh.getMessage("menuitem.stop").equals(label)) { + appletExecutionContext.sendStop(); + return; + } + + if (amh.getMessage("menuitem.save").equals(label)) { + appletSave(); + return; + } + + if (amh.getMessage("menuitem.start").equals(label)) { + appletExecutionContext.sendStart(); + return; + } + + if (amh.getMessage("menuitem.tag").equals(label)) { + appletTag(); + return; + } + + if (amh.getMessage("menuitem.info").equals(label)) { + appletInfo(); + return; + } + + if (amh.getMessage("menuitem.encoding").equals(label)) { + appletCharacterEncoding(); + return; + } + + if (amh.getMessage("menuitem.edit").equals(label)) { + appletEdit(); + return; + } + + if (amh.getMessage("menuitem.print").equals(label)) { + appletPrint(); + return; + } + + if (amh.getMessage("menuitem.props").equals(label)) { + networkProperties(); + return; + } + + if (amh.getMessage("menuitem.close").equals(label)) { + appletClose(); + return; + } + + if (/*factory.isStandalone() && */amh.getMessage("menuitem.quit").equals(label)) { + appletQuit(); + return; + } + //statusMsgStream.println("evt = " + evt); + } + + /** + * Prepare the enviroment for executing applets. + */ + public static void init() { + Properties props = new Properties(); + props.put( "http.proxyHost", "wwwproxy" ); + props.put( "http.proxyPort", "3128" ); + props.put( "ftpProxySet", "true" ); + props.put( "ftpProxyHost", "wwwproxy" ); + props.put( "ftpProxyPort", "3128" ); + props.put( "ftpProxyPort", "3128" ); + props.put( "stardiv.debug.trace", "window" ); + props.put( "stardiv.debug.warning", "window" ); + props.put( "stardiv.debug.error", "window" ); + props.put( "stardiv.security.defaultSecurityManager", "true" ); + + // Try loading the appletviewer properties file to get messages, etc. +// try { +// FileInputStream in = new FileInputStream(theAppletViewerPropsFile); +// props.load(new BufferedInputStream(in)); +// in.close(); +// } catch (Exception e) { +// System.out.println(amh.getMessage("init.err")); +// } + + // Try loading the saved user properties file to override some + // of the above defaults. + try { + FileInputStream in = new FileInputStream(theUserPropertiesFile); + props.load(new BufferedInputStream(in)); + in.close(); + } catch (Exception e) { + /* is it really necessary to say this? + This is always the case the first time we run.. + System.out.println("[no properties loaded, using defaults]"); */ + } + + // Install a property list. + + SjSettings.changeProperties(props); + } + + /** + * The current character. + */ + static int c; + + /** + * Scan spaces. + */ + public static void skipSpace(Reader in) throws IOException { + while ((c >= 0) && ((c == ' ') || (c == '\t') || (c == '\n') || (c == '\r'))) { + c = in.read(); + } + } + + /** + * Scan identifier + */ + public static String scanIdentifier(Reader in) throws IOException { + StringBuffer buf = new StringBuffer(); + while (true) { + if (((c >= 'a') && (c <= 'z')) || + ((c >= 'A') && (c <= 'Z')) || + ((c >= '0') && (c <= '9')) || (c == '_')) { + buf.append((char)c); + c = in.read(); + } else { + return buf.toString(); + } + } + } + + /** + * Scan tag + */ + public static Hashtable scanTag(Reader in) throws IOException { + Hashtable atts = new Hashtable(); + skipSpace(in); + while (c >= 0 && c != '>') { + String att = scanIdentifier(in); + String val = ""; + skipSpace(in); + if (c == '=') { + int quote = -1; + c = in.read(); + skipSpace(in); + if ((c == '\'') || (c == '\"')) { + quote = c; + c = in.read(); + } + StringBuffer buf = new StringBuffer(); + while ((c > 0) && + (((quote < 0) && (c != ' ') && (c != '\t') && + (c != '\n') && (c != '\r') && (c != '>')) + || ((quote >= 0) && (c != quote)))) { + buf.append((char)c); + c = in.read(); + } + if (c == quote) { + c = in.read(); + } + skipSpace(in); + val = buf.toString(); + } + //statusMsgStream.println("PUT " + att + " = '" + val + "'"); + atts.put(att.toLowerCase(), val); + skipSpace(in); + } + return atts; + } + + static int x = 100; + static int y = 50; + + static String encoding = null; + + static private Reader makeReader(InputStream is) { + if (encoding != null) { + try { + return new BufferedReader(new InputStreamReader(is, encoding)); + } catch (IOException x) { } + } + InputStreamReader r = new InputStreamReader(is); + encoding = r.getEncoding(); + return new BufferedReader(r); + } + + /** + * Scan an html file for <applet> tags + */ + public static void parse(URL url) throws IOException { + parse(url, System.out); + } + + public static void parse(URL url, PrintStream statusMsgStream) throws IOException { + + // warning messages + String requiresNameWarning = amh.getMessage("parse.warning.requiresname"); + String paramOutsideWarning = amh.getMessage("parse.warning.paramoutside"); + String requiresCodeWarning = amh.getMessage("parse.warning.requirescode"); + String requiresHeightWarning = amh.getMessage("parse.warning.requiresheight"); + String requiresWidthWarning = amh.getMessage("parse.warning.requireswidth"); + String appNotLongerSupportedWarning = amh.getMessage("parse.warning.appnotLongersupported"); + + java.net.URLConnection conn = url.openConnection(); + Reader in = makeReader(conn.getInputStream()); + /* The original URL may have been redirected - this + * sets it to whatever URL/codebase we ended up getting + */ + url = conn.getURL(); + + Hashtable atts = null; + while(true) { + c = in.read(); + if (c == -1) + break; + + if (c == '<') { + c = in.read(); + if (c == '/') { + c = in.read(); + String nm = scanIdentifier(in); + if (nm.equalsIgnoreCase("applet")) { + if (atts != null) { + new AppletViewer(x, y, url, atts, System.out); + x += 50; + y += 20; + // make sure we don't go too far! + Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); + if (x > d.width - 30) + x = 100; + if (y > d.height - 30) + y = 50; + } + atts = null; + } + } + else { + String nm = scanIdentifier(in); + if (nm.equalsIgnoreCase("param")) { + Hashtable t = scanTag(in); + String att = (String)t.get("name"); + if (att == null) { + statusMsgStream.println(requiresNameWarning); + } else { + String val = (String)t.get("value"); + if (val == null) { + statusMsgStream.println(requiresNameWarning); + } else if (atts != null) { + atts.put(att.toLowerCase(), val); + } else { + statusMsgStream.println(paramOutsideWarning); + } + } + } + else if (nm.equalsIgnoreCase("applet")) { + atts = scanTag(in); + if (atts.get("code") == null && atts.get("object") == null) { + statusMsgStream.println(requiresCodeWarning); + atts = null; + } else if (atts.get("width") == null) { + statusMsgStream.println(requiresWidthWarning); + atts = null; + } else if (atts.get("height") == null) { + statusMsgStream.println(requiresHeightWarning); + atts = null; + } + } + else if (nm.equalsIgnoreCase("app")) { + statusMsgStream.println(appNotLongerSupportedWarning); + Hashtable atts2 = scanTag(in); + nm = (String)atts2.get("class"); + if (nm != null) { + atts2.remove("class"); + atts2.put("code", nm + ".class"); + } + nm = (String)atts2.get("src"); + if (nm != null) { + atts2.remove("src"); + atts2.put("codebase", nm); + } + if (atts2.get("width") == null) { + atts2.put("width", "100"); + } + if (atts2.get("height") == null) { + atts2.put("height", "100"); + } + printTag(statusMsgStream, atts2); + statusMsgStream.println(); + } + } + } + } + in.close(); + } + + /** + * Print usage + */ + static void usage() { + System.out.println(amh.getMessage("usage")); + } + + static boolean didInitialize = false; + + /** + * mainInit can be called by direct clients + */ + public static void mainInit() { + if (! didInitialize) { + didInitialize = true; + + init(); + + } + } + + /** + * Main + */ + public static void main(String argv[]) { + mainInit(); + + // Parse arguments + if (argv.length == 0) { + System.out.println(amh.getMessage("main.err.inputfile")); + usage(); + return; + } + + // Parse the documents + for (int i = 0 ; i < argv.length ; i++) { + try { + URL url = null; + + if (argv[i].equals("-encoding")) { + if(i + 1 < argv.length) { + i++; + encoding = argv[i]; + continue; + } else { + usage(); + System.exit(1); + } + } + else + if (argv[i].indexOf(':') <= 1) { + String userDir = System.getProperty("user.dir"); + String prot; + // prepend native separator to path iff not present + if (userDir.charAt(0) == '/' || + userDir.charAt(0) == java.io.File.separatorChar) { + prot = "file:"; + } else { + prot = "file:/"; + } + url = new URL(prot + userDir.replace(File.separatorChar, '/') + + "/"); + url = new URL(url, argv[i]); + } else { + url = new URL(argv[i]); + } + + parse(url); + documentViewer = DocumentProxy.getDocumentProxy(url, Toolkit.getDefaultToolkit()); + } catch (MalformedURLException e) { + System.out.println(amh.getMessage("main.err.badurl", argv[i], e.getMessage())); + System.exit(1); + } catch (IOException e) { + System.out.println(amh.getMessage("main.err.io", e.getMessage())); + if (argv[i].indexOf(':') < 0) { + System.out.println(amh.getMessage("main.err.readablefile", argv[i])); + } else { + System.out.println(amh.getMessage("main.err.correcturl", argv[i])); + } + System.exit(1); + } + } + /* + if (documentViewer.countApplets() == 0) { + System.out.println(amh.getMessage("main.warning")); + usage(); + System.exit(1); + }*/ + } + private static AppletMessageHandler amh = new AppletMessageHandler("appletviewer"); +} |