You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by zo...@apache.org on 2003/12/04 17:44:54 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/runtime AbstractTranslet.java BasisLibrary.java

zongaro     2003/12/04 08:44:54

  Modified:    java/src/org/apache/xalan/xsltc/dom DOMAdapter.java
                        DOMWSFilter.java DocumentCache.java KeyIndex.java
                        LoadDocument.java SAXImpl.java XSLTCDTMManager.java
               java/src/org/apache/xalan/xsltc/runtime
                        AbstractTranslet.java BasisLibrary.java
  Added:       java/src/org/apache/xalan/xsltc DOMEnhancedForDTM.java
  Log:
  Changes to permit different DTM implementations to be supplied to XSLTC.
  
  Part of the change was to replace hard-coded references to SAXImpl with
  references to a new interface - DOMEnhancedForDTM.  This part of the change was
  supplied by Joseph Kesselman (keshlam@us.ibm.com).
  
  The other part of the change was to use ObjectFactory to look up a new XSLTC
  DTM Manager service provider (org.apache.xalan.xsltc.dom.XSLTCDTMManager).  The
  provider is looked up once when a TransformerFactory is created, and used by
  any Transformer objects created by that TransformerFactory.
  
  Revision  Changes    Path
  1.1                  xml-xalan/java/src/org/apache/xalan/xsltc/DOMEnhancedForDTM.java
  
  Index: DOMEnhancedForDTM.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2003 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) 1999, Lotus
   * Development Corporation., http://www.lotus.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  package org.apache.xalan.xsltc;
  
  /**
   * Interface for SAXImpl which adds methods used at run-time, over and above
   * those provided by the XSLTC DOM interface. An attempt to avoid the current
   * "Is the DTM a DOM, if so is it a SAXImpl, . . .
   * which was producing some ugly replicated code
   * and introducing bugs where that multipathing had not been
   * done.  This makes it easier to provide other DOM/DOMEnhancedForDTM
   * implementations, rather than hard-wiring XSLTC to SAXImpl.
   * 
   * @author Joseph Kesselman
   *
   */
  public interface DOMEnhancedForDTM extends DOM {
      public short[] getMapping(String[] names, String[] uris, int[] types);
      public int[] getReverseMapping(String[] names, String[] uris, int[] types);
      public short[] getNamespaceMapping(String[] namespaces);
      public short[] getReverseNamespaceMapping(String[] namespaces);
      public String getDocumentURI();
      public void setDocumentURI(String uri);    
      public int getExpandedTypeID2(int nodeHandle);
      public boolean hasDOMSource();
      public int getElementById(String idString);    
  }
  
  
  
  1.22      +44 -37    xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMAdapter.java
  
  Index: DOMAdapter.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMAdapter.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- DOMAdapter.java	24 Nov 2003 22:18:51 -0000	1.21
  +++ DOMAdapter.java	4 Dec 2003 16:44:53 -0000	1.22
  @@ -64,6 +64,7 @@
   package org.apache.xalan.xsltc.dom;
   
   import org.apache.xalan.xsltc.DOM;
  +import org.apache.xalan.xsltc.DOMEnhancedForDTM;
   import org.apache.xalan.xsltc.StripFilter;
   import org.apache.xalan.xsltc.TransletException;
   import org.apache.xalan.xsltc.runtime.Hashtable;
  @@ -77,7 +78,7 @@
   public final class DOMAdapter implements DOM {
   
       // Mutually exclusive casting of DOM interface to known implementations
  -    private SAXImpl _saxImpl;
  +    private DOMEnhancedForDTM _enhancedDOM;
   
       private DOM _dom;
   
  @@ -101,8 +102,8 @@
                         String[] urisArray,
                         int[] typesArray,
                         String[] namespaceArray) {
  -        if (dom instanceof SAXImpl){
  -            _saxImpl = (SAXImpl) dom;
  +        if (dom instanceof DOMEnhancedForDTM){
  +            _enhancedDOM = (DOMEnhancedForDTM) dom;
           }
   
           _dom = dom;
  @@ -142,8 +143,9 @@
   
       private short[] getMapping() {
           if (_mapping == null) {
  -            if (_saxImpl != null) {
  -                _mapping = _saxImpl.getMapping(_namesArray, _urisArray, _typesArray);
  +            if (_enhancedDOM != null) {
  +                _mapping = _enhancedDOM.getMapping(_namesArray, _urisArray,
  +                                                   _typesArray);
               } 
           }
           return _mapping;
  @@ -151,8 +153,10 @@
   
       private int[] getReverse() {
   	if (_reverse == null) {
  -            if (_saxImpl != null) {
  -	        _reverse = _saxImpl.getReverseMapping(_namesArray, _urisArray, _typesArray);
  +            if (_enhancedDOM != null) {
  +	        _reverse = _enhancedDOM.getReverseMapping(_namesArray,
  +                                                          _urisArray,
  +                                                          _typesArray);
               }
   	}
   	return _reverse;
  @@ -160,8 +164,8 @@
   
       private short[] getNSMapping() {
   	if (_NSmapping == null) {
  -            if (_saxImpl != null) {
  -	        _NSmapping = _saxImpl.getNamespaceMapping(_namespaceArray);
  +            if (_enhancedDOM != null) {
  +	        _NSmapping = _enhancedDOM.getNamespaceMapping(_namespaceArray);
               }
   	}
   	return _NSmapping;
  @@ -169,8 +173,9 @@
   
       private short[] getNSReverse() {
   	if (_NSreverse == null) {
  -            if (_saxImpl != null) {
  -	        _NSreverse = _saxImpl.getReverseNamespaceMapping(_namespaceArray);
  +            if (_enhancedDOM != null) {
  +	        _NSreverse = _enhancedDOM
  +                                  .getReverseNamespaceMapping(_namespaceArray);
               }
   	}
   	return _NSreverse;
  @@ -188,8 +193,8 @@
       }
       
       public DTMAxisIterator getChildren(final int node) {
  -        if (_saxImpl != null) {
  -            return _saxImpl.getChildren(node);
  +        if (_enhancedDOM != null) {
  +            return _enhancedDOM.getChildren(node);
           }
           else {
               DTMAxisIterator iterator = _dom.getChildren(node);
  @@ -204,8 +209,8 @@
       public DTMAxisIterator getTypedChildren(final int type) {
           final int[] reverse = getReverse();
   
  -        if (_saxImpl != null) {
  -            return _saxImpl.getTypedChildren(reverse[type]);
  +        if (_enhancedDOM != null) {
  +            return _enhancedDOM.getTypedChildren(reverse[type]);
           }
           else {
               return _dom.getTypedChildren(type);
  @@ -218,8 +223,8 @@
       }
   
       public DTMAxisIterator getAxisIterator(final int axis) {
  -        if (_saxImpl != null) {
  -            return _saxImpl.getAxisIterator(axis);
  +        if (_enhancedDOM != null) {
  +            return _enhancedDOM.getAxisIterator(axis);
           }
           else {
               return _dom.getAxisIterator(axis);
  @@ -229,8 +234,8 @@
       public DTMAxisIterator getTypedAxisIterator(final int axis,
                                                   final int type) {
           final int[] reverse = getReverse();
  -        if (_saxImpl != null) {
  -            return _saxImpl.getTypedAxisIterator(axis, reverse[type]);
  +        if (_enhancedDOM != null) {
  +            return _enhancedDOM.getTypedAxisIterator(axis, reverse[type]);
           } else {
               return _dom.getTypedAxisIterator(axis, type);
           }      
  @@ -260,8 +265,8 @@
       }
       
       public int getExpandedTypeID(final int node) {
  -        if (_saxImpl != null) {
  -            return getMapping()[_saxImpl.getExpandedTypeID2(node)];
  +        if (_enhancedDOM != null) {
  +            return getMapping()[_enhancedDOM.getExpandedTypeID2(node)];
           }
           else {
               return getMapping()[_dom.getExpandedTypeID(node)];
  @@ -309,8 +314,8 @@
       
       public String getStringValueX(final int node) 
       {    	
  -    	if (_saxImpl != null) {
  -            return _saxImpl.getStringValueX(node);
  +    	if (_enhancedDOM != null) {
  +            return _enhancedDOM.getStringValueX(node);
           }
           else {
               if (node == DTM.NULL) {
  @@ -335,8 +340,8 @@
       public String shallowCopy(final int node, SerializationHandler handler)
   	throws TransletException 
       {
  -        if (_saxImpl != null) {
  -            return _saxImpl.shallowCopy(node, handler);
  +        if (_enhancedDOM != null) {
  +            return _enhancedDOM.shallowCopy(node, handler);
           }
           else {
               return _dom.shallowCopy(node, handler);
  @@ -351,8 +356,8 @@
       public void characters(final int textNode, SerializationHandler handler)
         throws TransletException 
       {
  -        if (_saxImpl != null) {
  -            _saxImpl.characters(textNode, handler);
  +        if (_enhancedDOM != null) {
  +            _enhancedDOM.characters(textNode, handler);
           }
           else {
               _dom.characters(textNode, handler);
  @@ -391,15 +396,15 @@
   
       public void setDocumentURI(String uri) 
       {
  -        if (_saxImpl != null) {
  -            _saxImpl.setDocumentURI(uri);
  +        if (_enhancedDOM != null) {
  +            _enhancedDOM.setDocumentURI(uri);
           }
       }
   
       public String getDocumentURI()
       {
  -        if (_saxImpl != null) {
  -            return _saxImpl.getDocumentURI();
  +        if (_enhancedDOM != null) {
  +            return _enhancedDOM.getDocumentURI();
           }
           else {
               return "";
  @@ -441,8 +446,8 @@
        */ 
       public DOM getResultTreeFrag(int initSize, int rtfType)
       {
  -    	if (_saxImpl != null) {
  -    	    return _saxImpl.getResultTreeFrag(initSize, rtfType);
  +    	if (_enhancedDOM != null) {
  +    	    return _enhancedDOM.getResultTreeFrag(initSize, rtfType);
       	}
       	else {
       	    return _dom.getResultTreeFrag(initSize, rtfType);
  @@ -452,10 +457,12 @@
       /**
        * Return a instance of a DOM class to be used as an RTF
        */ 
  -    public DOM getResultTreeFrag(int initSize, int rtfType, boolean addToManager)
  +    public DOM getResultTreeFrag(int initSize, int rtfType,
  +                                 boolean addToManager)
       {
  -    	if (_saxImpl != null) {
  -    	    return _saxImpl.getResultTreeFrag(initSize, rtfType, addToManager);
  +    	if (_enhancedDOM != null) {
  +    	    return _enhancedDOM.getResultTreeFrag(initSize, rtfType,
  +                                                  addToManager);
       	}
       	else {
   	    return _dom.getResultTreeFrag(initSize, rtfType, addToManager);
  
  
  
  1.4       +8 -6      xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMWSFilter.java
  
  Index: DOMWSFilter.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMWSFilter.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DOMWSFilter.java	24 Nov 2003 22:18:51 -0000	1.3
  +++ DOMWSFilter.java	4 Dec 2003 16:44:53 -0000	1.4
  @@ -60,6 +60,7 @@
   package org.apache.xalan.xsltc.dom;
   
   import org.apache.xalan.xsltc.DOM;
  +import org.apache.xalan.xsltc.DOMEnhancedForDTM;
   import org.apache.xalan.xsltc.StripFilter;
   import org.apache.xalan.xsltc.runtime.AbstractTranslet;
   import org.apache.xalan.xsltc.runtime.Hashtable;
  @@ -119,8 +120,8 @@
               DOM dom = (DOM)dtm;
               int type = 0;
   
  -            if (dtm instanceof SAXImpl) {
  -                SAXImpl saxImpl = (SAXImpl)dtm;
  +            if (dtm instanceof DOMEnhancedForDTM) {
  +                DOMEnhancedForDTM mappableDOM = (DOMEnhancedForDTM)dtm;
                   
                   short[] mapping;
                   if (dtm == m_currentDTM) {
  @@ -129,16 +130,17 @@
                   else {  
                       mapping = (short[])m_mappings.get(dtm);
                       if (mapping == null) {
  -                        mapping = saxImpl.getMapping(m_translet.getNamesArray(),
  +                        mapping = mappableDOM.getMapping(
  +                                     m_translet.getNamesArray(),
                                        m_translet.getUrisArray(),
                                        m_translet.getTypesArray());
                           m_mappings.put(dtm, mapping);
  -                        m_currentDTM = saxImpl;
  +                        m_currentDTM = dtm;
                           m_currentMapping = mapping;
                       }
                   }
                   
  -                int expType = saxImpl.getExpandedTypeID(node);
  +                int expType = mappableDOM.getExpandedTypeID(node);
                   
                   // %OPT% The mapping array does not have information about all the
                   // exptypes. However it does contain enough information about all names
  
  
  
  1.13      +4 -3      xml-xalan/java/src/org/apache/xalan/xsltc/dom/DocumentCache.java
  
  Index: DocumentCache.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DocumentCache.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- DocumentCache.java	30 Jun 2003 15:34:51 -0000	1.12
  +++ DocumentCache.java	4 Dec 2003 16:44:53 -0000	1.13
  @@ -78,6 +78,7 @@
   
   import org.apache.xalan.xsltc.DOM;
   import org.apache.xalan.xsltc.DOMCache;
  +import org.apache.xalan.xsltc.DOMEnhancedForDTM;
   import org.apache.xalan.xsltc.Translet;
   import org.apache.xalan.xsltc.runtime.AbstractTranslet;
   import org.apache.xalan.xsltc.runtime.BasisLibrary;
  @@ -115,7 +116,7 @@
   	private long _buildTime;
   
   	// DOM and DTD handler references
  -	private SAXImpl    _dom = null;
  +	private DOMEnhancedForDTM _dom = null;
   	
   	/**
   	 * Constructor - load document and initialise statistics
  @@ -138,7 +139,7 @@
   
   	    try {
   		final long stamp = System.currentTimeMillis();
  -                _dom = (SAXImpl)_dtmManager.getDTM(
  +                _dom = (DOMEnhancedForDTM)_dtmManager.getDTM(
                                    new SAXSource(_reader, new InputSource(uri)),
                                    false, null, true, false);
   		_dom.setDocumentURI(uri);
  
  
  
  1.12      +14 -11    xml-xalan/java/src/org/apache/xalan/xsltc/dom/KeyIndex.java
  
  Index: KeyIndex.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/KeyIndex.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- KeyIndex.java	1 Apr 2003 21:39:16 -0000	1.11
  +++ KeyIndex.java	4 Dec 2003 16:44:53 -0000	1.12
  @@ -66,6 +66,7 @@
   import java.util.StringTokenizer;
   
   import org.apache.xalan.xsltc.DOM;
  +import org.apache.xalan.xsltc.DOMEnhancedForDTM;
   import org.apache.xalan.xsltc.runtime.Hashtable;
   import org.apache.xalan.xsltc.util.IntegerArray;
   import org.apache.xml.dtm.DTM;
  @@ -91,7 +92,7 @@
        */
       private DOM        _dom;
       
  -    private SAXImpl    _saxImpl;
  +    private DOMEnhancedForDTM    _enhancedDOM;
   
       /**
        * Store position after call to setMark()
  @@ -148,7 +149,8 @@
               final String token = (String) values.nextElement();
   	    IntegerArray nodes = (IntegerArray) _index.get(token);
   
  -            if (nodes == null && _saxImpl != null && _saxImpl.hasDOMSource()) {
  +            if (nodes == null && _enhancedDOM != null
  +                && _enhancedDOM.hasDOMSource()) {
                   nodes = getDOMNodeById(token);
               }
   
  @@ -171,8 +173,8 @@
        */
       public IntegerArray getDOMNodeById(String id) {
           IntegerArray nodes = null;
  -        if (_saxImpl != null) {
  -            int ident = _saxImpl.getElementById(id);
  +        if (_enhancedDOM != null) {
  +            int ident = _enhancedDOM.getElementById(id);
               if (ident != DTM.NULL) {
   	        nodes = new IntegerArray();
   	    	_index.put(id, nodes);
  @@ -210,7 +212,8 @@
                   final String token = (String) values.nextElement();
   		IntegerArray nodes = (IntegerArray) _index.get(token);
   
  -		if (nodes == null && _saxImpl != null && _saxImpl.hasDOMSource()) {
  +		if (nodes == null && _enhancedDOM != null
  +                    && _enhancedDOM.hasDOMSource()) {
   		    nodes = getDOMNodeById(token);	
   		}
   		if (nodes != null && nodes.indexOf(node) >= 0) {
  @@ -221,7 +224,7 @@
   	}
   	else {
   	    IntegerArray nodes = (IntegerArray) _index.get(value);
  -            if (nodes == null && _saxImpl != null && _saxImpl.hasDOMSource()) {
  +            if (nodes == null && _enhancedDOM != null && _enhancedDOM.hasDOMSource()) {
                   nodes = getDOMNodeById(string);
               }
   	    return (nodes != null && nodes.indexOf(node) >= 0) ? 1 : 0;
  @@ -311,13 +314,13 @@
       
       public void setDom(DOM dom) {
       	_dom = dom;
  -    	if (dom instanceof SAXImpl) {
  -    	    _saxImpl = (SAXImpl)dom;
  +    	if (dom instanceof DOMEnhancedForDTM) {
  +    	    _enhancedDOM = (DOMEnhancedForDTM)dom;
       	}
       	else if (dom instanceof DOMAdapter) {
       	    DOM idom = ((DOMAdapter)dom).getDOMImpl();
  -    	    if (idom instanceof SAXImpl) {
  -    	        _saxImpl = (SAXImpl)idom;
  +    	    if (idom instanceof DOMEnhancedForDTM) {
  +    	        _enhancedDOM = (DOMEnhancedForDTM)idom;
       	    }
       	}
       }
  
  
  
  1.24      +18 -13    xml-xalan/java/src/org/apache/xalan/xsltc/dom/LoadDocument.java
  
  Index: LoadDocument.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/LoadDocument.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- LoadDocument.java	30 Jun 2003 18:45:38 -0000	1.23
  +++ LoadDocument.java	4 Dec 2003 16:44:53 -0000	1.24
  @@ -68,6 +68,7 @@
   
   import org.apache.xalan.xsltc.DOM;
   import org.apache.xalan.xsltc.DOMCache;
  +import org.apache.xalan.xsltc.DOMEnhancedForDTM;
   import org.apache.xalan.xsltc.TransletException;
   import org.apache.xalan.xsltc.runtime.AbstractTranslet;
   import org.apache.xalan.xsltc.trax.TemplatesImpl;
  @@ -211,20 +212,21 @@
           if (mask != -1) {
               DOM newDom = ((DOMAdapter)multiplexer.getDOMAdapter(uri))
                                          .getDOMImpl();
  -            if (newDom instanceof SAXImpl) {
  -                return new SingletonIterator(((SAXImpl)newDom).getDocument(),
  +            if (newDom instanceof DOMEnhancedForDTM) {
  +                return new SingletonIterator(((DOMEnhancedForDTM)newDom)
  +                                                               .getDocument(),
                                                true);
               } 
           }
   
           // Check if we can get the DOM from a DOMCache
           DOMCache cache = translet.getDOMCache();
  -        SAXImpl newdom;
  +        DOM newdom;
   
           mask = multiplexer.nextMask(); // peek
   
           if (cache != null) {
  -            newdom = (SAXImpl)cache.retrieveDocument(base, originalUri, translet);
  +            newdom = cache.retrieveDocument(base, originalUri, translet);
               if (newdom == null) {
                   final Exception e = new FileNotFoundException(originalUri);
                   throw new TransletException(e);
  @@ -233,21 +235,24 @@
               // Parse the input document and construct DOM object
               // Trust the DTMManager to pick the right parser and
               // set up the DOM correctly.
  -            XSLTCDTMManager dtmManager = (XSLTCDTMManager)multiplexer.getDTMManager();
  -            newdom = (SAXImpl)dtmManager.getDTM(new StreamSource(uri),
  -                                       false, null, true, false,
  -                                       translet.hasIdCall(), cacheDOM);
  -                                
  +            XSLTCDTMManager dtmManager = (XSLTCDTMManager)multiplexer
  +                                                              .getDTMManager();
  +            DOMEnhancedForDTM enhancedDOM =
  +                    (DOMEnhancedForDTM) dtmManager.getDTM(new StreamSource(uri),
  +                                            false, null, true, false,
  +                                            translet.hasIdCall(), cacheDOM);
  +            newdom = enhancedDOM;
  +
               // Cache the stylesheet DOM in the Templates object
               if (cacheDOM) {
                   TemplatesImpl templates = (TemplatesImpl)translet.getTemplates();
                   if (templates != null) {
  -                    templates.setStylesheetDOM(newdom);
  +                    templates.setStylesheetDOM(enhancedDOM);
                   }
               }
               
  -            translet.prepassDocument(newdom);
  -            newdom.setDocumentURI(uri);
  +            translet.prepassDocument(enhancedDOM);
  +            enhancedDOM.setDocumentURI(uri);
           }
   
           // Wrap the DOM object in a DOM adapter and add to multiplexer
  
  
  
  1.15      +4 -2      xml-xalan/java/src/org/apache/xalan/xsltc/dom/SAXImpl.java
  
  Index: SAXImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/SAXImpl.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- SAXImpl.java	24 Nov 2003 22:18:51 -0000	1.14
  +++ SAXImpl.java	4 Dec 2003 16:44:53 -0000	1.15
  @@ -73,6 +73,7 @@
   import javax.xml.transform.dom.DOMSource;
   
   import org.apache.xalan.xsltc.DOM;
  +import org.apache.xalan.xsltc.DOMEnhancedForDTM;
   import org.apache.xalan.xsltc.StripFilter;
   import org.apache.xalan.xsltc.TransletException;
   import org.apache.xalan.xsltc.runtime.BasisLibrary;
  @@ -113,7 +114,8 @@
    *
    * <p>SAXImpl extends SAX2DTM2 instead of SAX2DTM for better performance.
    */
  -public final class SAXImpl extends SAX2DTM2 implements DOM, DOMBuilder
  +public final class SAXImpl extends SAX2DTM2
  +                           implements DOMEnhancedForDTM, DOMBuilder
   {
       
       /* ------------------------------------------------------------------- */
  
  
  
  1.4       +36 -9     xml-xalan/java/src/org/apache/xalan/xsltc/dom/XSLTCDTMManager.java
  
  Index: XSLTCDTMManager.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/XSLTCDTMManager.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XSLTCDTMManager.java	23 Jun 2003 15:23:39 -0000	1.3
  +++ XSLTCDTMManager.java	4 Dec 2003 16:44:53 -0000	1.4
  @@ -68,6 +68,7 @@
   import org.apache.xml.dtm.ref.DTMManagerDefault;
   import org.apache.xml.res.XMLErrorResources;
   import org.apache.xml.res.XMLMessages;
  +import org.apache.xml.utils.ObjectFactory;
   import org.apache.xml.utils.SystemIDResolver;
   import org.apache.xalan.xsltc.trax.DOM2SAX;
   
  @@ -83,7 +84,10 @@
   {
   	
       /** The default class name to use as the manager. */
  -    private static String defaultClassName =
  +    private static final String DEFAULT_CLASS_NAME =
  +        "org.apache.xalan.xsltc.dom.XSLTCDTMManager";
  +
  +    private static final String DEFAULT_PROP_NAME =
           "org.apache.xalan.xsltc.dom.XSLTCDTMManager";
   
       /** Set this to true if you want a dump of the DTM after creation */
  @@ -92,7 +96,6 @@
       /** Set this to true if you want basic diagnostics */
       private static final boolean DEBUG = false;
   
  -
       /**
        * Constructor DTMManagerDefault
        *
  @@ -101,23 +104,43 @@
       {
           super();
       } 
  -  
  +
       /**
        * Obtain a new instance of a <code>DTMManager</code>.
        * This static method creates a new factory instance.
        * The current implementation just returns a new XSLTCDTMManager instance.
  -     *
  -     * %REVISIT% Do we need the factory lookup mechanism for class loading here?
  -     * Factory lookup will add a lot of complexity and also has a performance hit.
  -     * There is currently no need to do it unless it is proved to be useful.
        */
       public static XSLTCDTMManager newInstance()
       {
  -        XSLTCDTMManager factoryImpl = new XSLTCDTMManager();
  -        return factoryImpl;
  +        return new XSLTCDTMManager();
       } 
   
       /**
  +     * Look up the class that provides the XSLTC DTM Manager service.
  +     * The following lookup procedure is used to find the service provider.
  +     * <ol>
  +     * <li>The value of the
  +     * <code>org.apache.xalan.xsltc.dom.XSLTCDTMManager</code> property, is
  +     * checked.</li>
  +     * <li>The <code>xalan.propeties</code> file is checked for a property
  +     * of the same name.</li>
  +     * <li>The
  +     * <code>META-INF/services/org.apache.xalan.xsltc.dom.XSLTCDTMManager</code>
  +     * file is checked.
  +     * </ol>
  +     * The default is <code>org.apache.xalan.xsltc.dom.XSLTCDTMManager</code>.
  +     */
  +    public static Class getDTMManagerClass() {
  +        Class mgrClass = ObjectFactory.lookUpFactoryClass(DEFAULT_PROP_NAME,
  +                                                          null,
  +                                                          DEFAULT_CLASS_NAME);
  +        // If no class found, default to this one.  (This should never happen -
  +        // the ObjectFactory has already been told that the current class is
  +        // the default).
  +        return (mgrClass != null) ? mgrClass : XSLTCDTMManager.class;
  +    }
  +
  +    /**
        * Get an instance of a DTM, loaded with the content from the
        * specified source.  If the unique flag is true, a new instance will
        * always be returned.  Otherwise it is up to the DTMManager to return a
  @@ -407,6 +430,10 @@
                   }
                   catch (Exception e) {
                       throw new org.apache.xml.utils.WrappedRuntimeException(e);
  +                } finally {
  +                    if (!hasUserReader) {
  +                        releaseXMLReader(reader);
  +                    }
                   }
   
                   if (DUMPTREE) {
  
  
  
  1.51      +6 -6      xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java
  
  Index: AbstractTranslet.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java,v
  retrieving revision 1.50
  retrieving revision 1.51
  diff -u -r1.50 -r1.51
  --- AbstractTranslet.java	24 Nov 2003 22:18:54 -0000	1.50
  +++ AbstractTranslet.java	4 Dec 2003 16:44:53 -0000	1.51
  @@ -77,11 +77,11 @@
   
   import org.apache.xalan.xsltc.DOM;
   import org.apache.xalan.xsltc.DOMCache;
  +import org.apache.xalan.xsltc.DOMEnhancedForDTM;
   import org.apache.xalan.xsltc.Translet;
   import org.apache.xalan.xsltc.TransletException;
   import org.apache.xalan.xsltc.dom.DOMAdapter;
   import org.apache.xalan.xsltc.dom.KeyIndex;
  -import org.apache.xalan.xsltc.dom.SAXImpl;
   import org.apache.xalan.xsltc.runtime.output.TransletOutputHandlerFactory;
   import org.apache.xml.dtm.DTMAxisIterator;
   import org.apache.xml.serializer.SerializationHandler;
  @@ -343,18 +343,18 @@
        */
       private final void buildIDIndex(DOM document) {
           
  -        if (document instanceof SAXImpl) {
  -            SAXImpl saxImpl = (SAXImpl)document;
  +        if (document instanceof DOMEnhancedForDTM) {
  +            DOMEnhancedForDTM enhancedDOM = (DOMEnhancedForDTM)document;
               
               // If the input source is DOMSource, the KeyIndex table is not
               // built at this time. It will be built later by the lookupId()
               // and containsId() methods of the KeyIndex class.
  -            if (saxImpl.hasDOMSource()) {
  +            if (enhancedDOM.hasDOMSource()) {
                   buildKeyIndex(ID_INDEX_NAME, document);
                   return;
               }
               else {
  -                final Hashtable elementsByID = saxImpl.getElementsWithIDs();
  +                final Hashtable elementsByID = enhancedDOM.getElementsWithIDs();
   
                   if (elementsByID == null) {
               	    return;
  
  
  
  1.65      +3 -4      xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java
  
  Index: BasisLibrary.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java,v
  retrieving revision 1.64
  retrieving revision 1.65
  diff -u -r1.64 -r1.65
  --- BasisLibrary.java	24 Nov 2003 22:18:54 -0000	1.64
  +++ BasisLibrary.java	4 Dec 2003 16:44:53 -0000	1.65
  @@ -82,7 +82,6 @@
   import org.apache.xalan.xsltc.dom.AbsoluteIterator;
   import org.apache.xalan.xsltc.dom.Axis;
   import org.apache.xalan.xsltc.dom.DOMAdapter;
  -import org.apache.xalan.xsltc.dom.SAXImpl;
   import org.apache.xalan.xsltc.dom.MultiDOM;
   import org.apache.xalan.xsltc.dom.SingletonIterator;
   import org.apache.xalan.xsltc.dom.StepIterator;
  @@ -1191,8 +1190,8 @@
   	    DTMDefaultBase dtm = (DTMDefaultBase)((DOMAdapter)multiDOM.getMain()).getDOMImpl();
   	    DTMManager dtmManager = dtm.getManager();
   	    
  -	    SAXImpl idom = (SAXImpl)dtmManager.getDTM(new DOMSource(doc), false,
  -						      null, true, false);
  +	    DOM idom = (DOM)dtmManager.getDTM(new DOMSource(doc), false,
  +					      null, true, false);
   	    // Create DOMAdapter and register with MultiDOM
   	    DOMAdapter domAdapter = new DOMAdapter(idom, 
                   translet.getNamesArray(),
  
  
  

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