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:[EMAIL PROTECTED]">Pierpaolo Fumagalli</a> (Apache Software Foundation, Exoffice Technologies) * @author <a href="mailto:[EMAIL PROTECTED]">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/XSPFormValidatorHelper.java Index: XSPFormValidatorHelper.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/components/language/markup/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:[EMAIL PROTECTED]">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/AbstractEnvironment.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/FactoryURLResolver.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:[EMAIL PROTECTED]">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:[EMAIL PROTECTED]">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/SourceResolver.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:[EMAIL PROTECTED]">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:[EMAIL PROTECTED]">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:[EMAIL PROTECTED]">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/FileGenerator.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:[EMAIL PROTECTED]">Pierpaolo Fumagalli</a> * (Apache Software Foundation, Exoffice Technologies) * @author <a href="mailto:[EMAIL PROTECTED]">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:[EMAIL PROTECTED]">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/ContentAggregator.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:[EMAIL PROTECTED]">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:[EMAIL PROTECTED]">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:[EMAIL PROTECTED]">Carsten Ziegeler</a> * @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a> * @author <a href="mailto:[EMAIL PROTECTED]">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:[EMAIL PROTECTED]">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:[EMAIL PROTECTED]">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/SitemapURLResolver.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:[EMAIL PROTECTED]">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/I18nTransformer.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/TraxTransformer.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:[EMAIL PROTECTED]">Davanum Srinivas</a> * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> * @author <a href="mailto:[EMAIL PROTECTED]">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: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]