bloritsch    01/10/18 10:23:59

  Modified:    src/org/apache/cocoon/transformation
                        XIncludeTransformer.java
  Log:
  Convert XIncludeTransformer to use SourceResolver instead of URLFactory
  
  Revision  Changes    Path
  1.18      +44 -71    
xml-cocoon2/src/org/apache/cocoon/transformation/XIncludeTransformer.java
  
  Index: XIncludeTransformer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/transformation/XIncludeTransformer.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- XIncludeTransformer.java  2001/10/11 07:28:24     1.17
  +++ XIncludeTransformer.java  2001/10/18 17:23:59     1.18
  @@ -13,12 +13,11 @@
   import org.apache.avalon.framework.component.ComponentException;
   import org.apache.avalon.framework.component.ComponentManager;
   import org.apache.avalon.framework.component.Composable;
  -import org.apache.avalon.framework.logger.Loggable;
   import org.apache.avalon.framework.parameters.Parameters;
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.components.parser.Parser;
  -import org.apache.cocoon.components.url.URLFactory;
   import org.apache.cocoon.components.xpath.XPathProcessor;
  +import org.apache.cocoon.environment.Source;
   import org.apache.cocoon.environment.SourceResolver;
   import org.apache.cocoon.xml.IncludeXMLConsumer;
   import org.apache.cocoon.xml.dom.DOMStreamer;
  @@ -31,7 +30,6 @@
   
   import java.io.*;
   import java.net.MalformedURLException;
  -import java.net.URL;
   import java.util.Map;
   import java.util.Stack;
   
  @@ -43,11 +41,11 @@
    * by the SAX event FSM yet.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Donald Ball</a>
  - * @version CVS $Revision: 1.17 $ $Date: 2001/10/11 07:28:24 $ $Author: cziegeler $
  + * @version CVS $Revision: 1.18 $ $Date: 2001/10/18 17:23:59 $ $Author: bloritsch $
    */
   public class XIncludeTransformer extends AbstractTransformer implements Composable, 
Recyclable, Disposable {
   
  -    protected URLFactory urlFactory;
  +    private SourceResolver resolver;
   
       /** XPath Processor */
       private XPathProcessor processor = null;
  @@ -62,10 +60,10 @@
       public static final String XINCLUDE_INCLUDE_ELEMENT_HREF_ATTRIBUTE = "href";
       public static final String XINCLUDE_INCLUDE_ELEMENT_PARSE_ATTRIBUTE = "parse";
   
  -    protected URL base_xmlbase_uri = null;
  +    protected Source base_xmlbase_uri = null;
   
       /** The current XMLBase URI. We start with an empty "dummy" URL. **/
  -    protected URL current_xmlbase_uri = null;
  +    protected Source current_xmlbase_uri = null;
   
       /** This is a stack of xml:base attributes which belong to our ancestors **/
       protected Stack xmlbase_stack = new Stack();
  @@ -82,16 +80,13 @@
   
       public void setup(SourceResolver resolver, Map objectModel,
                         String source, Parameters parameters)
  -            throws ProcessingException, SAXException, IOException {}
  +            throws ProcessingException, SAXException, IOException {
  +        this.resolver = resolver;
  +    }
   
       public void compose(ComponentManager manager) {
           this.manager = manager;
           try {
  -            this.urlFactory = (URLFactory)this.manager.lookup(URLFactory.ROLE);
  -        } catch (Exception e) {
  -            getLogger().error("cannot obtain URLFactory", e);
  -        }
  -        try {
               this.processor = 
(XPathProcessor)this.manager.lookup(XPathProcessor.ROLE);
           } catch (Exception e) {
               getLogger().error("cannot obtain XPathProcessor", e);
  @@ -103,7 +98,7 @@
           if ((value = attr.getValue(XMLBASE_NAMESPACE_URI,XMLBASE_ATTRIBUTE)) != 
null) {
               try {
                   startXMLBaseAttribute(uri,name,value);
  -            } catch (MalformedURLException e) {
  +            } catch (ProcessingException e) {
                   getLogger().debug("XincludeTransformer", e);
                   throw new SAXException(e);
               }
  @@ -116,7 +111,7 @@
   
               try {
                   processXIncludeElement(href, parse);
  -            } catch (MalformedURLException e) {
  +            } catch (ProcessingException e) {
                   getLogger().debug("XincludeTransformer", e);
                   throw new SAXException(e);
               } catch (IOException e) {
  @@ -145,22 +140,22 @@
                   getLogger().debug("XIncludeTransformer: setDocumentLocator called " 
+ locator.getSystemId());
               }
   
  -            base_xmlbase_uri = urlFactory.getURL(locator.getSystemId());
  +            base_xmlbase_uri = this.resolver.resolve(locator.getSystemId());
   
               // If url ends with .xxx then truncate to dir
  -            if (base_xmlbase_uri.toExternalForm().lastIndexOf('.') > 
base_xmlbase_uri.toExternalForm().lastIndexOf('/')) {
  -               base_xmlbase_uri = new 
URL(base_xmlbase_uri.toExternalForm().substring(0,base_xmlbase_uri.toExternalForm().lastIndexOf('/')+1));
  +            if (base_xmlbase_uri.getSystemId().lastIndexOf('.') > 
base_xmlbase_uri.getSystemId().lastIndexOf('/')) {
  +               base_xmlbase_uri = 
this.resolver.resolve(base_xmlbase_uri.getSystemId().substring(0,base_xmlbase_uri.getSystemId().lastIndexOf('/')+1));
               }
   
               if (current_xmlbase_uri == null) {
                  current_xmlbase_uri = base_xmlbase_uri;
               }
   
  -        } catch (MalformedURLException e) {getLogger().debug("XincludeTransformer", 
e);}
  +        } catch (Exception e) {getLogger().debug("XincludeTransformer", e);}
           super.setDocumentLocator(locator);
       }
   
  -    protected void startXMLBaseAttribute(String uri, String name, String value) 
throws MalformedURLException {
  +    protected void startXMLBaseAttribute(String uri, String name, String value) 
throws ProcessingException {
           String urlLoc = value;
   
           if (! urlLoc.endsWith("/")) {
  @@ -174,13 +169,18 @@
           if (current_xmlbase_uri != null) {
               xmlbase_stack.push(current_xmlbase_uri);
           }
  -        current_xmlbase_uri = urlFactory.getURL(urlLoc);
  -
  -        xmlbase_element_uri_stack.push(last_xmlbase_element_uri);
  -        last_xmlbase_element_uri = uri;
   
  -        xmlbase_element_name_stack.push(last_xmlbase_element_name);
  -        last_xmlbase_element_name = name;
  +        try {
  +            current_xmlbase_uri = this.resolver.resolve(urlLoc);
  +    
  +            xmlbase_element_uri_stack.push(last_xmlbase_element_uri);
  +            last_xmlbase_element_uri = uri;
  +    
  +            xmlbase_element_name_stack.push(last_xmlbase_element_name);
  +            last_xmlbase_element_name = name;
  +        } catch (Exception e) {
  +            throw new ProcessingException("Could not resolve '" + urlLoc + "'", e);
  +        }
       }
   
       protected void endXMLBaseAttribute() {
  @@ -189,7 +189,7 @@
           }
   
           if (xmlbase_stack.size() > 0) {
  -            current_xmlbase_uri = (URL)xmlbase_stack.pop();
  +            current_xmlbase_uri = (Source)xmlbase_stack.pop();
           } else {
               current_xmlbase_uri = base_xmlbase_uri;
           }
  @@ -197,52 +197,36 @@
           last_xmlbase_element_name = (String)xmlbase_element_name_stack.pop();
       }
   
  -    protected void processXIncludeElement(String href, String parse) throws 
SAXException,MalformedURLException,IOException {
  +    protected void processXIncludeElement(String href, String parse) throws 
SAXException,ProcessingException,IOException {
           if (getLogger().isDebugEnabled()) {
               getLogger().debug("Processing XInclude element: href="+href+", 
parse="+parse);
  -            getLogger().debug("Base URI: " + current_xmlbase_uri.toExternalForm());
  +            getLogger().debug("Base URI: " + current_xmlbase_uri.getSystemId());
           }
  -        URL url;
  +        Source url;
           String suffix;
           int index = href.indexOf('#');
           if (index < 0) {
  -            url = urlFactory.getURL(current_xmlbase_uri,href);
  +            url = this.resolver.resolve(current_xmlbase_uri.getSystemId() + href);
               suffix = "";
           } else {
  -            url = urlFactory.getURL(current_xmlbase_uri,href.substring(0,index));
  +            url = this.resolver.resolve(current_xmlbase_uri.getSystemId() + 
href.substring(0,index));
               suffix = href.substring(index+1);
           }
           if (getLogger().isDebugEnabled()) {
               getLogger().debug("URL: "+url+"\nSuffix: "+suffix);
           }
  -        Object object = url.getContent();
  -        getLogger().debug("Object: "+object);
  +
           if (parse.equals("text")) {
               getLogger().debug("Parse type is text");
  -            if (object instanceof Loggable) {
  -                ((Loggable)object).setLogger(getLogger());
  -            }
  -            if (object instanceof Reader) {
  -                Reader reader = new BufferedReader((Reader)object);
  -                int read;
  -                char ary[] = new char[1024];
  -                if (reader != null) {
  -                    while ((read = reader.read(ary)) != -1) {
  -                        super.characters(ary,0,read);
  -                    }
  -                    reader.close();
  -                }
  -            } else if (object instanceof InputStream) {
  -                InputStream input = (InputStream)object;
  -                Reader reader = new BufferedReader(new InputStreamReader(input));
  -                int read;
  -                char ary[] = new char[1024];
  -                if (reader != null) {
  -                    while ((read = reader.read(ary)) != -1) {
  -                        super.characters(ary,0,read);
  -                    }
  -                    reader.close();
  +            InputStream input = url.getInputStream();
  +            Reader reader = new BufferedReader(new InputStreamReader(input));
  +            int read;
  +            char ary[] = new char[1024];
  +            if (reader != null) {
  +                while ((read = reader.read(ary)) != -1) {
  +                    super.characters(ary,0,read);
                   }
  +                reader.close();
               }
           } else if (parse.equals("xml")) {
               getLogger().debug("Parse type is XML");
  @@ -252,19 +236,8 @@
                   getLogger().debug("Looking up " + Parser.ROLE);
                   parser = (Parser)manager.lookup(Parser.ROLE);
   
  -                InputSource input;
  -                if (object instanceof Loggable) {
  -                    ((Loggable)object).setLogger(getLogger());
  -                }
  -                if (object instanceof Reader) {
  -                    input = new InputSource(new BufferedReader((Reader)object));
  -                    input.setSystemId(url.toString());
  -                } else if (object instanceof InputStream) {
  -                    input = new InputSource(new 
BufferedInputStream((InputStream)object));
  -                    input.setSystemId(url.toString());
  -                } else {
  -                    throw new SAXException("Unknown object type: "+object);
  -                }
  +                InputSource input = url.getInputSource();
  +
                   if (suffix.startsWith("xpointer(") && suffix.endsWith(")")) {
                       String xpath = suffix.substring(9,suffix.length()-1);
                       getLogger().debug("XPath is "+xpath);
  @@ -302,6 +275,7 @@
       public void recycle()
       {
           // Reset all variables to initial state.
  +        this.resolver = null;
           base_xmlbase_uri = null;
           current_xmlbase_uri = null;
           xmlbase_stack = new Stack();
  @@ -314,7 +288,6 @@
   
       public void dispose()
       {
  -        this.manager.release((Component)this.urlFactory);
           this.manager.release((Component)this.processor);
       }
   }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to