You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Carsten Ziegeler <cz...@sundn.de> on 2001/06/28 12:25:37 UTC

AW: cvs commit: xml-cocoon2/src/org/apache/cocoon/transformation I18nTransformer.java TraxTransformer.java

Hi Team,

first the good news: We have a working cocoon: protocol. Just add

<map:match pattern="test">
	<map:generate src="cocoon://hello.html"/>
	<map:serialize type="xml"/>
</map:match>

to your sitemap and you will get the response of the hello.html
pipeline as xml.

The ContentAggregator now uses these cocoon: urls, too.

Let's start the problems now:
- We need to define the exact meaning of the cocoon: url, is it
relative to the current sitemap or does it always start at the
root sitemap?

- The ContentAggregator was designed to aggregate pipelines. We
  could now use it to aggregate any xml sources! But this would
  require to explicitly use the cocoon: protocol in the <map:part>
  of the aggregation (breaking compatibility).
  I vote +1 for this change.

- And now the really bad news:
  The cocoon: protocol does not use the URLFactory nor does it
  use any URL object. Why? Well, last year was the discussion
  about adding own protocol handlers in a servlet environment
  in this mailing list. The conclusion was, that the usual
  java approach is not possible.
  So I thought of making a fake URL object. But this is neither
  possible as the URL class is final.
  The current solution: The URL objects and the cocoon: protocol
  are wrapped by the Source object (introduced month ago with
  the SourceResolver). There is the URLSource object which wrapps
  URLs and the SitemapSource object describing a pipeline.

  This approach together with the fact that adding real protocol
  handlers in a servlet environment is not possible leads me
  to the conclusion that the URLFactory is not of as much use
  as it could be.
  I would suggest to move it over to a SourceFactory which produces
  Source objects from an url.

PS: Oh, I forgot to mention that of course the cocoon: protocol
    is directly streamed into the pipeline, this means retrieving
    the content of this url is not done by first converting
    the sax events into a byte stream and then reparsing this
    to create sax events.
    The Source object is now capable of streaming its content.
    I changed the FileGenerator to use this feature directly. We
    should update the other components as well.

Carsten

Open Source Group                        sunShine - b:Integrated
================================================================
Carsten Ziegeler, S&N AG, Klingenderstrasse 5, D-33100 Paderborn
www.sundn.de                          mailto: cziegeler@sundn.de
================================================================


> -----Ursprüngliche Nachricht-----
> Von: cziegeler@apache.org [mailto:cziegeler@apache.org]
> Gesendet: Donnerstag, 28. Juni 2001 11:58
> An: xml-cocoon2-cvs@apache.org
> Betreff: cvs commit: xml-cocoon2/src/org/apache/cocoon/transformation
> I18nTransformer.java TraxTransformer.java
>
>
> cziegeler    01/06/28 02:58:25
>
>   Modified:    .        Tag: cocoon_20_branch changes.xml todo.xml
>                src/org/apache/cocoon Tag: cocoon_20_branch Cocoon.java
>                src/org/apache/cocoon/components/language/markup/xsp Tag:
>                         cocoon_20_branch XSPFormValidatorHelper.java
>                src/org/apache/cocoon/environment Tag: cocoon_20_branch
>                         AbstractEnvironment.java FactoryURLResolver.java
>                         Source.java SourceResolver.java URLResolver.java
>                src/org/apache/cocoon/generation Tag: cocoon_20_branch
>                         FileGenerator.java
>                src/org/apache/cocoon/sitemap Tag: cocoon_20_branch
>                         AbstractSitemap.java ContentAggregator.java
>                         Handler.java Sitemap.java
>                src/org/apache/cocoon/transformation Tag: cocoon_20_branch
>                         I18nTransformer.java TraxTransformer.java
>   Added:       src/org/apache/cocoon/environment Tag: cocoon_20_branch
>                         URLSource.java
>                src/org/apache/cocoon/sitemap Tag: cocoon_20_branch
>                         SitemapSource.java SitemapURLResolver.java
>   Log:
>   Added the cocoon: protocol
>
>   Revision  Changes    Path
>   No                   revision
>
>
>   No                   revision
>
>
>   1.2.2.14  +4 -1      xml-cocoon2/changes.xml
>
>   Index: changes.xml
>   ===================================================================
>   RCS file: /home/cvs/xml-cocoon2/changes.xml,v
>   retrieving revision 1.2.2.13
>   retrieving revision 1.2.2.14
>   diff -u -r1.2.2.13 -r1.2.2.14
>   --- changes.xml	2001/06/20 13:16:29	1.2.2.13
>   +++ changes.xml	2001/06/28 09:58:10	1.2.2.14
>   @@ -4,7 +4,7 @@
>
>    <!--
>      History of Cocoon changes
>   -  $Id: changes.xml,v 1.2.2.13 2001/06/20 13:16:29 cziegeler Exp $
>   +  $Id: changes.xml,v 1.2.2.14 2001/06/28 09:58:10 cziegeler Exp $
>    -->
>
>    <changes title="History of Changes">
>   @@ -24,6 +24,9 @@
>     </devs>
>
>     <release version="2.0b1-dev" date="@date@">
>   +  <action dev="CZ" type="add">
>   +    Added the cocoon: protocol to access pipelines.
>   +  </action>
>      <action dev="CZ" type="add">
>        Removed XInclude/CIncludeSAXConnectors and added
> LoggingSAXConnector.
>      </action>
>
>
>
>   1.1.1.1.2.2 +2 -6      xml-cocoon2/todo.xml
>
>   Index: todo.xml
>   ===================================================================
>   RCS file: /home/cvs/xml-cocoon2/todo.xml,v
>   retrieving revision 1.1.1.1.2.1
>   retrieving revision 1.1.1.1.2.2
>   diff -u -r1.1.1.1.2.1 -r1.1.1.1.2.2
>   --- todo.xml	2001/06/22 05:58:18	1.1.1.1.2.1
>   +++ todo.xml	2001/06/28 09:58:10	1.1.1.1.2.2
>   @@ -4,7 +4,7 @@
>
>    <!--
>      History of Cocoon changes
>   -  $Id: todo.xml,v 1.1.1.1.2.1 2001/06/22 05:58:18 cziegeler Exp $
>   +  $Id: todo.xml,v 1.1.1.1.2.2 2001/06/28 09:58:10 cziegeler Exp $
>    -->
>
>
>   @@ -37,11 +37,7 @@
>      </action>
>
>      <action context="code" assigned-to="open">
>   -   Make the automatic announcement system working.
>   -  </action>
>   -
>   -  <action context="code" assigned-to="open">
>   -   Add the cocoon: URL.
>   +   Finish the cocoon: protocol.
>      </action>
>
>      <action context="code" assigned-to="open">
>
>
>
>   No                   revision
>
>
>   No                   revision
>
>
>   1.9.2.7   +7 -4      xml-cocoon2/src/org/apache/cocoon/Cocoon.java
>
>   Index: Cocoon.java
>   ===================================================================
>   RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/Cocoon.java,v
>   retrieving revision 1.9.2.6
>   retrieving revision 1.9.2.7
>   diff -u -r1.9.2.6 -r1.9.2.7
>   --- Cocoon.java	2001/06/22 18:19:25	1.9.2.6
>   +++ Cocoon.java	2001/06/28 09:58:11	1.9.2.7
>   @@ -39,7 +39,9 @@
>    import org.apache.cocoon.components.store.FilesystemStore;
>    import org.apache.cocoon.components.url.URLFactory;
>    import org.apache.cocoon.environment.Environment;
>   +import org.apache.cocoon.environment.FactoryURLResolver;
>    import org.apache.cocoon.environment.Source;
>   +import org.apache.cocoon.environment.URLSource;
>    import org.apache.cocoon.serialization.Serializer;
>    import org.apache.cocoon.sitemap.Manager;
>    import org.apache.cocoon.sitemap.AbstractSitemap;
>   @@ -55,7 +57,7 @@
>     *
>     * @author <a href="mailto:fumagalli@exoffice.com">Pierpaolo
> Fumagalli</a> (Apache Software Foundation, Exoffice Technologies)
>     * @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
>   - * @version CVS $Revision: 1.9.2.6 $ $Date: 2001/06/22 18:19:25 $
>   + * @version CVS $Revision: 1.9.2.7 $ $Date: 2001/06/28 09:58:11 $
>     */
>    public class Cocoon extends AbstractLoggable implements
> ThreadSafe, Component, Initializable, Disposable, Modifiable,
> Processor, Contextualizable {
>        /** The application context */
>   @@ -103,7 +105,8 @@
>                this.classpath =
> (String)context.get(Constants.CONTEXT_CLASSPATH);
>                this.workDir =
> (File)context.get(Constants.CONTEXT_WORK_DIR);
>                try {
>   -                this.configurationFile = new
> Source((URL)context.get(Constants.CONTEXT_CONFIG_URL));
>   +                this.configurationFile = new
> URLSource((URL)context.get(Constants.CONTEXT_CONFIG_URL),
>   +
> this.componentManager);
>                } catch (IOException ioe) {
>                    getLogger().error("Could not open
> configuration file.", ioe);
>                    throw new ContextException("Could not open
> configuration file.", ioe);
>   @@ -370,7 +373,7 @@
>            try {
>                programGenerator = (ProgramGenerator)
> this.componentManager.lookup(Roles.PROGRAM_GENERATOR);
>                urlFactory = (URLFactory)
> this.componentManager.lookup(Roles.URL_FACTORY);
>   -            environment.setURLResolver(new
> org.apache.cocoon.environment.FactoryURLResolver(urlFactory));
>   +            environment.setURLResolver(new
> FactoryURLResolver(this.componentManager, urlFactory));
>                String markupLanguage = "sitemap";
>                String programmingLanguage = "java";
>
>   @@ -405,7 +408,7 @@
>
>                programGenerator = (ProgramGenerator)
> this.componentManager.lookup(Roles.PROGRAM_GENERATOR);
>                urlFactory = (URLFactory)
> this.componentManager.lookup(Roles.URL_FACTORY);
>   -            environment.setURLResolver(new
> org.apache.cocoon.environment.FactoryURLResolver(urlFactory));
>   +            environment.setURLResolver(new
> FactoryURLResolver(this.componentManager, urlFactory));
>                String markupLanguage = "xsp";
>                String programmingLanguage = "java";
>
>
>
>
>   No                   revision
>
>
>   No                   revision
>
>
>   1.1.2.2   +3 -2
> xml-cocoon2/src/org/apache/cocoon/components/language/markup/xsp/X
> SPFormValidatorHelper.java
>
>   Index: XSPFormValidatorHelper.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/components/language/ma
> rkup/xsp/XSPFormValidatorHelper.java,v
>   retrieving revision 1.1.2.1
>   retrieving revision 1.1.2.2
>   diff -u -r1.1.2.1 -r1.1.2.2
>   --- XSPFormValidatorHelper.java	2001/06/15 11:29:26	1.1.2.1
>   +++ XSPFormValidatorHelper.java	2001/06/28 09:58:12	1.1.2.2
>   @@ -20,6 +20,7 @@
>    import
> org.apache.cocoon.components.language.markup.xsp.XSPObjectHelper;
>    import org.apache.cocoon.environment.Request;
>    import org.apache.cocoon.environment.Source;
>   +import org.apache.cocoon.environment.URLSource;
>
>    import org.xml.sax.ContentHandler;
>    import org.xml.sax.SAXException;
>   @@ -38,7 +39,7 @@
>     * The <code>ValidatorActionResult</code> object helper
>     *
>     * @author <a
> href="mailto:haul@informatik.tu-darmstadt.de">Christian Haul</a>
>   - * @version CVS $Revision: 1.1.2.1 $ $Date: 2001/06/15 11:29:26 $
>   + * @version CVS $Revision: 1.1.2.2 $ $Date: 2001/06/28 09:58:12 $
>     */
>    public class XSPFormValidatorHelper {
>      /**
>   @@ -470,7 +471,7 @@
>    	    try {
>    		urlFactory = (URLFactory) manager.lookup(Roles.URL_FACTORY);
>    		URL resource = urlFactory.getURL(descriptor);
>   -		source = new Source(resource);
>   +        source = new URLSource(resource, manager);
>
>    		if (conf == null || ( reloadable &&
> conf.lastModified < source.getLastModified())) {
>
> logger.debug("XSPFormValidatorHelper.getConfiguration:
> (Re)Loading " + descriptor);
>
>
>
>   No                   revision
>
>
>   No                   revision
>
>
>   1.6.2.1   +9 -5
> xml-cocoon2/src/org/apache/cocoon/environment/AbstractEnvironment.java
>
>   Index: AbstractEnvironment.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/environment/AbstractEn
> vironment.java,v
>   retrieving revision 1.6
>   retrieving revision 1.6.2.1
>   diff -u -r1.6 -r1.6.2.1
>   --- AbstractEnvironment.java	2001/05/31 20:37:05	1.6
>   +++ AbstractEnvironment.java	2001/06/28 09:58:14	1.6.2.1
>   @@ -15,6 +15,7 @@
>    import java.util.HashMap;
>    import java.util.Map;
>    import org.apache.avalon.framework.logger.AbstractLoggable;
>   +import org.apache.cocoon.ProcessingException;
>    import org.apache.cocoon.environment.Environment;
>    import org.apache.log.LogKit;
>    import org.xml.sax.InputSource;
>   @@ -194,22 +195,23 @@
>         * Resolve an entity.
>         */
>        public Source resolve(String systemId)
>   -    throws SAXException, IOException {
>   +    throws ProcessingException, SAXException, IOException {
>            if (systemId == null) throw new SAXException("Invalid
> System ID");
>
>            if (systemId.length() == 0)
>   -            return new Source(this.context);
>   +            return this.urlResolver.getSource(this,
> this.context.toExternalForm());
>            if (systemId.indexOf(":") > 1)
>   -            return new Source(this.urlResolver.getURL(systemId));
>   +            return this.urlResolver.getSource(this, systemId);
>            if (systemId.charAt(0) == '/')
>   -            return new
> Source(this.urlResolver.getURL(this.context.getProtocol() + ":" +
> systemId));
>   -        return new
> Source(this.urlResolver.getURL(this.context, systemId));
>   +            return this.urlResolver.getSource(this,
> this.context.getProtocol() + ":" + systemId);
>   +        return this.urlResolver.getSource(this, this.context,
> systemId);
>        }
>
>        /**
>         * Push a new URI for processing
>         */
>        public void pushURI(String uri) {
>   +        this.uris.add(this.urlResolver);
>            this.uris.add(uri);
>        }
>
>   @@ -218,6 +220,8 @@
>         */
>        public String popURI() {
>            String uri = (String)this.uris.get(this.uris.size()-1);
>   +        this.uris.remove(this.uris.size()-1);
>   +        this.urlResolver =
> (URLResolver)this.uris.get(this.uris.size()-1);
>            this.uris.remove(this.uris.size()-1);
>            return uri;
>        }
>
>
>
>   1.1.2.1   +18 -8
> xml-cocoon2/src/org/apache/cocoon/environment/FactoryURLResolver.java
>
>   Index: FactoryURLResolver.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/environment/FactoryURL
> Resolver.java,v
>   retrieving revision 1.1
>   retrieving revision 1.1.2.1
>   diff -u -r1.1 -r1.1.2.1
>   --- FactoryURLResolver.java	2001/05/22 14:38:51	1.1
>   +++ FactoryURLResolver.java	2001/06/28 09:58:15	1.1.2.1
>   @@ -8,10 +8,14 @@
>
>    package org.apache.cocoon.environment;
>
>   +import java.io.IOException;
>    import java.net.URL;
>    import java.net.MalformedURLException;
>   -
>   +import org.apache.avalon.framework.component.ComponentManager;
>   +import org.apache.cocoon.ProcessingException;
>    import org.apache.cocoon.components.url.URLFactory;
>   +import org.apache.cocoon.environment.Source;
>   +import org.apache.cocoon.environment.URLSource;
>
>    /**
>     * This interface describes the URLResolver which is used by the
>   @@ -22,31 +26,37 @@
>     * This class used only the <code>URLFactory</code>.
>     *
>     * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
>   - * @version CVS $Revision: 1.1 $ $Date: 2001/05/22 14:38:51 $
>   + * @version CVS $Revision: 1.1.2.1 $ $Date: 2001/06/28 09:58:15 $
>     */
>
>    public final class FactoryURLResolver
>    implements URLResolver {
>
>        private URLFactory factory;
>   +
>   +    private ComponentManager manager;
>
>   -    public FactoryURLResolver(URLFactory factory) {
>   +    public FactoryURLResolver(ComponentManager manager,
>   +                              URLFactory factory) {
>   +        this.manager = manager;
>            this.factory = factory;
>        }
>
>        /**
>         * Resolve the source
>         */
>   -    public URL getURL(String location) throws MalformedURLException {
>   -        return this.factory.getURL(location);
>   +    public Source getSource(Environment environment, String location)
>   +    throws ProcessingException, IOException, MalformedURLException {
>   +        return new URLSource(this.factory.getURL(location), manager);
>        }
>
>        /**
>         * Resolve the source
>         */
>   -    public URL getURL(URL base, String location) throws
> MalformedURLException {
>   -        return this.factory.getURL(base, location);
>   +    public Source getSource(Environment environment, URL base,
> String location)
>   +    throws ProcessingException, IOException, MalformedURLException {
>   +        return new URLSource(this.factory.getURL(base,
> location), manager);
>        }
>
>
>   -}
>   \ No newline at end of file
>   +}
>
>
>
>   1.6.2.1   +20 -104
> xml-cocoon2/src/org/apache/cocoon/environment/Source.java
>
>   Index: Source.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/environment/Source.java,v
>   retrieving revision 1.6
>   retrieving revision 1.6.2.1
>   diff -u -r1.6 -r1.6.2.1
>   --- Source.java	2001/05/31 13:17:41	1.6
>   +++ Source.java	2001/06/28 09:58:16	1.6.2.1
>   @@ -17,155 +17,71 @@
>    import java.io.Reader;
>    import java.net.URL;
>    import java.net.URLConnection;
>   +import org.apache.cocoon.ProcessingException;
>   +import org.apache.cocoon.xml.XMLConsumer;
>    import org.xml.sax.InputSource;
>   +import org.xml.sax.SAXException;
>
>    /**
>     * Description of a source. This interface provides a simple interface
>     * for accessing any resource (URL, local file etc).
>     *
>     * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
>   - * @version CVS $Revision: 1.6 $ $Date: 2001/05/31 13:17:41 $
>   + * @version CVS $Revision: 1.6.2.1 $ $Date: 2001/06/28 09:58:16 $
>     */
>
>   -public final class Source {
>   -
>   -    /** Identifier for file urls */
>   -    private final String FILE = "file:";
>   -
>   -    /** The last modification date or 0 */
>   -    private long lastModificationDate;
>   -
>   -    /** The content length */
>   -    private long contentLength;
>   -
>   -    /** The system id */
>   -    private String systemId;
>   -
>   -    /** The URL of the source */
>   -    private URL url;
>   -
>   -    /** The connection for a real URL */
>   -    private URLConnection connection;
>   -
>   -    /** Is this a file or a "real" URL */
>   -    private boolean isFile;
>   -
>   -    /** Are we initialized? */
>   -    private boolean gotInfos;
>   -
>   -    /**
>   -     * Construct a new object
>   -     */
>   -    public Source(URL url)
>   -    throws IOException {
>   -        this.systemId = url.toExternalForm();
>   -        this.isFile = systemId.startsWith(FILE);
>   -        this.url = url;
>   -        this.gotInfos = false;
>   -    }
>   -
>   -    /**
>   -     * Get the last modification date and content length of the source.
>   -     * Any exceptions are ignored.
>   -     */
>   -    private void getInfos() {
>   -        if (this.gotInfos == false) {
>   -            if (this.isFile == true) {
>   -                File file = new
> File(systemId.substring(FILE.length()));
>   -                this.lastModificationDate = file.lastModified();
>   -                this.contentLength = file.length();
>   -            } else {
>   -                try {
>   -                    if (this.connection == null)
>   -                        this.connection = this.url.openConnection();
>   -                    this.lastModificationDate =
> this.connection.getLastModified();
>   -                    this.contentLength =
> this.connection.getContentLength();
>   -                } catch (IOException ignore) {
>   -                    this.lastModificationDate = 0;
>   -                    this.contentLength = -1;
>   -                }
>   -            }
>   -            this.gotInfos = true;
>   -        }
>   -    }
>   -
>   +public interface Source {
>        /**
>         * Get the last modification date of the source or 0 if it
>         * is not possible to determine the date.
>         */
>   -    public long getLastModified() {
>   -        this.getInfos();
>   -        return this.lastModificationDate;
>   -    }
>   +    long getLastModified();
>
>        /**
>         * Get the content length of the source or -1 if it
>         * is not possible to determine the length.
>         */
>   -    public long getContentLength() {
>   -        this.getInfos();
>   -        return this.contentLength;
>   -    }
>   +    long getContentLength();
>
>        /**
>         * Return an <code>InputStream</code> object to read from
> the source.
>         */
>   -    public InputStream getInputStream()
>   -    throws IOException {
>   -        if (this.isFile == true) {
>   -            return new
> FileInputStream(this.systemId.substring(FILE.length()));
>   -        } else {
>   -            if (this.connection == null)
>   -                this.connection = this.url.openConnection();
>   -            return this.connection.getInputStream();
>   -        }
>   -    }
>   +    InputStream getInputStream()
>   +    throws ProcessingException, IOException;
>
>        /**
>         * Return the unique identifer for this source
>         */
>   -    public String getSystemId() {
>   -        return this.systemId;
>   -    }
>   +    String getSystemId();
>
>        /**
>         * Is this a file, then the <code>getFile</code> method can
>         * return a <code>File</code> object for this source.
>         */
>   -    public boolean isFile() {
>   -        return this.isFile;
>   -    }
>   +    boolean isFile();
>
>        /**
>         * Return a <code>File</code> object if this is a local file
>         * (if the <code>isFile</code> method returns true).
>         */
>   -    public File getFile() {
>   -        if (this.isFile == true) {
>   -            return new File(this.systemId.substring(FILE.length()));
>   -        }
>   -        return null;
>   -    }
>   +    File getFile();
>
>        /**
>         * Refresh this object and update the last modified date
>         * and content length.
>         */
>   -    public void refresh() {
>   -        // reset connection
>   -        this.connection = null;
>   -        this.gotInfos = false;
>   -    }
>   +    void refresh();
>
>        /**
>         * Return a new <code>InputSource</code> object
>         */
>   -    public InputSource getInputSource()
>   -    throws IOException {
>   -        InputSource newObject = new InputSource(this.getInputStream());
>   -        newObject.setSystemId(this.systemId);
>   -        return newObject;
>   -    }
>   +    InputSource getInputSource()
>   +    throws ProcessingException, IOException;
>
>   +    /**
>   +     * Stream content to the consumer
>   +     */
>   +    void stream(XMLConsumer consumer)
>   +    throws ProcessingException, SAXException, IOException;
>    }
>
>
>
>
>   1.2.2.1   +3 -3
> xml-cocoon2/src/org/apache/cocoon/environment/SourceResolver.java
>
>   Index: SourceResolver.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/environment/SourceReso
> lver.java,v
>   retrieving revision 1.2
>   retrieving revision 1.2.2.1
>   diff -u -r1.2 -r1.2.2.1
>   --- SourceResolver.java	2001/05/23 08:57:26	1.2
>   +++ SourceResolver.java	2001/06/28 09:58:17	1.2.2.1
>   @@ -9,13 +9,14 @@
>    package org.apache.cocoon.environment;
>
>    import java.io.IOException;
>   +import org.apache.cocoon.ProcessingException;
>    import org.xml.sax.SAXException;
>
>    /**
>     * Base interface for resolving a source by system identifiers.
>     *
>     * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
>   - * @version CVS $Revision: 1.2 $ $Date: 2001/05/23 08:57:26 $
>   + * @version CVS $Revision: 1.2.2.1 $ $Date: 2001/06/28 09:58:17 $
>     */
>
>    public interface SourceResolver {
>   @@ -26,7 +27,6 @@
>         * (<code>java.net.URL</code> or a local file.
>         */
>        Source resolve(String systemID)
>   -    throws SAXException, IOException;
>   -
>   +    throws ProcessingException, SAXException, IOException;
>    }
>
>
>
>
>   1.1.2.1   +15 -6
> xml-cocoon2/src/org/apache/cocoon/environment/URLResolver.java
>
>   Index: URLResolver.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/environment/URLResolver.java,v
>   retrieving revision 1.1
>   retrieving revision 1.1.2.1
>   diff -u -r1.1 -r1.1.2.1
>   --- URLResolver.java	2001/05/22 14:38:53	1.1
>   +++ URLResolver.java	2001/06/28 09:58:17	1.1.2.1
>   @@ -8,29 +8,38 @@
>
>    package org.apache.cocoon.environment;
>
>   +import java.io.IOException;
>    import java.net.URL;
>    import java.net.MalformedURLException;
>   +import org.apache.cocoon.ProcessingException;
>   +import org.apache.cocoon.environment.Environment;
>   +import org.apache.cocoon.environment.Source;
>
>    /**
>     * This interface describes the URLResolver which is used by the
>     * <code>SourceResolver</code>.
>     * The <code>URLResolver</code> separates the
> <code>SourceResolver</code>
>   - * from the <code>URLFactory</code>.
>   + * from the <code>URLFactory</code>. The context for the factory is
>   + * calculated by this object.
>     *
>     * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
>   - * @version CVS $Revision: 1.1 $ $Date: 2001/05/22 14:38:53 $
>   + * @version CVS $Revision: 1.1.2.1 $ $Date: 2001/06/28 09:58:17 $
>     */
>
>    public interface URLResolver {
>
>        /**
>   -     * Resolve the source
>   +     * Resolve the source according to the environment.
>   +     * @param environment The current environment or <code>null</code>.
>         */
>   -    URL getURL(String location) throws MalformedURLException;
>   +    Source getSource(Environment environment, String location)
>   +    throws ProcessingException, IOException, MalformedURLException;
>
>        /**
>   -     * Resolve the source
>   +     * Resolve the source according to the environment.
>   +     * @param environment The current environment or <code>null</code>.
>         */
>   -    URL getURL(URL base, String location) throws MalformedURLException;
>   +    Source getSource(Environment environment, URL base, String
> location)
>   +    throws ProcessingException, IOException, MalformedURLException;
>
>    }
>
>
>
>   No                   revision
>
>
>   No                   revision
>
>
>   1.1.2.1   +0 -0
> xml-cocoon2/src/org/apache/cocoon/environment/URLSource.java
>
>   Index: URLSource.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/environment/URLSource.java,v
>   retrieving revision 1.1
>   retrieving revision 1.1.2.1
>   diff -u -r1.1 -r1.1.2.1
>   --- URLSource.java	2001/06/28 09:56:37	1.1
>   +++ URLSource.java	2001/06/28 09:58:17	1.1.2.1
>   @@ -30,7 +30,7 @@
>     * Description of a source which is described by an URL.
>     *
>     * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
>   - * @version CVS $Revision: 1.1 $ $Date: 2001/06/28 09:56:37 $
>   + * @version CVS $Revision: 1.1.2.1 $ $Date: 2001/06/28 09:58:17 $
>     */
>
>    public final class URLSource
>
>
>
>   No                   revision
>
>
>   No                   revision
>
>
>   1.9.2.5   +2 -10
> xml-cocoon2/src/org/apache/cocoon/generation/FileGenerator.java
>
>   Index: FileGenerator.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/generation/FileGenerat
> or.java,v
>   retrieving revision 1.9.2.4
>   retrieving revision 1.9.2.5
>   diff -u -r1.9.2.4 -r1.9.2.5
>   --- FileGenerator.java	2001/06/19 07:37:52	1.9.2.4
>   +++ FileGenerator.java	2001/06/28 09:58:19	1.9.2.5
>   @@ -39,7 +39,7 @@
>     * @author <a href="mailto:fumagalli@exoffice.com">Pierpaolo
> Fumagalli</a>
>     *         (Apache Software Foundation, Exoffice Technologies)
>     * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
>   - * @version CVS $Revision: 1.9.2.4 $ $Date: 2001/06/19 07:37:52 $
>   + * @version CVS $Revision: 1.9.2.5 $ $Date: 2001/06/28 09:58:19 $
>     */
>    public class FileGenerator extends ComposerGenerator
>    implements Cacheable, Recyclable {
>   @@ -105,15 +105,12 @@
>         */
>        public void generate()
>        throws IOException, SAXException, ProcessingException {
>   -        Parser parser = null;
>            try {
>                getLogger().debug("processing file " + super.source);
>                getLogger().debug("file resolved to " +
> this.inputSource.getSystemId());
>
>   -            parser = (Parser)this.manager.lookup(Roles.PARSER);
>   +            this.inputSource.stream(super.xmlConsumer);
>
>   -            parser.setConsumer(super.xmlConsumer);
>   -            parser.parse(this.inputSource.getInputSource());
>            } catch (FileNotFoundException e) {
>                getLogger().warn("FileGenerator could not find
> resource " + this.inputSource.getSystemId(), e);
>                throw new ResourceNotFoundException("FileGenerator
> could not find resource "
>   @@ -124,11 +121,6 @@
>            } catch (SAXException e) {
>                getLogger().error("FileGenerator.generate()", e);
>                throw(e);
>   -        } catch (Exception e){
>   -            getLogger().error("Could not get parser", e);
>   -            throw new ProcessingException("Exception in
> FileGenerator.generate()",e);
>   -        } finally {
>   -            if (parser != null) this.manager.release(parser);
>            }
>        }
>    }
>
>
>
>   No                   revision
>
>
>   No                   revision
>
>
>   1.4.2.13  +8 -1
> xml-cocoon2/src/org/apache/cocoon/sitemap/AbstractSitemap.java
>
>   Index: AbstractSitemap.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/AbstractSitemap.java,v
>   retrieving revision 1.4.2.12
>   retrieving revision 1.4.2.13
>   diff -u -r1.4.2.12 -r1.4.2.13
>   --- AbstractSitemap.java	2001/06/22 14:47:57	1.4.2.12
>   +++ AbstractSitemap.java	2001/06/28 09:58:20	1.4.2.13
>   @@ -43,7 +43,7 @@
>     * Base class for generated <code>Sitemap</code> classes
>     *
>     * @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
>   - * @version CVS $Revision: 1.4.2.12 $ $Date: 2001/06/22 14:47:57 $
>   + * @version CVS $Revision: 1.4.2.13 $ $Date: 2001/06/28 09:58:20 $
>     */
>    public abstract class AbstractSitemap extends AbstractLoggable
> implements Sitemap, Disposable, ThreadSafe {
>        private Context context;
>   @@ -155,6 +155,13 @@
>
>        public void contextualize(Context context) throws
> ContextException {
>            this.context = context;
>   +    }
>   +
>   +    /**
>   +     * Return the component manager for this sitemap
>   +     */
>   +    public ComponentManager getComponentManager() {
>   +        return this.manager;
>        }
>
>        /**
>
>
>
>   1.5.2.5   +28 -99
> xml-cocoon2/src/org/apache/cocoon/sitemap/ContentAggregator.java
>
>   Index: ContentAggregator.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/ContentAggrega
> tor.java,v
>   retrieving revision 1.5.2.4
>   retrieving revision 1.5.2.5
>   diff -u -r1.5.2.4 -r1.5.2.5
>   --- ContentAggregator.java	2001/06/22 02:26:57	1.5.2.4
>   +++ ContentAggregator.java	2001/06/28 09:58:20	1.5.2.5
>   @@ -23,10 +23,9 @@
>    import org.apache.cocoon.caching.AggregatedCacheValidity;
>    import org.apache.cocoon.caching.Cacheable;
>    import org.apache.cocoon.caching.PipelineCacheKey;
>   -import org.apache.cocoon.components.pipeline.EventPipeline;
>   -import org.apache.cocoon.components.pipeline.CacheableEventPipeline;
>   -import org.apache.cocoon.components.pipeline.StreamPipeline;
>   +import org.apache.cocoon.caching.TimeStampCacheValidity;
>    import org.apache.cocoon.environment.Environment;
>   +import org.apache.cocoon.environment.Source;
>    import org.apache.cocoon.environment.SourceResolver;
>    import org.apache.cocoon.generation.Generator;
>    import org.apache.cocoon.sitemap.Sitemap;
>   @@ -42,11 +41,10 @@
>
>    /**
>     * @author <a href="mailto:giacomo@apache.org">Giacomo Pati</a>
>   - * @version CVS $Id: ContentAggregator.java,v 1.5.2.4
> 2001/06/22 02:26:57 vgritsenko Exp $
>   + * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
>   + * @version CVS $Id: ContentAggregator.java,v 1.5.2.5
> 2001/06/28 09:58:20 cziegeler Exp $
>     */
>    public class ContentAggregator extends ContentHandlerWrapper
> implements Generator, Cacheable, Composable {
>   -    /** the current sitemap */
>   -    protected Sitemap sitemap;
>
>        /** the root element of the aggregated content */
>        protected String rootElement;
>   @@ -60,9 +58,6 @@
>        /** the parts */
>        protected ArrayList parts = new ArrayList();
>
>   -    /** The current <code>Environment</code>. */
>   -    protected Environment environment;
>   -
>        /** The current <code>SourceResolver</code>. */
>        protected SourceResolver resolver;
>
>   @@ -87,9 +82,6 @@
>        /** The <code>ComponentManager</code> */
>        protected ComponentManager manager;
>
>   -    /** Holds all collected <code>EventPipeline</code>s */
>   -    private ArrayList partEventPipelines = new ArrayList();
>   -
>        /** Stacks namespaces during processing */
>        private ArrayList currentNS = new ArrayList();
>
>   @@ -117,10 +109,11 @@
>            public String element;
>            public String namespace;
>            public String prefix;
>   +        public Source source;
>            boolean stripRootElement;
>
>            public Part(String uri, String element, String
> namespace, String stripRoot, String prefix) {
>   -            this.uri = uri;
>   +            this.uri = "cocoon://" + uri;
>                this.element = element;
>                this.namespace = namespace;
>                this.prefix = prefix;
>   @@ -137,11 +130,10 @@
>         */
>        public void generate() throws IOException, SAXException,
> ProcessingException {
>            getLogger().debug("ContentAggregator: generating
> aggregated content");
>   -        collectParts();
>            this.documentHandler.startDocument();
>            this.startElem(this.rootElementNS,
> this.rootElementNSPrefix, this.rootElement);
>            try {
>   -            for (int i = 0; i < this.partEventPipelines.size(); i++) {
>   +            for (int i = 0; i < this.parts.size(); i++) {
>                    Part part = (Part)this.parts.get(i);
>                    this.rootElementIndex = (part.stripRootElement
> ? 0 : -1);
>                    String ns = part.namespace;
>   @@ -153,19 +145,10 @@
>                    if (!part.element.equals("")) {
>                        this.startElem(ns, prefix, part.element);
>                    }
>   -                EventPipeline ep =
> (EventPipeline)this.partEventPipelines.get(i);
>   -                ((XMLProducer)ep).setConsumer(this);
>   +
>                    try {
>   -                    this.environment.pushURI(part.uri);
>   -                    ep.process(this.environment);
>   -                } catch (ProcessingException e) {
>   -                    // Already reported to log, rethrowing.
>   -                    throw e;
>   -                } catch (Exception e) {
>   -                    getLogger().error("ContentAggregator:
> cannot process event pipeline for URI " + part.uri, e);
>   -                    throw new
> ProcessingException("ContentAggregator: cannot process event
> pipeline for URI " + part.uri, e);
>   +                    this.resolver.resolve(part.uri).stream(this);
>                    } finally {
>   -                    this.environment.popURI();
>                        if (!part.element.equals("")) {
>                            this.endElem(prefix, part.element);
>                        }
>   @@ -178,41 +161,6 @@
>            getLogger().debug("ContentAggregator: finished
> aggregating content");
>        }
>
>   -    private void collectParts() throws ProcessingException {
>   -        if (this.partEventPipelines.size() == 0) {
>   -            EventPipeline eventPipeline = null;
>   -            StreamPipeline pipeline = null;
>   -            for (int i = 0; i < this.parts.size(); i++) {
>   -                Part part = (Part)this.parts.get(i);
>   -                getLogger().debug("ContentAggregator:
> collecting internal resource " + part.uri);
>   -                try {
>   -                    eventPipeline =
> (EventPipeline)this.manager.lookup(Roles.EVENT_PIPELINE);
>   -                    this.partEventPipelines.add(eventPipeline);
>   -                    pipeline =
> (StreamPipeline)this.manager.lookup(Roles.STREAM_PIPELINE);
>   -                } catch (ComponentException cme) {
>   -                    getLogger().error("ContentAggregator:
> could not lookup pipeline components", cme);
>   -                    throw new ProcessingException("could not
> lookup pipeline components", cme);
>   -                }
>   -                try {
>   -                    pipeline.setEventPipeline(eventPipeline);
>   -                } catch (Exception cme) {
>   -                    getLogger().error("ContentAggregator:
> could not set event pipeline on stream pipeline", cme);
>   -                    throw new ProcessingException("could not
> set event pipeline on stream pipeline", cme);
>   -                }
>   -                try {
>   -                    this.environment.pushURI(part.uri);
>   -                    this.sitemap.process(this.environment,
> pipeline, eventPipeline);
>   -                } catch (Exception cme) {
>   -                    getLogger().error("ContentAggregator:
> could not process pipeline", cme);
>   -                    throw new ProcessingException("could not
> process pipeline", cme);
>   -                } finally {
>   -                    this.manager.release(pipeline);
>   -                    this.environment.popURI();
>   -                }
>   -            }
>   -        }
>   -    }
>   -
>        /**
>         * Generate the unique key.
>         * This key must be unique inside the space of this component.
>   @@ -221,20 +169,14 @@
>         */
>        public long generateKey() {
>            try {
>   -            collectParts();
>                long key = 0;
>   -            for (int i = 0; i < this.partEventPipelines.size(); i++) {
>   -                EventPipeline ep =
> (EventPipeline)this.partEventPipelines.get(i);
>   -                if (ep instanceof CacheableEventPipeline) {
>   -                    ((XMLProducer)ep).setConsumer(this);
>   -                    PipelineCacheKey pck =
> ((CacheableEventPipeline)ep).generateKey(environment);
>   -                    if (pck == null) {
>   +            Source current;
>   +            for (int i = 0; i < this.parts.size(); i++) {
>   +                current = ((Part)this.parts.get(i)).source;
>   +                if (current.getLastModified() == 0) {
>                            return 0;
>   -                    } else {
>   -                        key += HashUtil.hash(pck.toString());
>   -                    }
>                    } else {
>   -                    return 0;
>   +                    key += HashUtil.hash(current.getSystemId());
>                    }
>                }
>                return key;
>   @@ -252,37 +194,27 @@
>         */
>        public CacheValidity generateValidity() {
>            try {
>   -            collectParts();
>   -            final AggregatedCacheValidity v = new
> AggregatedCacheValidity();
>   +            AggregatedCacheValidity v = new AggregatedCacheValidity();
>   +            Source current;
>                for (int i = 0; i < this.parts.size(); i++) {
>   -                EventPipeline ep =
> (EventPipeline)this.partEventPipelines.get(i);
>   -                if (ep instanceof CacheableEventPipeline) {
>   -                    Map map =
> ((CacheableEventPipeline)ep).generateValidity(environment);
>   -                    if (map == null) {
>   +                current = ((Part)this.parts.get(i)).source;
>   +                if (current.getLastModified() == 0) {
>                            return null;
>   -                    }
>   -                    Iterator j = map.values().iterator();
>   -                    while (j.hasNext()) {
>   -                        CacheValidity epv = (CacheValidity)j.next();
>   -                        v.add(epv);
>   -                    }
>                    } else {
>   -                    return null;
>   +                    v.add(new
> TimeStampCacheValidity(current.getLastModified()));
>                    }
>                }
>                return v;
>            } catch (Exception e) {
>   -            getLogger().error("ContentAggregator: could not
> generateValidity", e);
>   +            getLogger().error("ContentAggregator: could not
> generateKey", e);
>                return null;
>            }
>        }
>
>        public void setEnvironment(Environment environment) {
>   -        this.environment = environment;
>        }
>
>        public void setSitemap(Sitemap sitemap) {
>   -        this.sitemap = sitemap;
>        }
>
>        public void setRootElement(String element, String
> namespace, String prefix) {
>   @@ -330,7 +262,6 @@
>         */
>        public void recycle() {
>            super.recycle();
>   -        this.sitemap = null;
>            this.resolver = null;
>            this.objectModel = null;
>            this.source = null;
>   @@ -339,14 +270,6 @@
>            this.rootElementNS = null;
>            this.rootElementNSPrefix = null;
>            this.parts.clear();
>   -        this.environment = null;
>   -
>   -        for (int i = 0; i < this.partEventPipelines.size(); i++) {
>   -            Component component =
> (Component)this.partEventPipelines.get(i);
>   -            this.manager.release(component);
>   -        }
>   -
>   -        this.partEventPipelines.clear();
>            this.currentNS.clear();
>            this.xmlConsumer = null;
>            this.contentHandler = null;
>   @@ -357,12 +280,18 @@
>         * Set the <code>SourceResolver</code>, object model
> <code>Map</code>,
>         * the source and sitemap <code>Parameters</code> used to
> process the request.
>         */
>   -    public void setup(SourceResolver resolver, Map
> objectModel, String src, Parameters par) throws ProcessingException,
>   -        SAXException, IOException {
>   +    public void setup(SourceResolver resolver, Map
> objectModel, String src, Parameters par)
>   +    throws ProcessingException, SAXException, IOException {
>                this.resolver = resolver;
>                this.objectModel = objectModel;
>                this.source = src;
>                this.parameters = par;
>   +
>   +        Part current;
>   +        for(int i=0; i<this.parts.size();i++) {
>   +            current = (Part)this.parts.get(i);
>   +            current.source = this.resolver.resolve(current.uri);
>   +        }
>        }
>
>        private String pushNS(String ns) {
>
>
>
>   1.9.2.5   +12 -9
> xml-cocoon2/src/org/apache/cocoon/sitemap/Handler.java
>
>   Index: Handler.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/Handler.java,v
>   retrieving revision 1.9.2.4
>   retrieving revision 1.9.2.5
>   diff -u -r1.9.2.4 -r1.9.2.5
>   --- Handler.java	2001/06/08 15:38:39	1.9.2.4
>   +++ Handler.java	2001/06/28 09:58:21	1.9.2.5
>   @@ -28,10 +28,10 @@
>    import org.apache.cocoon.components.pipeline.EventPipeline;
>    import org.apache.cocoon.components.pipeline.StreamPipeline;
>    import org.apache.cocoon.components.url.URLFactory;
>   -import org.apache.cocoon.environment.Environment;
>    import org.apache.cocoon.environment.FactoryURLResolver;
>   -import org.apache.cocoon.environment.URLResolver;
>   +import org.apache.cocoon.environment.Environment;
>    import org.apache.cocoon.environment.Source;
>   +import org.apache.cocoon.environment.URLResolver;
>
>    /**
>     * Handles the manageing and stating of one <code>Sitemap</code>
>   @@ -39,7 +39,7 @@
>     * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
>     * @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
>     * @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
>   - * @version CVS $Revision: 1.9.2.4 $ $Date: 2001/06/08 15:38:39 $
>   + * @version CVS $Revision: 1.9.2.5 $ $Date: 2001/06/28 09:58:21 $
>     */
>    public class Handler extends AbstractLoggable implements
> Runnable, Configurable, Composable,
>        Contextualizable, Processor, Disposable {
>   @@ -58,9 +58,6 @@
>        /** the URLFactory */
>            private URLFactory urlFactory;
>
>   -    /** The URLResolver for the sitemap components */
>   -        private URLResolver urlResolver;
>   -
>        /** the last error */
>            private Exception exception;
>
>   @@ -76,11 +73,13 @@
>        /** the sitemaps base path */
>            private String basePath;
>
>   +    /** The URLResolver for the sitemap components */
>   +        private URLResolver urlResolver;
>   +
>            public void compose(ComponentManager manager) {
>                this.manager = manager;
>                try {
>                    urlFactory =
> (URLFactory)manager.lookup(Roles.URL_FACTORY);
>   -                this.urlResolver = new FactoryURLResolver(urlFactory);
>                } catch (Exception e) {
>                    getLogger().error("cannot obtain URLFactory", e);
>                }
>   @@ -123,7 +122,7 @@
>                    this.sourceFileName = this.sourceFileName +
> "sitemap.xmap";
>                }
>                try {
>   -                environment.setURLResolver(this.urlResolver);
>   +                environment.setURLResolver(new
> FactoryURLResolver(this.manager, this.urlFactory));
>                    this.source = environment.resolve(this.sourceFileName);
>                } finally {
>                    environment.setURLResolver(null);
>   @@ -210,7 +209,7 @@
>                    XSLTFactoryLoader.setLogger(getLogger());
>                    programGenerator =
> (ProgramGenerator)this.manager.lookup(Roles.PROGRAM_GENERATOR);
>                    try {
>   -                    environment.setURLResolver(this.urlResolver);
>   +                    environment.setURLResolver(new
> FactoryURLResolver(this.manager, this.urlFactory));
>                        smap =
> (Sitemap)programGenerator.load(this.manager, this.sourceFileName,
> markupLanguage,
>                            programmingLanguage, environment);
>                    } finally {
>   @@ -220,6 +219,10 @@
>
> programGenerator.release((CompiledComponent)this.sitemap);
>                    }
>                    this.sitemap = smap;
>   +                // create the urlResolver
>   +                this.urlResolver = new
> SitemapURLResolver(this.sitemap.getComponentManager(),
>   +
> this.urlFactory,
>   +
> this.sitemap);
>                    getLogger().debug("Sitemap regeneration complete");
>                    if (this.sitemap != null) {
>                        getLogger().debug("The sitemap has been
> successfully compiled!");
>
>
>
>   1.1.1.1.2.2 +6 -1
> xml-cocoon2/src/org/apache/cocoon/sitemap/Sitemap.java
>
>   Index: Sitemap.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/Sitemap.java,v
>   retrieving revision 1.1.1.1.2.1
>   retrieving revision 1.1.1.1.2.2
>   diff -u -r1.1.1.1.2.1 -r1.1.1.1.2.2
>   --- Sitemap.java	2001/06/08 14:42:07	1.1.1.1.2.1
>   +++ Sitemap.java	2001/06/28 09:58:21	1.1.1.1.2.2
>   @@ -21,7 +21,7 @@
>     * Base interface for generated <code>Sitemap</code> classes
>     *
>     * @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
>   - * @version CVS $Revision: 1.1.1.1.2.1 $ $Date: 2001/06/08 14:42:07 $
>   + * @version CVS $Revision: 1.1.1.1.2.2 $ $Date: 2001/06/28 09:58:21 $
>     */
>    public interface Sitemap extends CompiledComponent,
> Configurable, Contextualizable, Processor {
>        int GENERATOR = 1;
>   @@ -31,6 +31,11 @@
>        int ACTION = READER << 1;
>        int MATCHER = ACTION << 1;
>        int SELECTOR = MATCHER << 1;
>   +
>   +    /**
>   +     * Return the component manager for this sitemap
>   +     */
>   +    ComponentManager getComponentManager();
>
>        /**
>         * Process the given <code>Environment</code>
>
>
>
>   No                   revision
>
>
>   No                   revision
>
>
>   1.1.2.1   +0 -0
> xml-cocoon2/src/org/apache/cocoon/sitemap/SitemapSource.java
>
>   Index: SitemapSource.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/SitemapSource.java,v
>   retrieving revision 1.1
>   retrieving revision 1.1.2.1
>   diff -u -r1.1 -r1.1.2.1
>   --- SitemapSource.java	2001/06/28 09:56:46	1.1
>   +++ SitemapSource.java	2001/06/28 09:58:22	1.1.2.1
>   @@ -38,7 +38,7 @@
>     * Description of a source which is described by a pipeline.
>     *
>     * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
>   - * @version CVS $Revision: 1.1 $ $Date: 2001/06/28 09:56:46 $
>   + * @version CVS $Revision: 1.1.2.1 $ $Date: 2001/06/28 09:58:22 $
>     */
>
>    public final class SitemapSource
>
>
>
>   1.1.2.1   +0 -0
> xml-cocoon2/src/org/apache/cocoon/sitemap/SitemapURLResolver.java
>
>   Index: SitemapURLResolver.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/SitemapURLReso
> lver.java,v
>   retrieving revision 1.1
>   retrieving revision 1.1.2.1
>   diff -u -r1.1 -r1.1.2.1
>   --- SitemapURLResolver.java	2001/06/28 09:56:47	1.1
>   +++ SitemapURLResolver.java	2001/06/28 09:58:22	1.1.2.1
>   @@ -28,7 +28,7 @@
>     * This class used only the <code>URLFactory</code>.
>     *
>     * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
>   - * @version CVS $Revision: 1.1 $ $Date: 2001/06/28 09:56:47 $
>   + * @version CVS $Revision: 1.1.2.1 $ $Date: 2001/06/28 09:58:22 $
>     */
>
>    public final class SitemapURLResolver
>
>
>
>   No                   revision
>
>
>   No                   revision
>
>
>   1.8.2.3   +1 -1
> xml-cocoon2/src/org/apache/cocoon/transformation/I18nTransformer.java
>
>   Index: I18nTransformer.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/transformation/I18nTra
> nsformer.java,v
>   retrieving revision 1.8.2.2
>   retrieving revision 1.8.2.3
>   diff -u -r1.8.2.2 -r1.8.2.3
>   --- I18nTransformer.java	2001/06/19 07:37:53	1.8.2.2
>   +++ I18nTransformer.java	2001/06/28 09:58:24	1.8.2.3
>   @@ -855,7 +855,7 @@
>         *Loads translations from given URL
>         */
>        private void initialiseDictionary(Source inputSource)
>   -            throws SAXException, MalformedURLException, IOException {
>   +    throws ProcessingException, SAXException,
> MalformedURLException, IOException {
>
>            Parser parser = null;
>
>
>
>
>   1.15.2.4  +3 -1
> xml-cocoon2/src/org/apache/cocoon/transformation/TraxTransformer.java
>
>   Index: TraxTransformer.java
>   ===================================================================
>   RCS file:
> /home/cvs/xml-cocoon2/src/org/apache/cocoon/transformation/TraxTra
> nsformer.java,v
>   retrieving revision 1.15.2.3
>   retrieving revision 1.15.2.4
>   diff -u -r1.15.2.3 -r1.15.2.4
>   --- TraxTransformer.java	2001/06/22 02:19:08	1.15.2.3
>   +++ TraxTransformer.java	2001/06/28 09:58:24	1.15.2.4
>   @@ -100,7 +100,7 @@
>     * @author <a href="mailto:dims@yahoo.com">Davanum Srinivas</a>
>     * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
>     * @author <a href="mailto:giacomo@apache.org">Giacomo Pati</a>
>   - * @version CVS $Id: TraxTransformer.java,v 1.15.2.3
> 2001/06/22 02:19:08 vgritsenko Exp $
>   + * @version CVS $Id: TraxTransformer.java,v 1.15.2.4
> 2001/06/28 09:58:24 cziegeler Exp $
>     */
>    public class TraxTransformer extends ContentHandlerWrapper
>    implements Transformer, Composable, Recyclable, Configurable,
> Cacheable, Disposable, URIResolver {
>   @@ -279,6 +279,8 @@
>                throw new javax.xml.transform.TransformerException(e);
>           } catch (SAXException e) {
>               throw new javax.xml.transform.TransformerException(e);
>   +        } catch (ProcessingException e) {
>   +            throw new javax.xml.transform.TransformerException(e);
>            }
>        }
>        /**
>
>
>
>
> ----------------------------------------------------------------------
> In case of troubles, e-mail:     webmaster@xml.apache.org
> To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
> For additional commands, e-mail: cocoon-cvs-help@xml.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
For additional commands, email: cocoon-dev-help@xml.apache.org


Re: AW: cvs commit: xml-cocoon2/src/org/apache/cocoon/transformation I18nTransformer.java TraxTransformer.java

Posted by Sylvain Wallez <sy...@anyware-tech.com>.

Carsten Ziegeler a écrit :
> 
> Hi Team,
> 
> first the good news: We have a working cocoon: protocol. Just add
> 
> <map:match pattern="test">
>         <map:generate src="cocoon://hello.html"/>
>         <map:serialize type="xml"/>
> </map:match>
> 
> to your sitemap and you will get the response of the hello.html
> pipeline as xml.
> 
> The ContentAggregator now uses these cocoon: urls, too.
> 
Great job, Carsten !

> Let's start the problems now:
> - We need to define the exact meaning of the cocoon: url, is it
> relative to the current sitemap or does it always start at the
> root sitemap?
> 
Since "cocoon:" isn't a real URL protocol (host and port have no meaning
here), it could depend on the number of "/" characters, i.e. :
- "cocoon:hello.html" : relative to the current URI
- "cocoon:/hello.html" : relative to the current sitemap
- "cocoon://hello.html" : absolute from the root sitemap

> - The ContentAggregator was designed to aggregate pipelines. We
>   could now use it to aggregate any xml sources! But this would
>   require to explicitly use the cocoon: protocol in the <map:part>
>   of the aggregation (breaking compatibility).
>   I vote +1 for this change.
> 
+1 also. This increases consistency since all "src" attributes will have
the same behaviour (filesystem access when no protocol is specified).

> - And now the really bad news:
>   The cocoon: protocol does not use the URLFactory nor does it
>   use any URL object. Why? Well, last year was the discussion
>   about adding own protocol handlers in a servlet environment
>   in this mailing list. The conclusion was, that the usual
>   java approach is not possible.
>   So I thought of making a fake URL object. But this is neither
>   possible as the URL class is final.
>   The current solution: The URL objects and the cocoon: protocol
>   are wrapped by the Source object (introduced month ago with
>   the SourceResolver). There is the URLSource object which wrapps
>   URLs and the SitemapSource object describing a pipeline.
> 
>   This approach together with the fact that adding real protocol
>   handlers in a servlet environment is not possible leads me
>   to the conclusion that the URLFactory is not of as much use
>   as it could be.
>   I would suggest to move it over to a SourceFactory which produces
>   Source objects from an url.
> 
> PS: Oh, I forgot to mention that of course the cocoon: protocol
>     is directly streamed into the pipeline, this means retrieving
>     the content of this url is not done by first converting
>     the sax events into a byte stream and then reparsing this
>     to create sax events.
>     The Source object is now capable of streaming its content.
>     I changed the FileGenerator to use this feature directly. We
>     should update the other components as well.
> 
> Carsten
> 
+1 for having SourceFactory being cocoon's preferred way to retrieve
content. This allows to have particular schemes like cocoon: while still
being able to use regular URLs.

-- 
Sylvain Wallez
Anyware Technologies - http://www.anyware-tech.com

---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
For additional commands, email: cocoon-dev-help@xml.apache.org