stephan 2002/08/02 02:21:00 Modified: src/scratchpad/src/org/apache/cocoon/acting CookieValidatorAction.java DatabaseCookieAuthenticatorAction.java src/scratchpad/src/org/apache/cocoon/callback XMLSource.java src/scratchpad/src/org/apache/cocoon/components/repository/impl SlideRepository.java src/scratchpad/src/org/apache/cocoon/generation XPathDirectoryGenerator.java src/scratchpad/src/org/apache/cocoon/precept InstanceTransformer.java src/scratchpad/src/org/apache/cocoon/reading ByteRangeResourceReader.java DirectoryZipArchiver.java ImageReader.java src/scratchpad/src/org/apache/cocoon/taglib/core SourceTag.java src/scratchpad/src/org/apache/cocoon/transformation CastorTransformer.java XMLDBTransformer.java src/scratchpad/src/org/apache/cocoon/transformation/pagination Paginator.java Log: Removed deprecated methods Revision Changes Path 1.8 +2 -1 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/acting/CookieValidatorAction.java Index: CookieValidatorAction.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/acting/CookieValidatorAction.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- CookieValidatorAction.java 31 Jul 2002 13:13:32 -0000 1.7 +++ CookieValidatorAction.java 2 Aug 2002 09:21:00 -0000 1.8 @@ -140,6 +140,7 @@ try { Configuration conf = this.getConfiguration( parameters.getParameter("descriptor", (String) this.settings.get("descriptor")), + resolver, parameters.getParameterAsBoolean("reloadable", reloadable) ); valstr = parameters.getParameter("validate", valstr); 1.7 +2 -1 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/acting/DatabaseCookieAuthenticatorAction.java Index: DatabaseCookieAuthenticatorAction.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/acting/DatabaseCookieAuthenticatorAction.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DatabaseCookieAuthenticatorAction.java 22 Feb 2002 06:58:02 -0000 1.6 +++ DatabaseCookieAuthenticatorAction.java 2 Aug 2002 09:21:00 -0000 1.7 @@ -136,6 +136,7 @@ try { Configuration conf = this.getConfiguration( parameters.getParameter("descriptor", (String) this.settings.get("descriptor")), + resolver, parameters.getParameterAsBoolean("reloadable", reloadable)); boolean cs = true; boolean as = false; 1.5 +3 -2 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/callback/XMLSource.java Index: XMLSource.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/callback/XMLSource.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- XMLSource.java 6 Apr 2002 06:36:53 -0000 1.4 +++ XMLSource.java 2 Aug 2002 09:21:00 -0000 1.5 @@ -50,7 +50,8 @@ */ package org.apache.cocoon.callback; -import org.apache.cocoon.environment.Source; +import org.apache.excalibur.source.Source; + import org.xml.sax.ContentHandler; /** 1.3 +4 -1 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/repository/impl/SlideRepository.java Index: SlideRepository.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/repository/impl/SlideRepository.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SlideRepository.java 18 Jul 2002 22:25:35 -0000 1.2 +++ SlideRepository.java 2 Aug 2002 09:21:00 -0000 1.3 @@ -111,6 +111,9 @@ */ public void enableLogging(Logger logger) { this.logger = logger; + + // FIXME Could not remove deprecated method, because some important + // messages were thrown over the domain logger domain.setLogger(new SlideLoggerAdapter(this.logger)); } 1.5 +10 -4 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/generation/XPathDirectoryGenerator.java Index: XPathDirectoryGenerator.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/generation/XPathDirectoryGenerator.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- XPathDirectoryGenerator.java 22 Feb 2002 06:58:03 -0000 1.4 +++ XPathDirectoryGenerator.java 2 Aug 2002 09:21:00 -0000 1.5 @@ -53,20 +53,26 @@ import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.component.Composable; import org.apache.avalon.framework.parameters.Parameters; + +import org.apache.avalon.excalibur.xml.Parser; import org.apache.avalon.excalibur.xml.xpath.XPathProcessor; + import org.apache.cocoon.ProcessingException; import org.apache.cocoon.ResourceNotFoundException; -import org.apache.cocoon.components.parser.Parser; -import org.apache.cocoon.environment.Source; +import org.apache.cocoon.components.source.SourceUtil; import org.apache.cocoon.environment.SourceResolver; import org.apache.cocoon.xml.dom.DOMStreamer; + import org.apache.regexp.RE; import org.apache.regexp.RESyntaxException; + import org.w3c.dom.Document; import org.w3c.dom.NodeList; + import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; + import java.io.File; import java.io.IOException; import java.net.URL; @@ -193,7 +199,7 @@ doc = null; try { doc = parser.parseDocument( - resolver.resolve(in.toURL().toExternalForm()).getInputSource()); + SourceUtil.getInputSource(resolver.resolveURI(in.toURL().toExternalForm()))); } catch (SAXException se) { this.getLogger().error("Warning:" + in.getName() + " is not a valid XML file. Ignoring"); 1.7 +25 -41 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept/InstanceTransformer.java Index: InstanceTransformer.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept/InstanceTransformer.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- InstanceTransformer.java 2 Aug 2002 07:06:20 -0000 1.6 +++ InstanceTransformer.java 2 Aug 2002 09:21:00 -0000 1.7 @@ -102,61 +102,37 @@ package org.apache.cocoon.precept; - - import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.ProcessingException; - import org.apache.cocoon.precept.acting.AbstractPreceptorAction; - -import org.apache.cocoon.caching.CacheValidity; - -import org.apache.cocoon.caching.NOPCacheValidity; - import org.apache.cocoon.environment.ObjectModelHelper; - import org.apache.cocoon.environment.Request; - import org.apache.cocoon.environment.Session; - import org.apache.cocoon.environment.SourceResolver; - import org.apache.cocoon.transformation.AbstractTransformer; +import org.apache.excalibur.source.SourceValidity; +import org.apache.excalibur.source.impl.validity.NOPValidity; import org.xml.sax.Attributes; - import org.xml.sax.SAXException; - import org.xml.sax.helpers.AttributesImpl; - - import java.io.IOException; +import java.io.Serializable; import java.util.Map; - import java.util.List; - import java.util.Iterator; - import java.util.Collection; - - /* - * @author Torsten Curdt <[EMAIL PROTECTED]> - */ - public class InstanceTransformer extends AbstractTransformer { - //implements Cacheable { - - public final static String NS = "http://www.dff.st/ns/desire/instance/1.0"; @@ -567,21 +543,29 @@ } + /** + * Generate the unique key. + * This key must be unique inside the space of this component. + * This method must be invoked before the generateValidity() method. + * + * @return The generated key or <code>null</code> if the component + * is currently not cacheable. + */ + public Serializable generateKey() { + return NOPValidity.SHARED_INSTANCE.toString(); + } - - public long generateKey() { - - return (1); - - } - - - - public CacheValidity generateValidity() { - - return (new NOPCacheValidity()); - - } + /** + * Generate the validity object. + * Before this method can be invoked the generateKey() method + * must be invoked. + * + * @return The generated validity object or <code>null</code> if the + * component is currently not cacheable. + */ + public SourceValidity generateValidity() { + return NOPValidity.SHARED_INSTANCE; + } } 1.2 +50 -37 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/reading/ByteRangeResourceReader.java Index: ByteRangeResourceReader.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/reading/ByteRangeResourceReader.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ByteRangeResourceReader.java 12 Jun 2002 17:25:23 -0000 1.1 +++ ByteRangeResourceReader.java 2 Aug 2002 09:21:00 -0000 1.2 @@ -51,23 +51,27 @@ package org.apache.cocoon.reading; import org.apache.avalon.framework.parameters.Parameters; + import org.apache.cocoon.ProcessingException; -import org.apache.cocoon.caching.CacheValidity; -import org.apache.cocoon.caching.Cacheable; -import org.apache.cocoon.caching.TimeStampCacheValidity; +import org.apache.cocoon.caching.CacheableProcessingComponent; import org.apache.cocoon.environment.Context; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.Response; -import org.apache.cocoon.environment.Source; import org.apache.cocoon.environment.SourceResolver; import org.apache.cocoon.environment.http.HttpResponse; import org.apache.cocoon.util.ByteRange; import org.apache.cocoon.util.HashUtil; + +import org.apache.excalibur.source.Source; +import org.apache.excalibur.source.SourceException; +import org.apache.excalibur.source.SourceValidity; + import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; +import java.io.Serializable; import java.util.Date; import java.util.Map; import java.util.StringTokenizer; @@ -94,7 +98,7 @@ */ public class ByteRangeResourceReader extends AbstractReader - implements Cacheable { + implements CacheableProcessingComponent { private final static int BUFFER_SIZE = 8192; @@ -110,41 +114,44 @@ public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par) throws ProcessingException, SAXException, IOException { super.setup(resolver, objectModel, src, par); - this.inputSource = this.resolver.resolve(super.source); + + try { + this.inputSource = this.resolver.resolveURI(super.source); + } catch (SourceException se) { + throw new ProcessingException("Could not retrieve source '"+super.source+"'", se); + } } public void recycle() { - super.recycle(); if (this.inputSource != null) { - this.inputSource.recycle(); + this.resolver.release(this.inputSource); this.inputSource = null; } + super.recycle(); } /** * Generate the unique key. * This key must be unique inside the space of this component. + * This method must be invoked before the generateValidity() method. * - * @return The generated key hashes the src + * @return The generated key or <code>null</code> if the component + * is currently not cacheable. */ - public long generateKey() { - if (this.inputSource.getLastModified() != 0) { - return HashUtil.hash(this.inputSource.getSystemId()); - } - return 0; + public Serializable generateKey() { + return this.inputSource.getSystemId(); } /** * Generate the validity object. + * Before this method can be invoked the generateKey() method + * must be invoked. * * @return The generated validity object or <code>null</code> if the * component is currently not cacheable. */ - public CacheValidity generateValidity() { - if (getLastModified() != 0) { - return new TimeStampCacheValidity(this.inputSource.getLastModified()); - } - return null; + public SourceValidity generateValidity() { + return this.inputSource.getValidity(); } /** @@ -218,26 +225,32 @@ byte[] buffer = new byte[BUFFER_SIZE]; int length = -1; - InputStream inputStream = this.inputSource.getInputStream(); - if (byteRange == null) { - while ((length = inputStream.read(buffer)) > -1) { - out.write(buffer, 0, length); - } - } else { - int pos = 0; - int posEnd; - while ((length = inputStream.read(buffer)) > -1) { - posEnd = pos + length - 1; - ByteRange intersection = byteRange.intersection(new ByteRange(pos, posEnd)); - if (intersection != null) { - out.write(buffer, (int) intersection.getStart() - pos, (int) intersection.length()); + + try { + InputStream inputStream = this.inputSource.getInputStream(); + if (byteRange == null) { + while ((length = inputStream.read(buffer)) > -1) { + out.write(buffer, 0, length); + } + } else { + int pos = 0; + int posEnd; + while ((length = inputStream.read(buffer)) > -1) { + posEnd = pos + length - 1; + ByteRange intersection = byteRange.intersection(new ByteRange(pos, posEnd)); + if (intersection != null) { + out.write(buffer, (int) intersection.getStart() - pos, (int) intersection.length()); + } + pos += length; } - pos += length; } + inputStream.close(); + inputStream = null; + } catch (SourceException se) { + throw new ProcessingException("Could not read source '"+super.source+"'", se); + } finally { + out.flush(); } - inputStream.close(); - inputStream = null; - out.flush(); } catch (IOException ioe) { getLogger().debug("Received an IOException, assuming client severed connection on purpose"); } 1.5 +9 -3 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/reading/DirectoryZipArchiver.java Index: DirectoryZipArchiver.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/reading/DirectoryZipArchiver.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- DirectoryZipArchiver.java 11 Jun 2002 23:54:54 -0000 1.4 +++ DirectoryZipArchiver.java 2 Aug 2002 09:21:00 -0000 1.5 @@ -57,9 +57,11 @@ import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.Response; -import org.apache.cocoon.environment.Source; import org.apache.cocoon.environment.SourceResolver; +import org.apache.excalibur.source.Source; +import org.apache.excalibur.source.SourceException; + import org.xml.sax.SAXException; import java.io.File; @@ -98,7 +100,11 @@ this.request = ObjectModelHelper.getRequest(objectModel); this.response = ObjectModelHelper.getResponse(objectModel); - this.inputSource = this.resolver.resolve(super.source); + try { + this.inputSource = this.resolver.resolveURI(super.source); + } catch (SourceException se) { + throw new ProcessingException("Could not retrieve source '"+super.source+"'", se); + } String systemId = inputSource.getSystemId(); if (!systemId.startsWith("file:")) { 1.5 +35 -19 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/reading/ImageReader.java Index: ImageReader.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/reading/ImageReader.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- ImageReader.java 11 Jun 2002 23:54:54 -0000 1.4 +++ ImageReader.java 2 Aug 2002 09:21:00 -0000 1.5 @@ -55,17 +55,18 @@ import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.ProcessingException; -import org.apache.cocoon.caching.CacheValidity; -import org.apache.cocoon.caching.Cacheable; -import org.apache.cocoon.caching.TimeStampCacheValidity; +import org.apache.cocoon.caching.CacheableProcessingComponent; import org.apache.cocoon.environment.Context; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.Response; -import org.apache.cocoon.environment.Source; import org.apache.cocoon.environment.SourceResolver; import org.apache.cocoon.util.HashUtil; +import org.apache.excalibur.source.Source; +import org.apache.excalibur.source.SourceException; +import org.apache.excalibur.source.SourceValidity; + import com.sun.image.codec.jpeg.ImageFormatException; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGDecodeParam; @@ -81,6 +82,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.Serializable; import java.util.Date; import java.util.Map; @@ -103,10 +105,11 @@ * </dl> * * @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Stephan Michels</a> * @version CVS $Revision$ $Date$ */ -public class ImageReader extends AbstractReader implements Composable, Cacheable { +public class ImageReader extends AbstractReader implements Composable, CacheableProcessingComponent { private ComponentManager manager; @@ -131,27 +134,36 @@ this.height = par.getParameterAsInteger("height", 0); this.expireTime = par.getParameterAsInteger("expire-time", -1); getLogger().debug("Image data: [" + this.width + "x" + this.height + "] Expire Time: " + expireTime); - this.inputSource = this.resolver.resolve(super.source); + + try { + this.inputSource = this.resolver.resolveURI(super.source); + } catch (SourceException se) { + throw new ProcessingException("Could not retrieve source '"+super.source+"'", se); + } } /** * Generate the unique key. * This key must be unique inside the space of this component. + * This method must be invoked before the generateValidity() method. * - * @return The generated key hashes the src + * @return The generated key or <code>null</code> if the component + * is currently not cacheable. */ - public long generateKey() { - return HashUtil.hash(this.inputSource.getSystemId() + ":" + width + height); + public Serializable generateKey() { + return this.inputSource.getSystemId() + ":" + width + height; } /** * Generate the validity object. + * Before this method can be invoked the generateKey() method + * must be invoked. * * @return The generated validity object or <code>null</code> if the * component is currently not cacheable. */ - public CacheValidity generateValidity() { - return new TimeStampCacheValidity(this.inputSource.getLastModified()); + public SourceValidity generateValidity() { + return this.inputSource.getValidity(); } /** @@ -169,13 +181,17 @@ if (expireTime > 0) { response.setDateHeader("Expires", new Date().getTime() + expireTime); } - - InputStream in = this.inputSource.getInputStream(); - - if ((width == 0) && (height == 0)) { - read(in, out); - } else { - convert(in, width, height, out); + + try { + InputStream in = this.inputSource.getInputStream(); + + if ((width == 0) && (height == 0)) { + read(in, out); + } else { + convert(in, width, height, out); + } + } catch (SourceException se) { + throw new ProcessingException("Could not read source '"+super.source+"'", se); } } 1.2 +24 -6 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/taglib/core/SourceTag.java Index: SourceTag.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/taglib/core/SourceTag.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SourceTag.java 12 Jun 2002 16:48:42 -0000 1.1 +++ SourceTag.java 2 Aug 2002 09:21:00 -0000 1.2 @@ -50,19 +50,37 @@ */ package org.apache.cocoon.taglib.core; +import org.apache.avalon.framework.component.ComponentException; +import org.apache.avalon.framework.component.ComponentManager; +import org.apache.avalon.framework.component.Composable; + import org.apache.cocoon.ProcessingException; -import org.apache.cocoon.environment.Source; +import org.apache.cocoon.components.source.SourceUtil; import org.apache.cocoon.taglib.XMLProducerTagSupport; import org.apache.cocoon.xml.EmbeddedXMLPipe; + +import org.apache.excalibur.source.Source; + import org.xml.sax.SAXException; /** * @author: <a href="mailto:[EMAIL PROTECTED]">Volker Schmitt</a> */ -public class SourceTag extends XMLProducerTagSupport { +public class SourceTag extends XMLProducerTagSupport implements Composable { private String src; private EmbeddedXMLPipe embeddedXMLPipe = new EmbeddedXMLPipe(null); + /** The component manager instance */ + private ComponentManager manager = null; + + /** + * Set the current <code>ComponentManager</code> instance used by this + * <code>Composable</code>. + */ + public void compose(ComponentManager manager) throws ComponentException { + this.manager = manager; + } + public void setSrc(String src) { this.src = src; } @@ -74,8 +92,8 @@ Source source = null; try { embeddedXMLPipe.setConsumer(this.xmlConsumer); - source = resolver.resolve(src); - source.toSAX(embeddedXMLPipe); + source = resolver.resolveURI(src); + SourceUtil.toSAX(source, this.embeddedXMLPipe, this.manager); } catch (Exception e) { if (e instanceof ProcessingException) { ProcessingException pe = (ProcessingException) e; @@ -87,7 +105,7 @@ } finally { embeddedXMLPipe.setConsumer(null); if (source != null) - source.recycle(); + resolver.release(source); } return EVAL_PAGE; } @@ -99,4 +117,4 @@ this.src = null; super.recycle(); } -} \ No newline at end of file +} 1.3 +1 -1 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/transformation/CastorTransformer.java Index: CastorTransformer.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/transformation/CastorTransformer.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- CastorTransformer.java 11 Jun 2002 23:54:54 -0000 1.2 +++ CastorTransformer.java 2 Aug 2002 09:21:00 -0000 1.3 @@ -251,7 +251,7 @@ public String getFile(SourceResolver sr, String FileName) { try{ - String path = sr.resolve(FileName).getSystemId(); + String path = sr.resolveURI(FileName).getSystemId(); if(path.startsWith(FILE_PREFIX)){ path = path.substring(FILE_PREFIX.length()); } 1.8 +20 -8 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/transformation/XMLDBTransformer.java Index: XMLDBTransformer.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/transformation/XMLDBTransformer.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- XMLDBTransformer.java 10 Jun 2002 03:37:39 -0000 1.7 +++ XMLDBTransformer.java 2 Aug 2002 09:21:00 -0000 1.8 @@ -56,15 +56,21 @@ import org.apache.avalon.framework.configuration.Configurable; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; + import org.apache.cocoon.util.TraxErrorHandler; -import org.apache.cocoon.caching.CacheValidity; -import org.apache.cocoon.caching.Cacheable; +//import org.apache.cocoon.caching.CacheValidity; +//import org.apache.cocoon.caching.Cacheable; +import org.apache.cocoon.caching.CacheableProcessingComponent; import org.apache.cocoon.environment.SourceResolver; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.ResourceNotFoundException; + +import org.apache.excalibur.source.SourceValidity; + import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; + import org.xmldb.api.base.Database; import org.xmldb.api.base.Resource; import org.xmldb.api.base.Collection; @@ -78,7 +84,9 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.TransformerConfigurationException; + import java.io.IOException; +import java.io.Serializable; import java.io.StringWriter; import java.util.HashMap; import java.util.Iterator; @@ -152,7 +160,7 @@ * @version CVS $Id$ */ public class XMLDBTransformer extends AbstractTransformer - implements Disposable, Cacheable, Configurable, Initializable { + implements Disposable, CacheableProcessingComponent, Configurable, Initializable { private static String XMLDB_URI = "http://apache.org/cocoon/xmldb/1.0"; private static String XMLDB_QUERY_ELEMENT = "query"; @@ -250,20 +258,24 @@ /** * Generate the unique key. * This key must be unique inside the space of this component. + * This method must be invoked before the generateValidity() method. * - * @return The generated key hashes the src + * @return The generated key or <code>null</code> if the component + * is currently not cacheable. */ - public long generateKey() { - return 1; + public Serializable generateKey() { + return null; } /** * Generate the validity object. + * Before this method can be invoked the generateKey() method + * must be invoked. * * @return The generated validity object or <code>null</code> if the * component is currently not cacheable. */ - public CacheValidity generateValidity() { + public SourceValidity generateValidity() { return null; } 1.13 +65 -53 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/transformation/pagination/Paginator.java Index: Paginator.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/transformation/pagination/Paginator.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- Paginator.java 27 Jun 2002 17:52:29 -0000 1.12 +++ Paginator.java 2 Aug 2002 09:21:00 -0000 1.13 @@ -52,37 +52,40 @@ package org.apache.cocoon.transformation.pagination; import java.io.IOException; +import java.io.Serializable; import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import org.apache.avalon.excalibur.xml.Parser; + import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.component.Component; import org.apache.avalon.framework.component.ComponentException; import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.component.Composable; import org.apache.avalon.framework.parameters.Parameters; -import org.apache.avalon.excalibur.pool.Poolable; -import org.apache.excalibur.store.Store; import org.apache.cocoon.Constants; import org.apache.cocoon.ProcessingException; -import org.apache.cocoon.caching.CacheValidity; -import org.apache.cocoon.caching.Cacheable; -import org.apache.cocoon.caching.CompositeCacheValidity; -import org.apache.cocoon.caching.ParametersCacheValidity; -import org.apache.cocoon.caching.TimeStampCacheValidity; -import org.apache.cocoon.components.parser.Parser; +import org.apache.cocoon.caching.CacheableProcessingComponent; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; -import org.apache.cocoon.environment.Source; import org.apache.cocoon.environment.SourceResolver; import org.apache.cocoon.util.HashUtil; import org.apache.cocoon.xml.ContentHandlerWrapper; import org.apache.cocoon.xml.XMLConsumer; import org.apache.cocoon.transformation.AbstractTransformer; +import org.apache.excalibur.source.Source; +import org.apache.excalibur.source.SourceException; +import org.apache.excalibur.source.SourceValidity; +import org.apache.excalibur.source.impl.validity.AggregatedValidity; +import org.apache.excalibur.source.impl.validity.TimeStampValidity; +import org.apache.excalibur.store.Store; + import org.xml.sax.Attributes; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.AttributesImpl; @@ -91,10 +94,11 @@ * A paginating transformer. * * @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Stephan Michels</a> * @version CVS $Revision$ $Date$ */ public class Paginator extends AbstractTransformer - implements Composable, Disposable, Cacheable { + implements Composable, Disposable, CacheableProcessingComponent { public static final String PAGINATE_URI = "http://apache.org/cocoon/paginate/1.0"; public static final String PAGINATE_PREFIX = "page"; @@ -158,67 +162,75 @@ throw new ProcessingException("I need the paginate instructions (pagesheet) to continue. Set the 'src' attribute."); } - this.level = 0; - this.prefixMapping = false; - this.par = par; - this.objectModel = objectModel; - this.inputSource = resolver.resolve(src); - this.resolver = resolver; - getLogger().debug("Using pagesheet: '" + this.inputSource.getSystemId() + "' in " + this + ", last modified: " + this.inputSource.getLastModified()); - this.page = par.getParameterAsInteger("page", 1); - this.item = par.getParameterAsInteger("item", 0); - this.itemGroup = par.getParameter("item-group", ""); - getLogger().debug("Paginating with [page = " + this.page + ", item = " + this.item + ", item-group = " + this.itemGroup + "]"); - - this.request = ObjectModelHelper.getRequest(objectModel); - this.requestURI = request.getRequestURI(); - - // Get the pagesheet factory from the Store if available, - // otherwise load it and put it into the store for further request - if (store != null) { - pagesheet = (Pagesheet) store.get(src); - } - - // If not in the store or if pagesheet has changed, loads and stores it - if (pagesheet == null || pagesheet.modifiedSince(inputSource.getLastModified())) { - pagesheet = new Pagesheet(); - parser.setContentHandler(pagesheet); - pagesheet.setLastModified(inputSource.getLastModified()); - parser.parse(inputSource.getInputSource()); - if (store != null) store.store(src,pagesheet); - } - - // Clone it in order to avoid concurrency collisions since the - // implementation is not reentrant. - this.pagesheet = (Pagesheet) this.pagesheet.clone(); + try { + this.level = 0; + this.prefixMapping = false; + this.par = par; + this.objectModel = objectModel; + this.inputSource = resolver.resolveURI(src); + this.resolver = resolver; + getLogger().debug("Using pagesheet: '" + this.inputSource.getSystemId() + "' in " + this + ", last modified: " + + this.inputSource.getLastModified()); + this.page = par.getParameterAsInteger("page", 1); + this.item = par.getParameterAsInteger("item", 0); + this.itemGroup = par.getParameter("item-group", ""); + getLogger().debug("Paginating with [page = " + this.page + ", item = " + this.item + ", item-group = " + this.itemGroup + "]"); + + this.request = ObjectModelHelper.getRequest(objectModel); + this.requestURI = request.getRequestURI(); + + // Get the pagesheet factory from the Store if available, + // otherwise load it and put it into the store for further request + if (store != null) { + pagesheet = (Pagesheet) store.get(src); + } + + // If not in the store or if pagesheet has changed, loads and stores it + if (pagesheet == null || pagesheet.modifiedSince(inputSource.getLastModified())) { + pagesheet = new Pagesheet(); + pagesheet.setLastModified(inputSource.getLastModified()); + parser.parse(new InputSource(inputSource.getInputStream()), pagesheet); + if (store != null) store.store(src,pagesheet); + } + + // Clone it in order to avoid concurrency collisions since the + // implementation is not reentrant. + this.pagesheet = (Pagesheet) this.pagesheet.clone(); + } catch (SourceException se) { + throw new ProcessingException("Could not retrieve source '"+src+"'", se); + } } /** * Generate the unique key. * This key must be unique inside the space of this component. + * This method must be invoked before the generateValidity() method. * - * @return The generated key hashes the src + * @return The generated key or <code>null</code> if the component + * is currently not cacheable. */ - public long generateKey() { + public Serializable generateKey() { if (this.inputSource.getLastModified() != 0) { - return HashUtil.hash(this.inputSource.getSystemId() + page); + return this.inputSource.getSystemId() + page; } else { - return 0; + return null; } } /** * Generate the validity object. + * Before this method can be invoked the generateKey() method + * must be invoked. * * @return The generated validity object or <code>null</code> if the * component is currently not cacheable. */ - public CacheValidity generateValidity() { + public SourceValidity generateValidity() { if (this.inputSource.getLastModified() != 0) { - return new CompositeCacheValidity( - new TimeStampCacheValidity(page), - new TimeStampCacheValidity(this.inputSource.getLastModified()) - ); + AggregatedValidity validity = new AggregatedValidity(); + validity.add(new TimeStampValidity(page)); + validity.add(this.inputSource.getValidity()); + return validity; } else { return null; }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]