sylvain 01/12/26 14:00:34 Modified: scratchpad/src/org/apache/cocoon/treeprocessor TreeProcessor.java scratchpad/src/org/apache/cocoon/treeprocessor/sitemap SerializeNode.java src/org/apache/cocoon/sitemap Handler.java SitemapManager.java Added: src/org/apache/cocoon/components/source DelayedRefreshSourceWrapper.java Removed: src/org/apache/cocoon/components/source DelayedLastModified.java Log: - redesign refresh delay as a Source wrapper, - set the default sitemap refresh delay to 1 sec. Revision Changes Path 1.6 +6 -8 xml-cocoon2/scratchpad/src/org/apache/cocoon/treeprocessor/TreeProcessor.java Index: TreeProcessor.java =================================================================== RCS file: /home/cvs/xml-cocoon2/scratchpad/src/org/apache/cocoon/treeprocessor/TreeProcessor.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- TreeProcessor.java 2001/12/20 16:17:54 1.5 +++ TreeProcessor.java 2001/12/26 22:00:33 1.6 @@ -35,7 +35,7 @@ import org.apache.cocoon.components.pipeline.EventPipeline; import org.apache.cocoon.components.pipeline.StreamPipeline; import org.apache.cocoon.components.source.CocoonSourceFactory; -import org.apache.cocoon.components.source.DelayedLastModified; +import org.apache.cocoon.components.source.DelayedRefreshSourceWrapper; import org.apache.cocoon.components.source.SourceHandler; import org.apache.cocoon.components.source.URLSource; import org.apache.cocoon.components.url.URLFactory; @@ -49,7 +49,7 @@ * Interpreted tree-traversal implementation of a pipeline assembly language. * * @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a> - * @version CVS $Revision: 1.5 $ $Date: 2001/12/20 16:17:54 $ + * @version CVS $Revision: 1.6 $ $Date: 2001/12/26 22:00:33 $ */ public class TreeProcessor extends AbstractLoggable implements ThreadSafe, Processor, @@ -91,8 +91,6 @@ /** The source of the tree definition */ protected Source source; - protected DelayedLastModified sourceLastModified; - /** Delay for <code>sourceLastModified</code>. */ protected long lastModifiedDelay; @@ -268,7 +266,7 @@ try { environment.setSourceHandler(this.sourceHandler); - if (this.rootNode == null || this.sourceLastModified.get() > this.lastModified) { + if (this.rootNode == null || this.source.getLastModified() > this.lastModified) { setupRootNode(environment); } return this.rootNode.invoke(environment, context); @@ -281,7 +279,7 @@ // Now that we entered the synchronized area, recheck what's already // been checked in process(). - if (this.rootNode != null && sourceLastModified.get() <= this.lastModified) { + if (this.rootNode != null && source.getLastModified() <= this.lastModified) { // Nothing changed return; } @@ -290,8 +288,8 @@ if (this.rootNode == null) { // First call : create source - this.source = env.resolve(this.sourceName); - this.sourceLastModified = new DelayedLastModified(this.source, 10000L); + // FIXME : make the delay configurable + this.source = new DelayedRefreshSourceWrapper(env.resolve(this.sourceName), 1000L); } else { // Dispose existing tree, we will build a new one. 1.3 +10 -2 xml-cocoon2/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/SerializeNode.java Index: SerializeNode.java =================================================================== RCS file: /home/cvs/xml-cocoon2/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/SerializeNode.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SerializeNode.java 2001/12/20 16:17:55 1.2 +++ SerializeNode.java 2001/12/26 22:00:33 1.3 @@ -8,6 +8,7 @@ package org.apache.cocoon.treeprocessor.sitemap; +import org.apache.cocoon.Constants; import org.apache.cocoon.environment.Environment; import org.apache.cocoon.components.pipeline.EventPipeline; import org.apache.cocoon.components.pipeline.StreamPipeline; @@ -20,7 +21,7 @@ /** * * @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a> - * @version CVS $Revision: 1.2 $ $Date: 2001/12/20 16:17:55 $ + * @version CVS $Revision: 1.3 $ $Date: 2001/12/26 22:00:33 $ */ public class SerializeNode extends AbstractProcessingNode { @@ -44,9 +45,16 @@ this.statusCode = statusCode; } - public boolean invoke(Environment env, InvokeContext context) + public final boolean invoke(Environment env, InvokeContext context) throws Exception { + // Perform link translation if requested + if (env.getObjectModel().containsKey(Constants.LINK_OBJECT)) { + context.getEventPipeline().addTransformer( + "!link-translator!", null, MapStackResolver.EMPTY_PARAMETERS + ); + } + StreamPipeline pipeline = context.getStreamPipeline(); if (this.mimeType == null) { 1.1 xml-cocoon2/src/org/apache/cocoon/components/source/DelayedRefreshSourceWrapper.java Index: DelayedRefreshSourceWrapper.java =================================================================== /***************************************************************************** * Copyright (C) The Apache Software Foundation. All rights reserved. * * ------------------------------------------------------------------------- * * This software is published under the terms of the Apache Software License * * version 1.1, a copy of which has been included with this distribution in * * the LICENSE file. * *****************************************************************************/ package org.apache.cocoon.components.source; import org.apache.cocoon.environment.Source; import org.apache.cocoon.environment.ModifiableSource; import org.apache.avalon.excalibur.pool.Recyclable; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.xml.XMLizable; import org.xml.sax.InputSource; import java.io.IOException; import java.io.InputStream; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; /** * A wrapper around a <code>Source</code> that reduces the number of calls to * <code>Source.getLastModified()</code> which can be a costly operation. * * @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a> * @version $Id: DelayedRefreshSourceWrapper.java,v 1.1 2001/12/26 22:00:33 sylvain Exp $ */ public final class DelayedRefreshSourceWrapper implements Source, ModifiableSource, XMLizable { private Source source; private long delay; private long nextCheckTime = 0; private long lastModified = 0; private boolean isModifiableSource; /** * Creates a wrapper for a <code>Source</code> which ensures that * <code>Source.getLastModified()</code> won't be called more than once per * <code>delay</code> milliseconds period. * * @param source the wrapped <code>Source</code> * @param delay the last-modified refresh delay, in milliseconds */ public DelayedRefreshSourceWrapper(Source source, long delay) { this.source = source; this.delay = delay; this.isModifiableSource = source instanceof ModifiableSource; } /** * Get the last modification time for the wrapped <code>Source</code>. The * age of the returned information is guaranteed to be lower than or equal to * the delay specified in the constructor. * * @return the last modification time. */ public final long getLastModified() { // Do we have to refresh the source ? if (System.currentTimeMillis() >= nextCheckTime) { // Yes this.refresh(); } return this.lastModified; } /** * Force the refresh of the wrapped <code>Source</code>, even if the refresh period * isn't over, and starts a new period. */ public final void refresh() { this.nextCheckTime = System.currentTimeMillis() + this.delay; // Refresh modifiable sources if (this.isModifiableSource) { ((ModifiableSource)this.source).refresh(); } // Keep the last modified date this.lastModified = source.getLastModified(); } public final long getContentLength() { return this.source.getContentLength(); } public final InputStream getInputStream() throws ProcessingException, IOException { return this.source.getInputStream(); } public final InputSource getInputSource() throws ProcessingException, IOException { return this.source.getInputSource(); } public final String getSystemId() { return this.source.getSystemId(); } public final void recycle() { this.source.recycle(); } public final void toSAX(ContentHandler handler) throws SAXException, ProcessingException { this.source.toSAX(handler); } } 1.25 +6 -8 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.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- Handler.java 2001/12/11 21:49:33 1.24 +++ Handler.java 2001/12/26 22:00:33 1.25 @@ -25,9 +25,8 @@ import org.apache.cocoon.components.pipeline.StreamPipeline; import org.apache.cocoon.components.source.CocoonSourceFactory; import org.apache.cocoon.components.source.SourceHandler; -import org.apache.cocoon.components.source.DelayedLastModified; +import org.apache.cocoon.components.source.DelayedRefreshSourceWrapper; import org.apache.cocoon.environment.Environment; -import org.apache.cocoon.environment.ModifiableSource; import org.apache.cocoon.environment.Source; import org.apache.cocoon.environment.SourceResolver; import org.xml.sax.SAXException; @@ -42,7 +41,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.24 $ $Date: 2001/12/11 21:49:33 $ + * @version CVS $Revision: 1.25 $ $Date: 2001/12/26 22:00:33 $ */ public class Handler extends AbstractLoggable implements Runnable, Contextualizable, Composable, Processor, Disposable, SourceResolver { @@ -52,8 +51,7 @@ /** the source of this sitemap */ private String sourceFileName; - private ModifiableSource source; - private DelayedLastModified sourceLastModified; + private Source source; /** the last error */ private Exception exception; @@ -109,7 +107,7 @@ protected boolean hasChanged() { if (available()) { if (check_reload) { - return sitemap.modifiedSince(this.sourceLastModified.get()); + return sitemap.modifiedSince(this.source.getLastModified()); } return false; } @@ -127,8 +125,8 @@ SourceHandler oldSourceHandler = environment.getSourceHandler(); try { environment.setSourceHandler(this.sourceHandler); - this.source = (ModifiableSource)environment.resolve(this.sourceFileName); - this.sourceLastModified = new DelayedLastModified(this.source, this.sitemapCheckDelay); + this.source = new DelayedRefreshSourceWrapper( + environment.resolve(this.sourceFileName), this.sitemapCheckDelay); this.contextSource = environment.resolve(""); } finally { environment.setSourceHandler(oldSourceHandler); 1.3 +4 -3 xml-cocoon2/src/org/apache/cocoon/sitemap/SitemapManager.java Index: SitemapManager.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/SitemapManager.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SitemapManager.java 2001/12/11 21:49:33 1.2 +++ SitemapManager.java 2001/12/26 22:00:33 1.3 @@ -38,7 +38,7 @@ * to Java code. * * @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a> - * @version CVS $Revision: 1.2 $ $Date: 2001/12/11 21:49:33 $ + * @version CVS $Revision: 1.3 $ $Date: 2001/12/26 22:00:33 $ */ public class SitemapManager extends Manager implements Processor, Configurable { @@ -63,17 +63,18 @@ value = sconf.getAttribute("reload-method", "asynchron"); this.reloadSitemapAsynchron = !(value != null && value.equalsIgnoreCase("synchron") == true); - long checkDelay = sconf.getAttributeAsLong("check-delay", 10L); + long checkDelay = sconf.getAttributeAsLong("check-delay", 1L); Handler.setSitemapCheckDelay(checkDelay * 1000L); getLogger().debug("Sitemap location = " + this.sitemapFileName); getLogger().debug("Checking sitemap reload = " + this.checkSitemapReload); getLogger().debug("Reloading sitemap asynchron = " + this.reloadSitemapAsynchron); - getLogger().debug("Sitemap check delay = " + checkDelay + " seconds"); + getLogger().debug("Sitemap check delay = " + checkDelay + " sec"); System.err.println("Sitemap location = " + this.sitemapFileName); System.err.println("Checking sitemap reload = " + this.checkSitemapReload); System.err.println("Reloading sitemap asynchron = " + this.reloadSitemapAsynchron); + System.err.println("Sitemap check delay = " + checkDelay + " sec"); // Read sitemap roles Parser p = null;
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]