xsltprocessorapplet.java

来自「JAVA 所有包」· Java 代码 · 共 778 行 · 第 1/2 页

JAVA
778
字号
/* * Copyright 1999-2004 The Apache Software Foundation. * * 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. *//* * $Id: XSLTProcessorApplet.java,v 1.2.4.1 2005/09/15 02:20:05 jeffsuttor Exp $ */package com.sun.org.apache.xalan.internal.client;import java.applet.Applet;import java.awt.Graphics;import java.io.IOException;import java.io.PrintWriter;import java.io.StringReader;import java.io.StringWriter;import java.net.MalformedURLException;import java.net.URL;import java.util.Hashtable;import java.util.Enumeration;import javax.xml.transform.Templates;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.stream.StreamResult;import javax.xml.transform.stream.StreamSource;import com.sun.org.apache.xalan.internal.res.XSLMessages;import com.sun.org.apache.xalan.internal.res.XSLTErrorResources;/** * Provides applet host for the XSLT processor. To perform transformations on an HTML client: * <ol> * <li>Use an &lt;applet&gt; tag to embed this applet in the HTML client.</li> * <li>Use the DocumentURL and StyleURL PARAM tags or the {@link #setDocumentURL} and * {@link #setStyleURL} methods to specify the XML source document and XSL stylesheet.</li> * <li>Call the {@link #getHtmlText} method (or one of the transformToHtml() methods) * to perform the transformation and return the result as a String.</li> * </ol> *  * This class extends Applet which ultimately causes this class to implement Serializable. * This is a serious restriction on this class. All fields that are not transient and not * static are written-out/read-in during serialization. So even private fields essentially * become part of the API. Developers need to take care when modifying fields. * @xsl.usage general */public class XSLTProcessorApplet extends Applet{  /**   * The stylesheet processor.   * This field is now transient because a    * javax.xml.transform.TransformerFactory from JAXP    * makes no claims to be serializable.   */  transient TransformerFactory m_tfactory = null;  /**   * @serial   */  private String m_styleURL;  /**   * @serial   */  private String m_documentURL;  // Parameter names.  To change a name of a parameter, you need only make  // a single change.  Simply modify the value of the parameter string below.  //--------------------------------------------------------------------------  /**   * @serial   */  private final String PARAM_styleURL = "styleURL";  /**   * @serial   */  private final String PARAM_documentURL = "documentURL";  // We'll keep the DOM trees around, so tell which trees  // are cached.  /**   * @serial   */  private String m_styleURLOfCached = null;  /**   * @serial   */  private String m_documentURLOfCached = null;  /**   * Save this for use on the worker thread; may not be necessary.   * @serial   */  private URL m_codeBase = null;    /**   * @serial   */  private String m_treeURL = null;  /**    * DocumentBase URL   * @serial          */  private URL m_documentBase = null;  /**   * Thread stuff for the trusted worker thread.   */  transient private Thread m_callThread = null;  /**   */  transient private TrustedAgent m_trustedAgent = null;  /**   * Thread for running TrustedAgent.   */  transient private Thread m_trustedWorker = null;  /**   * Where the worker thread puts the HTML text.   */  transient private String m_htmlText = null;    /**   * Where the worker thread puts the document/stylesheet text.   */  transient private String m_sourceText = null;    /**   * Stylesheet attribute name and value that the caller can set.   */  transient private String m_nameOfIDAttrOfElemToModify = null;  /**   */  transient private String m_elemIdToModify = null;  /**   */  transient private String m_attrNameToSet = null;  /**   */  transient private String m_attrValueToSet = null;  /**   * The XSLTProcessorApplet constructor takes no arguments.   */  public XSLTProcessorApplet(){}  /**   * Get basic information about the applet   * @return A String with the applet name and author.   */  public String getAppletInfo()  {    return "Name: XSLTProcessorApplet\r\n" + "Author: Scott Boag";  }  /**   * Get descriptions of the applet parameters.   * @return A two-dimensional array of Strings with Name, Type, and Description   * for each parameter.   */  public String[][] getParameterInfo()  {    String[][] info =    {      { PARAM_styleURL, "String", "URL to an XSL stylesheet" },      { PARAM_documentURL, "String", "URL to an XML document" },    };    return info;  }  /**   * Standard applet initialization.   */  public void init()  {    // PARAMETER SUPPORT    //          The following code retrieves the value of each parameter    // specified with the <PARAM> tag and stores it in a member    // variable.    //----------------------------------------------------------------------    String param;    // styleURL: Parameter description    //----------------------------------------------------------------------    param = getParameter(PARAM_styleURL);        // stylesheet parameters    m_parameters = new Hashtable();    if (param != null)      setStyleURL(param);    // documentURL: Parameter description    //----------------------------------------------------------------------    param = getParameter(PARAM_documentURL);    if (param != null)      setDocumentURL(param);    m_codeBase = this.getCodeBase();    m_documentBase = this.getDocumentBase();    // If you use a ResourceWizard-generated "control creator" class to    // arrange controls in your applet, you may want to call its    // CreateControls() method from within this method. Remove the following    // call to resize() before adding the call to CreateControls();    // CreateControls() does its own resizing.    //----------------------------------------------------------------------    resize(320, 240);  }      /**   *  Automatically called when the HTML client containing the applet loads.   *  This method starts execution of the applet thread.   */  public void start()  {    m_trustedAgent = new TrustedAgent();    Thread currentThread = Thread.currentThread();    m_trustedWorker = new Thread(currentThread.getThreadGroup(),                                 m_trustedAgent);    m_trustedWorker.start();    try    {      m_tfactory = TransformerFactory.newInstance();      this.showStatus("Causing Transformer and Parser to Load and JIT...");      // Prime the pump so that subsequent transforms are faster.      StringReader xmlbuf = new StringReader("<?xml version='1.0'?><foo/>");      StringReader xslbuf = new StringReader(        "<?xml version='1.0'?><xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'><xsl:template match='foo'><out/></xsl:template></xsl:stylesheet>");      PrintWriter pw = new PrintWriter(new StringWriter());      synchronized (m_tfactory)      {        Templates templates = m_tfactory.newTemplates(new StreamSource(xslbuf));        Transformer transformer = templates.newTransformer();        transformer.transform(new StreamSource(xmlbuf), new StreamResult(pw));      }      System.out.println("Primed the pump!");      this.showStatus("Ready to go!");    }    catch (Exception e)    {      this.showStatus("Could not prime the pump!");      System.out.println("Could not prime the pump!");      e.printStackTrace();    }  }  /**   * Do not call; this applet contains no UI or visual components.   *   */  public void paint(Graphics g){}      /**   * Automatically called when the HTML page containing the applet is no longer   * on the screen. Stops execution of the applet thread.   */  public void stop()  {    if (null != m_trustedWorker)    {      m_trustedWorker.stop();      // m_trustedWorker.destroy();      m_trustedWorker = null;    }    m_styleURLOfCached = null;    m_documentURLOfCached = null;  }       /**   * Cleanup; called when applet is terminated and unloaded.   */  public void destroy()  {    if (null != m_trustedWorker)    {      m_trustedWorker.stop();      // m_trustedWorker.destroy();      m_trustedWorker = null;    }    m_styleURLOfCached = null;    m_documentURLOfCached = null;  }  /**   * Set the URL to the XSL stylesheet that will be used   * to transform the input XML.  No processing is done yet.   * @param urlString valid URL string for XSL stylesheet.   */  public void setStyleURL(String urlString)  {    m_styleURL = urlString;  }  /**   * Set the URL to the XML document that will be transformed   * with the XSL stylesheet.  No processing is done yet.   * @param urlString valid URL string for XML document.   */  public void setDocumentURL(String urlString)  {    m_documentURL = urlString;  }  /**   * The processor keeps a cache of the source and   * style trees, so call this method if they have changed   * or you want to do garbage collection.   */  public void freeCache()  {    m_styleURLOfCached = null;    m_documentURLOfCached = null;  }  /**   * Set an attribute in the stylesheet, which gives the ability   * to have some dynamic selection control.   * @param nameOfIDAttrOfElemToModify The name of an attribute to search for a unique id.   * @param elemId The unique ID to look for.   * @param attrName Once the element is found, the name of the attribute to set.   * @param value The value to set the attribute to.   */  public void setStyleSheetAttribute(String nameOfIDAttrOfElemToModify,                                     String elemId, String attrName,                                     String value)  {    m_nameOfIDAttrOfElemToModify = nameOfIDAttrOfElemToModify;    m_elemIdToModify = elemId;    m_attrNameToSet = attrName;    m_attrValueToSet = value;  }  /**    * Stylesheet parameter key/value pair stored in a hashtable   */  transient Hashtable m_parameters;    /**   * Submit a stylesheet parameter.   *   * @param key stylesheet parameter key   * @param expr the parameter expression to be submitted.   * @see javax.xml.transform.Transformer#setParameter(String,Object)   */  public void setStylesheetParam(String key, String expr)  {    m_parameters.put(key, expr);  }  /**   * Given a String containing markup, escape the markup so it   * can be displayed in the browser.   *

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?