cziegeler 01/08/16 04:25:41
Modified: . changes.xml todo.xml
src/org/apache/cocoon/components/source
CocoonSourceFactory.java SitemapSource.java
src/org/apache/cocoon/environment AbstractEnvironment.java
Environment.java
src/org/apache/cocoon/environment/wrapper
EnvironmentWrapper.java RequestWrapper.java
Log:
Redesigned the handling of the cocoon: protocol. Removed the pushURI
and popURI methods. It is now possible to load cocoon: resources
parallel in several tasks.
Revision Changes Path
1.29 +6 -1 xml-cocoon2/changes.xml
Index: changes.xml
===================================================================
RCS file: /home/cvs/xml-cocoon2/changes.xml,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- changes.xml 2001/08/11 17:27:56 1.28
+++ changes.xml 2001/08/16 11:25:41 1.29
@@ -4,7 +4,7 @@
<!--
History of Cocoon changes
- $Id: changes.xml,v 1.28 2001/08/11 17:27:56 vgritsenko Exp $
+ $Id: changes.xml,v 1.29 2001/08/16 11:25:41 cziegeler Exp $
-->
<changes title="History of Changes">
@@ -26,6 +26,11 @@
</devs>
<release version="2.1-dev" date="@date@">
+ <action dev="CZ" type="add">
+ Redesigned the handling of the cocoon: protocol. Removed the pushURI
+ and popURI methods. It is now possible to load cocoon: resources
+ parallel in several tasks.
+ </action>
<action dev="VG" type="fix" fixes-bug="2737">
Fixed package name generation for subsitemap components and external components.
</action>
1.8 +1 -5 xml-cocoon2/todo.xml
Index: todo.xml
===================================================================
RCS file: /home/cvs/xml-cocoon2/todo.xml,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- todo.xml 2001/07/23 12:16:29 1.7
+++ todo.xml 2001/08/16 11:25:41 1.8
@@ -4,7 +4,7 @@
<!--
History of Cocoon changes
- $Id: todo.xml,v 1.7 2001/07/23 12:16:29 cziegeler Exp $
+ $Id: todo.xml,v 1.8 2001/08/16 11:25:41 cziegeler Exp $
-->
@@ -54,10 +54,6 @@
<action context="code">
Complete/write documentation in general.
- </action>
-
- <action context="code">
- Remove the pushURI and popURI methods from the environment.
</action>
<action context="code">
1.4 +4 -3
xml-cocoon2/src/org/apache/cocoon/components/source/CocoonSourceFactory.java
Index: CocoonSourceFactory.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/source/CocoonSourceFactory.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- CocoonSourceFactory.java 2001/07/04 10:13:17 1.3
+++ CocoonSourceFactory.java 2001/08/16 11:25:41 1.4
@@ -24,7 +24,7 @@
* as it needs the current <code>Sitemap</code> as input.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Revision: 1.3 $ $Date: 2001/07/04 10:13:17 $
+ * @version CVS $Revision: 1.4 $ $Date: 2001/08/16 11:25:41 $
*/
public final class CocoonSourceFactory
@@ -53,7 +53,8 @@
return new SitemapSource(environment,
this.manager,
this.sitemap,
- location);
+ location,
+ this.getLogger());
}
/**
@@ -65,4 +66,4 @@
throw new ProcessingException("CocoonSourceFactory: environment is
required.");
return this.getSource(environment, base.toExternalForm() + location);
}
-}
\ No newline at end of file
+}
1.14 +9 -20
xml-cocoon2/src/org/apache/cocoon/components/source/SitemapSource.java
Index: SitemapSource.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/source/SitemapSource.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- SitemapSource.java 2001/08/15 03:54:20 1.13
+++ SitemapSource.java 2001/08/16 11:25:41 1.14
@@ -42,6 +42,7 @@
import org.apache.cocoon.xml.ContentHandlerWrapper;
import org.apache.cocoon.xml.XMLConsumer;
import org.apache.cocoon.xml.XMLProducer;
+import org.apache.log.Logger;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -50,7 +51,7 @@
* Description of a source which is defined by a pipeline.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Revision: 1.13 $ $Date: 2001/08/15 03:54:20 $
+ * @version CVS $Revision: 1.14 $ $Date: 2001/08/16 11:25:41 $
*/
public final class SitemapSource
@@ -96,7 +97,8 @@
public SitemapSource(Environment env,
ComponentManager manager,
Sitemap sitemap,
- String uri)
+ String uri,
+ Logger logger)
throws IOException, ProcessingException {
this.manager = manager;
@@ -139,12 +141,13 @@
request.getServerName() +
(isDefaultPort ? "" : ":" + request.getServerPort()) +
request.getContextPath() + '/' + requestURI;
- this.environment = new EnvironmentWrapper(env, requestURI, queryString);
+ this.environment = new EnvironmentWrapper(env, requestURI, queryString,
logger);
queryStringPos = uri.indexOf('?');
if (queryStringPos != -1) {
uri = uri.substring(0, queryStringPos);
}
this.uri = uri;
+ this.environment.setURI(this.prefix, this.uri);
this.refresh();
}
@@ -236,19 +239,12 @@
// set dummy consumer
((XMLProducer)eventPipeline).setConsumer(this);
- try {
- this.environment.pushURI(this.prefix, this.uri);
+ this.environment.setURI(this.prefix, this.uri);
this.processor.process(this.environment, pipeline, eventPipeline);
- } finally {
- this.environment.popURI();
- }
- // Do push again as process() resets sourceHandler in environment
- try {
- this.environment.pushURI(this.prefix, this.uri);
-
String redirectURL = this.environment.getRedirectURL();
if (redirectURL == null) {
if (this.eventPipeline instanceof CacheableEventPipeline) {
+ this.environment.setURI(this.prefix, this.uri);
CacheableEventPipeline cep =
(CacheableEventPipeline)this.eventPipeline;
PipelineCacheKey pck = cep.generateKey(this.environment);
Map validity = null;
@@ -269,9 +265,6 @@
this.redirectSource = this.environment.resolve(redirectURL);
this.lastModificationDate =
this.redirectSource.getLastModified();
}
- } finally {
- this.environment.popURI();
- }
} catch (ProcessingException e) {
reset();
this.exception = e;
@@ -304,13 +297,9 @@
if (this.redirectSource != null) {
this.redirectSource.stream(consumer);
} else {
- try {
- this.environment.pushURI(this.prefix, this.uri);
+ this.environment.setURI(this.prefix, this.uri);
((XMLProducer)eventPipeline).setConsumer(consumer);
eventPipeline.process(this.environment);
- } finally {
- this.environment.popURI();
- }
}
} catch (ComponentException cme) {
throw new ProcessingException("could not lookup pipeline components",
cme);
1.14 +13 -38
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.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- AbstractEnvironment.java 2001/08/14 15:51:31 1.13
+++ AbstractEnvironment.java 2001/08/16 11:25:41 1.14
@@ -25,12 +25,12 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Revision: 1.13 $ $Date: 2001/08/14 15:51:31 $
+ * @version CVS $Revision: 1.14 $ $Date: 2001/08/16 11:25:41 $
*/
public abstract class AbstractEnvironment extends AbstractLoggable implements
Environment {
/** The current uri in progress */
- protected ArrayList uris = new ArrayList();
+ protected String uris;
/** The current prefix to strip off from the request uri */
protected StringBuffer prefix = new StringBuffer();
@@ -90,7 +90,7 @@
*/
public AbstractEnvironment(String uri, String view, URL context, String action)
throws MalformedURLException {
- this.pushURI(null, uri);
+ this.uris = uri;
this.view = view;
this.context = context;
this.action = action;
@@ -119,10 +119,17 @@
* Returns the uri in progress. The prefix is stripped off
*/
public String getURI() {
- return (String)this.uris.get(this.uris.size()-1);
+ return this.uris;
}
/**
+ * Get the Root Context
+ */
+ public URL getRootContext() {
+ return this.rootContext;
+ }
+
+ /**
* Get the prefix of the URI in progress
*/
public String getURIPrefix() {
@@ -134,7 +141,7 @@
*/
public void changeContext(String prefix, String context)
throws MalformedURLException {
- String uri = (String)this.uris.get(this.uris.size()-1);
+ String uri = this.uris;
getLogger().debug("Changing Cocoon context(" + context + ") to prefix(" +
prefix + ")");
getLogger().debug("\tfrom context(" + this.context.toExternalForm() + ")
and prefix(" + this.prefix + ")");
getLogger().debug("\tat URI " + uri);
@@ -181,7 +188,7 @@
}
}
getLogger().debug("New context is " + this.context.toExternalForm());
- this.uris.set(this.uris.size()-1, uri);
+ this.uris = uri;
}
/**
@@ -245,38 +252,6 @@
}
this.getLogger().debug("Resolved to '"+source.getSystemId()+"'");
return source;
- }
-
- /**
- * Push a new URI for processing. If the prefix is null the
- * new URI is inside the current context.
- * If the prefix is not null the context is changed to the root
- * context and the prefix is set.
- */
- public void pushURI(String prefix, String uri) {
- this.uris.add(this.sourceHandler);
- this.uris.add(this.prefix);
- this.uris.add(this.context);
- this.uris.add(uri);
- if (prefix != null) {
- this.context = this.rootContext;
- this.prefix = new StringBuffer(prefix);
- }
- }
-
- /**
- * Pop last pushed URI
- */
- public String popURI() {
- String uri = (String)this.uris.get(this.uris.size()-1);
- this.uris.remove(this.uris.size()-1);
- this.context = (URL)this.uris.get(this.uris.size()-1);
- this.uris.remove(this.uris.size()-1);
- this.prefix = (StringBuffer)this.uris.get(this.uris.size()-1);
- this.uris.remove(this.uris.size()-1);
- this.sourceHandler = (SourceHandler)this.uris.get(this.uris.size()-1);
- this.uris.remove(this.uris.size()-1);
- return uri;
}
/**
1.7 +7 -14 xml-cocoon2/src/org/apache/cocoon/environment/Environment.java
Index: Environment.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/environment/Environment.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- Environment.java 2001/08/14 15:51:31 1.6
+++ Environment.java 2001/08/16 11:25:41 1.7
@@ -11,6 +11,7 @@
import java.io.IOException;
import java.io.OutputStream;
import java.net.MalformedURLException;
+import java.net.URL;
import java.util.Map;
import org.apache.cocoon.components.source.SourceHandler;
import org.xml.sax.SAXException;
@@ -20,7 +21,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Revision: 1.6 $ $Date: 2001/08/14 15:51:31 $
+ * @version CVS $Revision: 1.7 $ $Date: 2001/08/16 11:25:41 $
*/
public interface Environment extends SourceResolver {
@@ -46,6 +47,11 @@
String getURIPrefix();
/**
+ * Get the Root Context
+ */
+ URL getRootContext();
+
+ /**
* Get the view to process
*/
String getView();
@@ -94,19 +100,6 @@
* Get the underlying object model
*/
Map getObjectModel();
-
- /**
- * Push a new URI for processing. If the prefix is null the
- * new URI is inside the current context.
- * If the prefix is not null the context is changed to the root
- * context and the prefix is set.
- */
- void pushURI(String prefix, String uri);
-
- /**
- * Pop last pushed URI
- */
- String popURI();
/**
* Check if the response has been modified since the same
1.5 +26 -105
xml-cocoon2/src/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java
Index: EnvironmentWrapper.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- EnvironmentWrapper.java 2001/08/14 15:51:31 1.4
+++ EnvironmentWrapper.java 2001/08/16 11:25:41 1.5
@@ -10,6 +10,8 @@
import java.io.IOException;
import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
@@ -21,11 +23,13 @@
import org.apache.cocoon.Constants;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.components.source.SourceHandler;
+import org.apache.cocoon.environment.AbstractEnvironment;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.Response;
import org.apache.cocoon.environment.Session;
import org.apache.cocoon.environment.Source;
+import org.apache.log.Logger;
/**
@@ -34,9 +38,10 @@
* contains a <code>RequestWrapper</code> object.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version $Id: EnvironmentWrapper.java,v 1.4 2001/08/14 15:51:31 vgritsenko Exp $
+ * @version $Id: EnvironmentWrapper.java,v 1.5 2001/08/16 11:25:41 cziegeler Exp $
*/
public final class EnvironmentWrapper
+extends AbstractEnvironment
implements Environment {
/** The wrapped environment */
@@ -57,8 +62,14 @@
*/
public EnvironmentWrapper(Environment env,
String requestURI,
- String queryString) {
+ String queryString,
+ Logger logger)
+ throws MalformedURLException {
+ super(env.getURI(), env.getView(), env.getRootContext(), env.getAction());
+ this.setURI(env.getURIPrefix(), env.getURI());
+ this.setLogger(logger);
this.environment = env;
+ this.setSourceHandler(env.getSourceHandler());
// create new object model and replace the request object
this.objectModel = new HashMap(4);
Map oldObjectModel = env.getObjectModel();
@@ -69,17 +80,10 @@
this.objectModel.put(key, oldObjectModel.get(key));
}
this.request = new
RequestWrapper((Request)oldObjectModel.get(Constants.REQUEST_OBJECT),
- requestURI, queryString);
+ requestURI, queryString, this);
this.objectModel.put(Constants.REQUEST_OBJECT, this.request);
}
-
- /**
- * Get the OutputStream
- */
- public OutputStream getOutputStream() throws IOException {
- return this.environment.getOutputStream();
- }
/**
* Redirect the client to a new URL is not allowed
*/
@@ -97,6 +101,14 @@
}
/**
+ * Get the output stream
+ */
+ public OutputStream getOutputStream()
+ throws IOException {
+ return this.environment.getOutputStream();
+ }
+
+ /**
* if a redirect should happen this returns the url,
* otherwise <code>null</code> is returned
*/
@@ -135,108 +147,17 @@
}
/**
- * Get the <code>SourceHandler</code> for the current request
- */
- public SourceHandler getSourceHandler() {
- return this.environment.getSourceHandler();
- }
-
- /**
- * Set the <code>SourceHandler</code> for the current request
- */
- public void setSourceHandler(SourceHandler sourceHandler) {
- this.environment.setSourceHandler(sourceHandler);
- }
-
- /**
- * Get the URI to process. The prefix is stripped off.
- */
- public String getURI() {
- return this.environment.getURI();
- }
-
- /**
- * Get the prefix of the URI in progress.
- */
- public String getURIPrefix() {
- return this.environment.getURIPrefix();
- }
-
- /**
- * Get the view to process
- */
- public String getView() {
- return this.environment.getView();
- }
-
- /**
- * Get the action to process
- */
- public String getAction() {
- return this.environment.getAction();
- }
-
- /**
- * Change the context from uriprefix to context
- */
- public void changeContext(String uriprefix, String context)
- throws Exception {
- this.environment.changeContext(uriprefix, context);
- }
-
- /**
* Get the underlying object model
*/
public Map getObjectModel() {
return this.objectModel;
}
- /**
- * Push a new URI for processing. If the prefix is null the
- * new URI is inside the current context.
- * If the prefix is not null the context is changed to the root
- * context and the prefix is set.
- */
- public void pushURI(String prefix, String uri) {
- this.environment.pushURI(prefix, uri);
+ public void setURI(String prefix, String uri) {
+ this.context = this.rootContext;
+ this.prefix = new StringBuffer((prefix == null ? "" : prefix));
+ this.uris = uri;
}
-
- /**
- * Pop last pushed URI
- */
- public String popURI() {
- return this.environment.popURI();
- }
-
- /**
- * Check if the response has been modified since the same
- * "resource" was requested.
- * The caller has to test if it is really the same "resource"
- * which is requested.
- * @result true if the response is modified or if the
- * environment is not able to test it
- */
- public boolean isResponseModified(long lastModified) {
- return true;
- }
-
- /**
- * Mark the response as not modified.
- */
- public void setResponseIsNotModified() {
- // ignore
- }
-
- /**
- * Resolve the source.
- * @param systemID This is either a system identifier
- * (<code>java.net.URL</code> or a local file.
- */
- public Source resolve(String systemID)
- throws ProcessingException, SAXException, IOException {
- return this.environment.resolve(systemID);
- }
-
}
1.7 +9 -3
xml-cocoon2/src/org/apache/cocoon/environment/wrapper/RequestWrapper.java
Index: RequestWrapper.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/environment/wrapper/RequestWrapper.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- RequestWrapper.java 2001/07/12 19:23:42 1.6
+++ RequestWrapper.java 2001/08/16 11:25:41 1.7
@@ -13,6 +13,7 @@
import java.util.*;
import org.apache.cocoon.environment.Cookie;
+import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.Session;
@@ -23,7 +24,7 @@
* are different.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version $Id: RequestWrapper.java,v 1.6 2001/07/12 19:23:42 balld Exp $
+ * @version $Id: RequestWrapper.java,v 1.7 2001/08/16 11:25:41 cziegeler Exp $
*/
public final class RequestWrapper implements Request {
@@ -39,12 +40,17 @@
/** The request parameters */
private RequestParameters parameters ;
+ /** The environment */
+ private Environment environment;
+
/**
* Constructor
*/
public RequestWrapper(Request request,
String requestURI,
- String queryString) {
+ String queryString,
+ Environment env) {
+ this.environment = env;
this.req = request;
this.requestURI = requestURI;
this.queryString = queryString;
@@ -230,7 +236,7 @@
}
public String getSitemapURI() {
- return this.req.getSitemapURI();
+ return this.environment.getURI();
}
public String getServletPath() {
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]