// HTMLParser Library $Name: v1_6_20060319 $ - A java-based parser for HTML // http://sourceforge.org/projects/htmlparser // Copyright (C) 2004 Somik Raha // // Revision Control Information // // $Source: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/tags/AppletTag.java,v $ // $Author: derrickoswald $ // $Date: 2004/07/02 00:49:28 $ // $Revision: 1.41 $ // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // 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 // package org.htmlparser.tags; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; import org.htmlparser.Attribute; import org.htmlparser.Node; import org.htmlparser.Tag; import org.htmlparser.Text; import org.htmlparser.nodes.TagNode; import org.htmlparser.util.NodeList; import org.htmlparser.util.SimpleNodeIterator; /** * AppletTag represents an <Applet> tag. * It extends a basic tag by providing accessors to the class, codebase, * archive and parameters. */ public class AppletTag extends CompositeTag { /** * The set of names handled by this tag. */ private static final String[] mIds = new String[] {"APPLET"}; /** * The set of end tag names that indicate the end of this tag. */ private static final String[] mEndTagEnders = new String[] {"BODY", "HTML"}; /** * Create a new applet tag. */ public AppletTag () { } /** * Return the set of names handled by this tag. * @return The names to be matched that create tags of this type. */ public String[] getIds () { return (mIds); } /** * Return the set of end tag names that cause this tag to finish. * @return The names of following end tags that stop further scanning. */ public String[] getEndTagEnders () { return (mEndTagEnders); } /** * Extract the applet <code>PARAM</code> tags from the child list. * @return The list of applet parameters (keys and values are String objects). */ public Hashtable createAppletParamsTable () { NodeList kids; Node node; Tag tag; String paramName; String paramValue; Hashtable ret; ret = new Hashtable (); kids = getChildren (); if (null != kids) for (int i = 0; i < kids.size (); i++) { node = children.elementAt(i); if (node instanceof Tag) { tag = (Tag)node; if (tag.getTagName().equals ("PARAM")) { paramName = tag.getAttribute ("NAME"); if (null != paramName && 0 != paramName.length ()) { paramValue = tag.getAttribute ("VALUE"); ret.put (paramName,paramValue); } } } } return (ret); } /** * Get the class name of the applet. * @return The value of the <code>CODE</code> attribute. */ public String getAppletClass () { return (getAttribute ("CODE")); } /** * Get the applet parameters. * @return The list of parameter values (keys and values are String objects). */ public Hashtable getAppletParams () { return (createAppletParamsTable ()); } /** * Get the jar file of the applet. * @return The value of the <code>ARCHIVE</code> attribute, or <code>null</code> if it wasn't specified. */ public String getArchive() { return (getAttribute ("ARCHIVE")); } /** * Get the code base of the applet. * @return The value of the <code>CODEBASE</code> attribute, or <code>null</code> if it wasn't specified. */ public String getCodeBase() { return (getAttribute ("CODEBASE")); } /** * Get the <code>PARAM<code> tag with the given name. * <em>NOTE: This was called (erroneously) getAttribute() in previous versions.</em> * @param key The applet parameter name to get. * @return The value of the parameter or <code>null</code> if there is no parameter of that name. */ public String getParameter (String key) { return ((String)(getAppletParams ().get (key))); } /** * Get an enumeration over the (String) parameter names. * @return An enumeration of the <code>PARAM<code> tag <code>NAME<code> attributes. */ public Enumeration getParameterNames () { return (getAppletParams ().keys ()); } /** * Set the <code>CODE<code> attribute. * @param newAppletClass The new applet class. */ public void setAppletClass (String newAppletClass) { setAttribute ("CODE", newAppletClass); } /** * Set the enclosed <code>PARM<code> children. * @param newAppletParams The new parameters. */ public void setAppletParams (Hashtable newAppletParams) { NodeList kids; Node node; Tag tag; String paramName; String paramValue; Vector attributes; Text string; kids = getChildren (); if (null == kids) kids = new NodeList (); else // erase appletParams from kids for (int i = 0; i < kids.size (); ) { node = kids.elementAt (i); if (node instanceof Tag) if (((Tag)node).getTagName ().equals ("PARAM")) { kids.remove (i); // remove whitespace too if (i < kids.size ()) { node = kids.elementAt (i); if (node instanceof Text) { string = (Text)node; if (0 == string.getText ().trim ().length ()) kids.remove (i); } } } else i++; else i++; } // add newAppletParams to kids for (Enumeration e = newAppletParams.keys (); e.hasMoreElements (); ) { attributes = new Vector (); // should the tag copy the attributes? paramName = (String)e.nextElement (); paramValue = (String)newAppletParams.get (paramName); attributes.addElement (new Attribute ("PARAM", null)); attributes.addElement (new Attribute (" ")); attributes.addElement (new Attribute ("VALUE", paramValue, '"')); attributes.addElement (new Attribute (" ")); attributes.addElement (new Attribute ("NAME", paramName, '"')); tag = new TagNode (null, 0, 0, attributes); kids.add (tag); } //set kids as new children setChildren (kids); } /** * Set the <code>ARCHIVE<code> attribute. * @param newArchive The new archive file. */ public void setArchive (String newArchive) { setAttribute ("ARCHIVE", newArchive); } /** * Set the <code>CODEBASE<code> attribute. * @param newCodeBase The new applet code base. */ public void setCodeBase (String newCodeBase) { setAttribute ("CODEBASE", newCodeBase); } /** * Output a string representing this applet tag. * @return A string showing the contents of the applet tag. */ public String toString () { Hashtable parameters; Enumeration params; String paramName; String paramValue; boolean found; Node node; StringBuffer ret; ret = new StringBuffer(500); ret.append ("Applet Tag\n"); ret.append ("**********\n"); ret.append ("Class Name = "); ret.append (getAppletClass ()); ret.append ("\n"); ret.append ("Archive = "); ret.append (getArchive ()); ret.append ("\n"); ret.append ("Codebase = "); ret.append (getCodeBase ()); ret.append ("\n"); parameters = getAppletParams (); params = parameters.keys (); if (null == params) ret.append ("No Params found.\n"); else for (int cnt = 0; params.hasMoreElements (); cnt++) { paramName = (String)params.nextElement (); paramValue = (String)parameters.get (paramName); ret.append (cnt); ret.append (": Parameter name = "); ret.append (paramName); ret.append (", Parameter value = "); ret.append (paramValue); ret.append ("\n"); } found = false; for (SimpleNodeIterator e = children (); e.hasMoreNodes ();) { node = e.nextNode (); if (node instanceof Tag) if (((Tag)node).getTagName ().equals ("PARAM")) continue; if (!found) ret.append ("Miscellaneous items :\n"); else ret.append (" "); found = true; ret.append (node.toString ()); } if (found) ret.append ("\n"); ret.append ("End of Applet Tag\n"); ret.append ("*****************\n"); return (ret.toString ()); } }