sylvain 02/03/27 07:13:40
Modified: . changes.xml todo.xml
src/java/org/apache/cocoon/components/treeprocessor/sitemap
ActSetNode.java ActTypeNode.java PipelinesNode.java
PipelinesNodeBuilder.java RedirectToURINode.java
src/java/org/apache/cocoon/environment Redirector.java
src/java/org/apache/cocoon/environment/commandline
AbstractCommandLineEnvironment.java
src/java/org/apache/cocoon/environment/http
HttpEnvironment.java
src/java/org/apache/cocoon/environment/wrapper
EnvironmentWrapper.java
Log:
Handle internal redirects with "cocoon:"
Revision Changes Path
1.133 +12 -2 xml-cocoon2/changes.xml
Index: changes.xml
===================================================================
RCS file: /home/cvs/xml-cocoon2/changes.xml,v
retrieving revision 1.132
retrieving revision 1.133
diff -u -r1.132 -r1.133
--- changes.xml 26 Mar 2002 12:46:58 -0000 1.132
+++ changes.xml 27 Mar 2002 15:13:40 -0000 1.133
@@ -1,10 +1,10 @@
-<?xml version="1.0"?>
+<?xml version="1.0"?>
<!DOCTYPE changes PUBLIC "-//APACHE//DTD Changes V1.0//EN"
"src/documentation/xdocs/dtd/changes-v10.dtd">
<!--
History of Cocoon changes
- $Id: changes.xml,v 1.132 2002/03/26 12:46:58 nicolaken Exp $
+ $Id: changes.xml,v 1.133 2002/03/27 15:13:40 sylvain Exp $
-->
<changes title="History of Changes">
@@ -35,6 +35,16 @@
</devs>
<release version="@version@" date="@date@">
+ <action dev="SW" type="add">
+ Handle request forwarding (aka internal redirects) using the "cocoon:"
+ pseudo-protocol : writing <map:redirect-to uri="cocoon:/foo.bar"/> makes
+ a recursive call on the current sitemap without going back to the browser
+ (as usual, "cocoon://foo.bar" uses the root sitemap). This also keeps any data
+ that have been stored as request attributes.
+
+ Note: this is only available in the interpreted sitemap engine for now, and
+ will come soon on the compiled engine.
+ </action>
<action dev="NKB" type="fix">
Patch (Bug#: 7251) submitted by Marcus Crafter
([EMAIL PROTECTED]):
1.28 +7 -7 xml-cocoon2/todo.xml
Index: todo.xml
===================================================================
RCS file: /home/cvs/xml-cocoon2/todo.xml,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- todo.xml 20 Mar 2002 14:28:24 -0000 1.27
+++ todo.xml 27 Mar 2002 15:13:40 -0000 1.28
@@ -4,7 +4,7 @@
<!--
History of Cocoon changes
- $Id: todo.xml,v 1.27 2002/03/20 14:28:24 nicolaken Exp $
+ $Id: todo.xml,v 1.28 2002/03/27 15:13:40 sylvain Exp $
-->
@@ -84,15 +84,15 @@
</actions>
<actions priority="medium">
-
+
<action context="code">
- Make a guide on how to upgrade Cocoon,and see how this can be eased.
+ Remove all useless blank strings in XSP-generated code that hinder performances.
+ This should be configurable (through an attribute?) to be able to keep them when
+ needed.
</action>
-
+
<action context="code">
- Check if the map:redirect-to should handle all urls including the
- special cocoon: protocol. This would require making the redirect
- for these urls on the server.
+ Make a guide on how to upgrade Cocoon,and see how this can be eased.
</action>
<action context="code">
1.2 +1 -2
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActSetNode.java
Index: ActSetNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActSetNode.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ActSetNode.java 5 Mar 2002 08:26:23 -0000 1.1
+++ ActSetNode.java 27 Mar 2002 15:13:40 -0000 1.2
@@ -64,7 +64,6 @@
import org.apache.cocoon.components.pipeline.StreamPipeline;
import org.apache.cocoon.sitemap.PatternException;
-import org.apache.cocoon.sitemap.SitemapRedirector;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
import org.apache.cocoon.components.treeprocessor.MapStackResolver;
@@ -79,7 +78,7 @@
* Handles <map:act type="..."> (action-sets calls are handled by {@link
ActSetNode}).
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: ActSetNode.java,v 1.1 2002/03/05 08:26:23 sylvain Exp $
+ * @version CVS $Id: ActSetNode.java,v 1.2 2002/03/27 15:13:40 sylvain Exp $
*/
public class ActSetNode extends SimpleParentProcessingNode
1.2 +8 -8
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActTypeNode.java
Index: ActTypeNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActTypeNode.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ActTypeNode.java 5 Mar 2002 08:26:23 -0000 1.1
+++ ActTypeNode.java 27 Mar 2002 15:13:40 -0000 1.2
@@ -57,10 +57,10 @@
import org.apache.cocoon.acting.Action;
import org.apache.cocoon.environment.Environment;
+import org.apache.cocoon.environment.Redirector;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.sitemap.PatternException;
-import org.apache.cocoon.sitemap.SitemapRedirector;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
import org.apache.cocoon.components.treeprocessor.MapStackResolver;
@@ -75,7 +75,7 @@
* Handles <map:act type="..."> (action-sets calls are handled by {@link
ActSetNode}).
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: ActTypeNode.java,v 1.1 2002/03/05 08:26:23 sylvain Exp $
+ * @version CVS $Id: ActTypeNode.java,v 1.2 2002/03/27 15:13:40 sylvain Exp $
*/
public class ActTypeNode extends SimpleSelectorProcessingNode
@@ -111,12 +111,12 @@
throws Exception {
// Prepare data needed by the action
- Map objectModel = env.getObjectModel();
- SitemapRedirector redirector = PipelinesNode.getRedirector(env);
- SourceResolver resolver = getSourceResolver(objectModel);
- List mapStack = context.getMapStack();
- String resolvedSource = source.resolve(mapStack);
- Parameters resolvedParams =
MapStackResolver.buildParameters(this.parameters, mapStack);
+ Map objectModel = env.getObjectModel();
+ Redirector redirector = PipelinesNode.getRedirector(env);
+ SourceResolver resolver = getSourceResolver(objectModel);
+ List mapStack = context.getMapStack();
+ String resolvedSource = source.resolve(mapStack);
+ Parameters resolvedParams =
MapStackResolver.buildParameters(this.parameters, mapStack);
Map actionResult;
1.3 +19 -5
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelinesNode.java
Index: PipelinesNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelinesNode.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PipelinesNode.java 12 Mar 2002 15:51:02 -0000 1.2
+++ PipelinesNode.java 27 Mar 2002 15:13:40 -0000 1.3
@@ -56,14 +56,16 @@
import org.apache.cocoon.ResourceNotFoundException;
-import org.apache.cocoon.sitemap.SitemapRedirector;
+import org.apache.cocoon.environment.Redirector;
import org.apache.cocoon.environment.Environment;
+import org.apache.cocoon.environment.ForwardRedirector;
import org.apache.cocoon.components.pipeline.EventPipeline;
import org.apache.cocoon.components.pipeline.StreamPipeline;
import org.apache.cocoon.components.treeprocessor.SimpleParentProcessingNode;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
+import org.apache.cocoon.Processor;
import java.util.*;
import org.apache.avalon.framework.component.ComponentException;
@@ -72,7 +74,7 @@
* Handles <map:pipelines>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: PipelinesNode.java,v 1.2 2002/03/12 15:51:02 sylvain Exp $
+ * @version CVS $Id: PipelinesNode.java,v 1.3 2002/03/27 15:13:40 sylvain Exp $
*/
public final class PipelinesNode extends SimpleParentProcessingNode
@@ -81,6 +83,12 @@
private static final String REDIRECTOR_ATTR = "sitemap:redirector";
private ComponentManager manager;
+
+ private Processor processor;
+
+ public PipelinesNode(Processor processor) {
+ this.processor = processor;
+ }
/**
* Keep the component manager used everywhere in the tree so that we can
@@ -98,8 +106,8 @@
super.setChildren(nodes);
}
- public static SitemapRedirector getRedirector(Environment env) {
- return (SitemapRedirector)env.getAttribute(REDIRECTOR_ATTR);
+ public static Redirector getRedirector(Environment env) {
+ return (Redirector)env.getAttribute(REDIRECTOR_ATTR);
}
/**
@@ -113,7 +121,13 @@
// Recompose context (and pipelines) to the local component manager
context.recompose(this.manager);
- SitemapRedirector redirector = new SitemapRedirector(env);
+ // Build a redirector
+ boolean internal = context.isInternalRequest();
+ ForwardRedirector redirector = new ForwardRedirector(
+ env, this.processor, this.manager,
+ (internal ? context.getEventPipeline() : null),
+ (internal ? context.getStreamPipeline() : null));
+ this.setupLogger(redirector);
Map objectModel = env.getObjectModel();
1.2 +2 -2
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelinesNodeBuilder.java
Index: PipelinesNodeBuilder.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelinesNodeBuilder.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PipelinesNodeBuilder.java 5 Mar 2002 08:26:23 -0000 1.1
+++ PipelinesNodeBuilder.java 27 Mar 2002 15:13:40 -0000 1.2
@@ -61,13 +61,13 @@
* Builds a <map:pipelines>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: PipelinesNodeBuilder.java,v 1.1 2002/03/05 08:26:23 sylvain
Exp $
+ * @version CVS $Id: PipelinesNodeBuilder.java,v 1.2 2002/03/27 15:13:40 sylvain
Exp $
*/
public class PipelinesNodeBuilder extends ContainerNodeBuilder implements
ThreadSafe {
public ProcessingNode buildNode(Configuration config) throws Exception {
- PipelinesNode node = new PipelinesNode();
+ PipelinesNode node = new PipelinesNode(this.treeBuilder.getProcessor());
this.treeBuilder.setupNode(node, config);
ProcessingNode[] children = buildChildNodes(config);
1.2 +2 -2
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/RedirectToURINode.java
Index: RedirectToURINode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/RedirectToURINode.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- RedirectToURINode.java 5 Mar 2002 08:26:23 -0000 1.1
+++ RedirectToURINode.java 27 Mar 2002 15:13:40 -0000 1.2
@@ -66,7 +66,7 @@
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: RedirectToURINode.java,v 1.1 2002/03/05 08:26:23 sylvain Exp $
+ * @version CVS $Id: RedirectToURINode.java,v 1.2 2002/03/27 15:13:40 sylvain Exp $
*/
public class RedirectToURINode extends AbstractProcessingNode {
@@ -88,7 +88,7 @@
getLogger().info("Redirecting to '" + resolvedURI + "' at " +
this.getLocation());
}
- env.redirect (this.keepSession, resolvedURI);
+ PipelinesNode.getRedirector(env).redirect(this.keepSession, resolvedURI);
return true;
}
1.5 +9 -3
xml-cocoon2/src/java/org/apache/cocoon/environment/Redirector.java
Index: Redirector.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/environment/Redirector.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Redirector.java 22 Feb 2002 07:03:49 -0000 1.4
+++ Redirector.java 27 Mar 2002 15:13:40 -0000 1.5
@@ -50,13 +50,14 @@
*/
package org.apache.cocoon.environment;
+import org.apache.cocoon.ProcessingException;
import java.io.IOException;
/**
* Interface for an redirector abstraction
*
* @author <a href="mailto:[EMAIL PROTECTED]">Davanum Srinivas</a>
- * @version CVS $Id: Redirector.java,v 1.4 2002/02/22 07:03:49 cziegeler Exp $
+ * @version CVS $Id: Redirector.java,v 1.5 2002/03/27 15:13:40 sylvain Exp $
*/
public interface Redirector {
@@ -64,7 +65,12 @@
/**
* Redirect to the given URL
*/
- void redirect(boolean sessionmode, String url) throws IOException;
- void globalRedirect(boolean sessionmode, String url) throws IOException;
+ void redirect(boolean sessionmode, String url) throws IOException,
ProcessingException;
+ void globalRedirect(boolean sessionmode, String url) throws IOException,
ProcessingException;
+
+ /**
+ * Was one of the redirection methods called ?
+ */
+ boolean hasRedirected();
}
1.7 +9 -1
xml-cocoon2/src/java/org/apache/cocoon/environment/commandline/AbstractCommandLineEnvironment.java
Index: AbstractCommandLineEnvironment.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/environment/commandline/AbstractCommandLineEnvironment.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- AbstractCommandLineEnvironment.java 22 Feb 2002 07:03:50 -0000 1.6
+++ AbstractCommandLineEnvironment.java 27 Mar 2002 15:13:40 -0000 1.7
@@ -69,7 +69,7 @@
* This environment is used to save the requested file to disk.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @version CVS $Id: AbstractCommandLineEnvironment.java,v 1.6 2002/02/22 07:03:50
cziegeler Exp $
+ * @version CVS $Id: AbstractCommandLineEnvironment.java,v 1.7 2002/03/27 15:13:40
sylvain Exp $
*/
public abstract class AbstractCommandLineEnvironment
@@ -79,6 +79,7 @@
protected String contentType;
protected OutputStream stream;
protected int contentLength;
+ protected boolean hasRedirected = false;
public AbstractCommandLineEnvironment(String uri,
String view,
@@ -96,6 +97,9 @@
*/
public void redirect(boolean sessionmode, String newURL)
throws IOException {
+
+ this.hasRedirected = true;
+
if (sessionmode) {
CommandLineSession.getSession(true);
}
@@ -154,6 +158,10 @@
if (redirectSource != null) redirectSource.recycle();
}
}
+ }
+
+ public boolean hasRedirected() {
+ return this.hasRedirected;
}
/**
1.12 +11 -1
xml-cocoon2/src/java/org/apache/cocoon/environment/http/HttpEnvironment.java
Index: HttpEnvironment.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/environment/http/HttpEnvironment.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- HttpEnvironment.java 22 Mar 2002 02:01:31 -0000 1.11
+++ HttpEnvironment.java 27 Mar 2002 15:13:40 -0000 1.12
@@ -68,7 +68,7 @@
/**
* @author ?
- * @version CVS $Id: HttpEnvironment.java,v 1.11 2002/03/22 02:01:31 vgritsenko Exp
$
+ * @version CVS $Id: HttpEnvironment.java,v 1.12 2002/03/27 15:13:40 sylvain Exp $
*/
public class HttpEnvironment extends AbstractEnvironment implements Redirector {
@@ -90,6 +90,9 @@
/** Cache content type as there is no getContentType() in reponse object */
private String contentType = null;
+
+ /** Did we redirect ? */
+ private boolean hasRedirected = false;
/**
* Constructs a HttpEnvironment object from a HttpServletRequest
@@ -156,6 +159,9 @@
getLogger().debug("redirect: something's broken, request = null");
return;
}
+
+ this.hasRedirected = true;
+
// check if session mode shall be activated
if (sessionmode) {
// The session
@@ -190,6 +196,10 @@
getLogger().debug("Sending redirect to '" + redirect + "'");
this.response.sendRedirect (redirect);
+ }
+
+ public boolean hasRedirected() {
+ return this.hasRedirected;
}
/**
1.10 +3 -5
xml-cocoon2/src/java/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java
Index: EnvironmentWrapper.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- EnvironmentWrapper.java 22 Feb 2002 07:03:51 -0000 1.9
+++ EnvironmentWrapper.java 27 Mar 2002 15:13:40 -0000 1.10
@@ -72,14 +72,12 @@
* contains a <code>RequestWrapper</code> object.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version $Id: EnvironmentWrapper.java,v 1.9 2002/02/22 07:03:51 cziegeler Exp $
+ * @version $Id: EnvironmentWrapper.java,v 1.10 2002/03/27 15:13:40 sylvain Exp $
*/
-public final class EnvironmentWrapper
-extends AbstractEnvironment
-implements Environment {
+public class EnvironmentWrapper extends AbstractEnvironment implements Environment {
/** The wrapped environment */
- private Environment environment;
+ protected Environment environment;
/** The object model */
private Map objectModel;
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]