You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mo...@apache.org on 2001/08/02 17:08:19 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/trax TemplatesHandlerImpl.java TransformerFactoryImpl.java TransformerHandlerImpl.java

morten      01/08/02 08:08:19

  Modified:    java/src/org/apache/xalan/xsltc/dom DOMImpl.java
               java/src/org/apache/xalan/xsltc/trax
                        TransformerFactoryImpl.java
                        TransformerHandlerImpl.java
  Added:       java/src/org/apache/xalan/xsltc/trax
                        TemplatesHandlerImpl.java
  Log:
  Added missing TemplatesHandlerImpl file (implementation of the TrAX
  TemplatesHandler interface).
  Added initial implementation of getAssociatedStylesheet() in
  the TransformerFactoryImpl class.
  Changed behaviour of TransformerHandlerImpl class with regard to
  the setResult() method. This method now has to be called before
  startDocument() is called, which gives XSLTC the same behaviour
  as Xalan.
  PR:		n/a
  Obtained from:	n/a
  Submitted by:	morten@xml.apache.org
  Reviewed by:	morten@xml.apache.org
  
  Revision  Changes    Path
  1.15      +1 -3      xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java
  
  Index: DOMImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- DOMImpl.java	2001/07/30 13:35:41	1.14
  +++ DOMImpl.java	2001/08/02 15:08:19	1.15
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: DOMImpl.java,v 1.14 2001/07/30 13:35:41 morten Exp $
  + * @(#)$Id: DOMImpl.java,v 1.15 2001/08/02 15:08:19 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -2832,7 +2832,6 @@
   	 * SAX2: Receive notification of the end of a document.
   	 */
   	public void endDocument() {
  -
   	    _shortTexts = null;
   	    final int namesSize = _nextNameCode - NTYPES;
   
  @@ -2879,7 +2878,6 @@
   	public void startElement(String uri, String localName,
   				 String qname, Attributes attributes)
   	    throws SAXException {
  -
   	    // Get node index and setup parent/child references
   	    final int node = nextNode();
   	    linkChildren(node);
  
  
  
  1.17      +5 -2      xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerFactoryImpl.java
  
  Index: TransformerFactoryImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerFactoryImpl.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- TransformerFactoryImpl.java	2001/08/02 13:25:11	1.16
  +++ TransformerFactoryImpl.java	2001/08/02 15:08:19	1.17
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: TransformerFactoryImpl.java,v 1.16 2001/08/02 13:25:11 morten Exp $
  + * @(#)$Id: TransformerFactoryImpl.java,v 1.17 2001/08/02 15:08:19 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -261,7 +261,10 @@
       public Source getAssociatedStylesheet(Source source, String media,
   					  String title, String charset)
   	throws TransformerConfigurationException {
  -        throw new TransformerConfigurationException(NYI);
  +	// The org.apache.xalan.xsltc.copiler.Parser will locate the first
  +	// <?xml-stylesheeet ?> PI in the Source document and use that.
  +	// For now we'll leave it at that.
  +	return(source); // TODO - pass media/title/charset to Parser
       }
   
       /**
  
  
  
  1.2       +7 -1      xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerHandlerImpl.java
  
  Index: TransformerHandlerImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerHandlerImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TransformerHandlerImpl.java	2001/08/02 13:25:11	1.1
  +++ TransformerHandlerImpl.java	2001/08/02 15:08:19	1.2
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: TransformerHandlerImpl.java,v 1.1 2001/08/02 13:25:11 morten Exp $
  + * @(#)$Id: TransformerHandlerImpl.java,v 1.2 2001/08/02 15:08:19 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -87,6 +87,9 @@
   
       private boolean          _done = false; // Set in endDocument()
   
  +    private final static String NULL_RESULT_ERROR =
  +	"setResult() must be called prior to startDocument().";
  +
       /**
        * Cosntructor - pass in reference to a TransformerImpl object
        */
  @@ -172,6 +175,9 @@
        * Receive notification of the beginning of a document.
        */
       public void startDocument() throws SAXException {
  +	if (_result == null) {
  +	    throw new SAXException(NULL_RESULT_ERROR);
  +	}
   	_handler.startDocument();
       }
   
  
  
  
  1.1                  xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesHandlerImpl.java
  
  Index: TemplatesHandlerImpl.java
  ===================================================================
  /*
   * @(#)$Id: TemplatesHandlerImpl.java,v 1.1 2001/08/02 15:08:19 morten Exp $
   *
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 2001, Sun
   * Microsystems., http://www.sun.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * @author Morten Jorgensen
   *
   */
  
  package org.apache.xalan.xsltc.trax;
  
  import javax.xml.transform.*;
  import javax.xml.transform.sax.*;
  
  import org.apache.xalan.xsltc.Translet;
  import org.apache.xalan.xsltc.runtime.AbstractTranslet;
  import org.apache.xalan.xsltc.compiler.*;
  import org.apache.xalan.xsltc.compiler.util.Util;
  
  /**
   * Implementation of a JAXP1.1 TemplatesHandler
   */
  public class TemplatesHandlerImpl extends Parser implements TemplatesHandler {
  
      private String _defaultTransletName = "GregorSamsa";
      private String _systemId;
  
      public TemplatesHandlerImpl() {
  	super(null);
      }
  
      /**
       * Implements javax.xml.transform.sax.TemplatesHandler.getSystemId()
       * Get the base ID (URI or system ID) from where relative URLs will be
       * resolved.
       * @return The systemID that was set with setSystemId(String id)
       */
      public String getSystemId() {
  	return _systemId;
      }
  
      /**
       * Implements javax.xml.transform.sax.TemplatesHandler.setSystemId()
       * Get the base ID (URI or system ID) from where relative URLs will be
       * resolved.
       * @param id Base URI for this stylesheet
       */
      public void setSystemId(String id) {
  	_systemId = id;
      }
  
      public void init() {
  	// Create and initialize a stylesheet compiler
  	final XSLTC xsltc = new XSLTC();
  	super.setXSLTC(xsltc);
  	xsltc.setParser(this);
  	xsltc.init();
  	xsltc.setOutputType(XSLTC.BYTEARRAY_OUTPUT);
      }
  
      /**
       * Implements javax.xml.transform.sax.TemplatesHandler.getTemplates()
       * When a TemplatesHandler object is used as a ContentHandler or
       * DocumentHandler for the parsing of transformation instructions, it
       * creates a Templates object, which the caller can get once the SAX
       * events have been completed.
       * @return The Templates object that was created during the SAX event
       *         process, or null if no Templates object has been created.
       */
      public Templates getTemplates() {
  
  	try {
  	    // Create a placeholder for the translet bytecodes
  	    byte[][] bytecodes = null;
  
  	    final XSLTC xsltc = getXSLTC();
  
  	    // Set the translet class name if not already set
  	    String transletName = _defaultTransletName;
  	    if (_systemId != null) transletName = Util.baseName(_systemId);
  	    xsltc.setClassName(transletName);
  
  	    Stylesheet stylesheet = null;
  	    SyntaxTreeNode root = getDocumentRoot();
  
  	    // Compile the translet - this is where the work is done!
  	    if ((!errorsFound()) && (root != null)) {
  		// Create a Stylesheet element from the root node
  		stylesheet = makeStylesheet(root);
  		stylesheet.setSystemId(_systemId);
  		stylesheet.setParentStylesheet(null);
  		setCurrentStylesheet(stylesheet);
  		// Create AST under the Stylesheet element (parse & type-check)
  		createAST(stylesheet);
  	    }
  
  	    // Generate the bytecodes and output the translet class(es)
  	    if ((!errorsFound()) && (stylesheet != null)) {
  		stylesheet.setMultiDocument(xsltc.isMultiDocument());
  		stylesheet.translate();
  	    }
  
  	    xsltc.printWarnings();
  
  	    // Check that the transformation went well before returning
  	    if (bytecodes == null) {
  		xsltc.printErrors();
  		return null;
  	    }
  
  	    return(new TemplatesImpl(bytecodes, transletName));
  	}
  	catch (CompilerException e) {
  	    return null;
  	}
      }
  }
  
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org