tmiller     01/12/12 12:07:54

  Modified:    java/src/org/apache/xalan/xsltc/trax
                        SmartTransformerFactoryImpl.java
  Log:
  store error listener and or uri resolver locally
  set in real factory when needed
  
  Revision  Changes    Path
  1.4       +83 -31    
xml-xalan/java/src/org/apache/xalan/xsltc/trax/SmartTransformerFactoryImpl.java
  
  Index: SmartTransformerFactoryImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/SmartTransformerFactoryImpl.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SmartTransformerFactoryImpl.java  2001/12/11 20:46:13     1.3
  +++ SmartTransformerFactoryImpl.java  2001/12/12 20:07:54     1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: SmartTransformerFactoryImpl.java,v 1.3 2001/12/11 20:46:13 
tmiller Exp $
  + * @(#)$Id: SmartTransformerFactoryImpl.java,v 1.4 2001/12/12 20:07:54 
tmiller Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -65,6 +65,8 @@
   
   import javax.xml.transform.*;
   import javax.xml.transform.sax.*;
  +import javax.xml.transform.dom.*;
  +import javax.xml.transform.stream.*;
   import org.xml.sax.XMLFilter;
   import org.xml.sax.InputSource;
   import org.apache.xalan.xsltc.compiler.XSLTC;
  @@ -82,6 +84,8 @@
       private TransformerFactory _xsltcFactory = null;
       private TransformerFactory _xalanFactory = null;
       private TransformerFactory _currFactory = null;
  +    private ErrorListener      _errorlistener = null;
  +    private URIResolver        _uriresolver = null;
   
       /**
        * implementation of the SmartTransformerFactory. This factory
  @@ -145,21 +149,11 @@
       public void setErrorListener(ErrorListener listener) 
        throws IllegalArgumentException 
       {
  -     if (_xsltcFactory == null) {
  -         createXSLTCTransformerFactory();
  -     } 
  -     if (_xalanFactory == null) {
  -         createXalanTransformerFactory();
  -     } 
  -     _xsltcFactory.setErrorListener(listener);
  -     _xalanFactory.setErrorListener(listener);
  +     _errorlistener = listener;
       }
   
       public ErrorListener getErrorListener() { 
  -        if (_xsltcFactory == null) {
  -            createXSLTCTransformerFactory();
  -        }
  -     return _xsltcFactory.getErrorListener(); 
  +     return _errorlistener;
       }
   
       public Object getAttribute(String name) 
  @@ -197,31 +191,41 @@
           }
       }
   
  +    /**
  +     * javax.xml.transform.sax.TransformerFactory implementation.
  +     * Look up the value of a feature (to see if it is supported).
  +     * This method must be updated as the various methods and features of 
this
  +     * class are implemented.
  +     *
  +     * @param name The feature name
  +     * @return 'true' if feature is supported, 'false' if not
  +     */
       public boolean getFeature(String name) { 
  -     // GTM: may have to treat like set/get attribute...
  -        if (_currFactory == null) {
  -            createXSLTCTransformerFactory();
  -        }
  -     return _currFactory.getFeature(name);
  +     // All supported features should be listed here
  +        String[] features = {
  +            DOMSource.FEATURE,
  +            DOMResult.FEATURE,
  +            SAXSource.FEATURE,
  +            SAXResult.FEATURE,
  +            StreamSource.FEATURE,
  +            StreamResult.FEATURE
  +        };
  +
  +        // Inefficient, but it really does not matter in a function like this
  +        for (int i=0; i<features.length; i++) {
  +            if (name.equals(features[i])) return true;
  +     }
  +
  +        // Feature not supported
  +        return false;
       }
   
       public URIResolver getURIResolver() {
  -     // GTM: may have to treat like set/get attribute...
  -        if (_currFactory == null) {
  -            createXSLTCTransformerFactory();
  -        }
  -     return _currFactory.getURIResolver();
  +     return _uriresolver; 
       } 
   
       public void setURIResolver(URIResolver resolver) {
  -        if (_xsltcFactory == null) {
  -            createXSLTCTransformerFactory();
  -        }
  -        if (_xalanFactory == null) {
  -            createXalanTransformerFactory();
  -        }
  -     _xsltcFactory.setURIResolver(resolver);
  -     _xalanFactory.setURIResolver(resolver);
  +     _uriresolver = resolver;
       }
   
       public Source getAssociatedStylesheet(Source source, String media,
  @@ -246,6 +250,12 @@
        if (_xalanFactory == null) {
               createXalanTransformerFactory();
           }
  +     if (_errorlistener != null) {
  +         _xalanFactory.setErrorListener(_errorlistener);         
  +     }
  +     if (_uriresolver != null) {
  +         _xalanFactory.setURIResolver(_uriresolver);
  +     }
        _currFactory = _xalanFactory;    
        return _currFactory.newTransformer(); 
       }
  @@ -262,6 +272,12 @@
           if (_xalanFactory == null) {
               createXalanTransformerFactory();
           }
  +     if (_errorlistener != null) {
  +         _xalanFactory.setErrorListener(_errorlistener);         
  +     }
  +     if (_uriresolver != null) {
  +         _xalanFactory.setURIResolver(_uriresolver);
  +     }
        _currFactory = _xalanFactory;    
        return _currFactory.newTransformer(source); 
       }
  @@ -278,6 +294,12 @@
           if (_xsltcFactory == null) {
               createXSLTCTransformerFactory();
           }
  +     if (_errorlistener != null) {
  +         _xsltcFactory.setErrorListener(_errorlistener);         
  +     }
  +     if (_uriresolver != null) {
  +         _xsltcFactory.setURIResolver(_uriresolver);
  +     }
        _currFactory = _xsltcFactory;    
        return _currFactory.newTemplates(source); 
       }
  @@ -293,6 +315,12 @@
           if (_xsltcFactory == null) {
               createXSLTCTransformerFactory();
           }
  +     if (_errorlistener != null) {
  +         _xsltcFactory.setErrorListener(_errorlistener);         
  +     }
  +     if (_uriresolver != null) {
  +         _xsltcFactory.setURIResolver(_uriresolver);
  +     }
        return ((SAXTransformerFactory)_xsltcFactory).newTemplatesHandler();
       }
   
  @@ -307,6 +335,12 @@
           if (_xalanFactory == null) {
               createXalanTransformerFactory();
           }
  +     if (_errorlistener != null) {
  +         _xalanFactory.setErrorListener(_errorlistener);         
  +     }
  +     if (_uriresolver != null) {
  +         _xalanFactory.setURIResolver(_uriresolver);
  +     }
        return ((SAXTransformerFactory)_xalanFactory).newTransformerHandler(); 
       }
   
  @@ -321,6 +355,12 @@
           if (_xalanFactory == null) {
               createXalanTransformerFactory();
           }
  +     if (_errorlistener != null) {
  +         _xalanFactory.setErrorListener(_errorlistener);         
  +     }
  +     if (_uriresolver != null) {
  +         _xalanFactory.setURIResolver(_uriresolver);
  +     }
        return 
               
((SAXTransformerFactory)_xalanFactory).newTransformerHandler(src); 
       }
  @@ -337,6 +377,12 @@
           if (_xsltcFactory == null) {
               createXSLTCTransformerFactory();
           }
  +     if (_errorlistener != null) {
  +         _xsltcFactory.setErrorListener(_errorlistener);         
  +     }
  +     if (_uriresolver != null) {
  +         _xsltcFactory.setURIResolver(_uriresolver);
  +     }
           return 
           
((SAXTransformerFactory)_xsltcFactory).newTransformerHandler(templates);
       }
  @@ -352,6 +398,12 @@
           if (_xsltcFactory == null) {
               createXSLTCTransformerFactory();
           }
  +     if (_errorlistener != null) {
  +         _xsltcFactory.setErrorListener(_errorlistener);         
  +     }
  +     if (_uriresolver != null) {
  +         _xsltcFactory.setURIResolver(_uriresolver);
  +     }
        Templates templates = _xsltcFactory.newTemplates(src);
        if (templates == null ) return null;
        return newXMLFilter(templates); 
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to