You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by sy...@apache.org on 2002/11/25 22:52:01 UTC
cvs commit: xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables NOPVariableResolver.java PreparedVariableResolver.java VariableResolver.java VariableResolverFactory.java
sylvain 2002/11/25 13:52:01
Modified: . Tag: cocoon_2_0_3_branch changes.xml
src/java/org/apache/cocoon/components/treeprocessor Tag:
cocoon_2_0_3_branch
AbstractParentProcessingNode.java
AbstractParentProcessingNodeBuilder.java
AbstractProcessingNodeBuilder.java
CategoryNode.java ContainerNode.java
DefaultTreeBuilder.java NamedContainerNode.java
NullNode.java ParameterizableProcessingNode.java
SimpleParentProcessingNode.java package.html
src/java/org/apache/cocoon/components/treeprocessor/sitemap
Tag: cocoon_2_0_3_branch ActNodeBuilder.java
ActSetNode.java ActTypeNode.java ActionSetNode.java
ActionSetNodeBuilder.java AggregateNode.java
AggregateNodeBuilder.java CallNode.java
CallNodeBuilder.java ComponentsSelector.java
GenerateNode.java GenerateNodeBuilder.java
MatchNode.java MatchNodeBuilder.java MountNode.java
MountNodeBuilder.java PipelineNode.java
PipelineNodeBuilder.java PipelinesNode.java
PipelinesNodeBuilder.java PreparableMatchNode.java
ReadNode.java ReadNodeBuilder.java
RedirectToNodeBuilder.java RedirectToURINode.java
SelectNode.java SelectNodeBuilder.java
SerializeNode.java SerializeNodeBuilder.java
SitemapLanguage.java TransformNode.java
TransformNodeBuilder.java package.html
Added: src/java/org/apache/cocoon/components/treeprocessor Tag:
cocoon_2_0_3_branch
PipelineEventComponentProcessingNode.java
src/java/org/apache/cocoon/components/treeprocessor/variables
Tag: cocoon_2_0_3_branch NOPVariableResolver.java
PreparedVariableResolver.java VariableResolver.java
VariableResolverFactory.java
Removed: src/java/org/apache/cocoon/components/treeprocessor Tag:
cocoon_2_0_3_branch MapStackResolver.java
Log:
Port input module sitemap variable subsititution available in 2.1 to the 2.0 branch.
Revision Changes Path
No revision
No revision
1.138.2.70 +7 -1 xml-cocoon2/changes.xml
Index: changes.xml
===================================================================
RCS file: /home/cvs/xml-cocoon2/changes.xml,v
retrieving revision 1.138.2.69
retrieving revision 1.138.2.70
diff -u -r1.138.2.69 -r1.138.2.70
--- changes.xml 20 Nov 2002 11:21:50 -0000 1.138.2.69
+++ changes.xml 25 Nov 2002 21:51:58 -0000 1.138.2.70
@@ -39,6 +39,12 @@
</devs>
<release version="@version@" date="@date@">
+ <action dev="SW" type="add">
+ Extend the syntax of sitemap variable substitution : variables can have a prefix which
+ indicates an InputModule where to get the value from. For example, the expression
+ "{request-param:foo}" will evaluate to the value of the "foo" request parameter (provided
+ of course that the "request-param" InputModule is correctly defined in cocoon.xconf).
+ </action>
<action dev="CZ" type="fix" fixes-bug="12293">
RequestLifecycleComponents were not handled properly when the cocoon: protocol is used
</action>
No revision
No revision
1.2.2.2 +5 -5 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/AbstractParentProcessingNode.java
Index: AbstractParentProcessingNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/AbstractParentProcessingNode.java,v
retrieving revision 1.2.2.1
retrieving revision 1.2.2.2
diff -u -r1.2.2.1 -r1.2.2.2
--- AbstractParentProcessingNode.java 15 Jul 2002 14:42:48 -0000 1.2.2.1
+++ AbstractParentProcessingNode.java 25 Nov 2002 21:51:59 -0000 1.2.2.2
@@ -51,8 +51,6 @@
package org.apache.cocoon.components.treeprocessor;
import org.apache.cocoon.environment.Environment;
-import org.apache.cocoon.components.pipeline.EventPipeline;
-import org.apache.cocoon.components.pipeline.StreamPipeline;
import java.util.List;
import java.util.Map;
@@ -71,14 +69,16 @@
* @param currentMap the <code>Map<code> of parameters produced by this node,
* which is added to <code>listOfMap</code>.
*/
+
protected final boolean invokeNodes(
ProcessingNode[] nodes,
Environment env,
InvokeContext context,
+ String currentName,
Map currentMap)
throws Exception {
- context.pushMap(currentMap);
+ context.pushMap(/*currentName,*/currentMap);
try {
for (int i = 0; i < nodes.length; i++) {
@@ -92,7 +92,7 @@
// No success
context.popMap();
}
-
+
return false;
}
1.1.2.1 +5 -6 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/AbstractParentProcessingNodeBuilder.java
Index: AbstractParentProcessingNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/AbstractParentProcessingNodeBuilder.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- AbstractParentProcessingNodeBuilder.java 5 Mar 2002 08:26:22 -0000 1.1
+++ AbstractParentProcessingNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -54,8 +54,6 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.avalon.framework.logger.AbstractLoggable;
-
import org.apache.cocoon.util.StringUtils;
import java.util.*;
@@ -106,8 +104,10 @@
// Is this element to be ignored ?
if (ignoredChildren != null && ignoredChildren.contains(name)) {
- getLogger().debug("Element '" + name + "' is ignored for building children of element '" +
- child.getName() + "'");
+ if (this.getLogger().isDebugEnabled()) {
+ getLogger().debug("Element '" + name + "' is ignored for building children of element '" +
+ child.getName() + "'");
+ }
return false;
}
@@ -160,7 +160,6 @@
throw ce;
} catch(Exception e) {
String msg = "Error while creating node '" + child.getName() + "' at " + child.getLocation();
- getLogger().error(msg, e);
throw new ConfigurationException(msg, e);
}
}
1.2.2.2 +23 -5 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/AbstractProcessingNodeBuilder.java
Index: AbstractProcessingNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/AbstractProcessingNodeBuilder.java,v
retrieving revision 1.2.2.1
retrieving revision 1.2.2.2
diff -u -r1.2.2.1 -r1.2.2.2
--- AbstractProcessingNodeBuilder.java 2 May 2002 20:19:59 -0000 1.2.2.1
+++ AbstractProcessingNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.2.2.2
@@ -50,12 +50,18 @@
*/
package org.apache.cocoon.components.treeprocessor;
-import org.apache.avalon.framework.logger.AbstractLoggable;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.component.Recomposable;
+import org.apache.avalon.framework.component.ComponentManager;
+import org.apache.avalon.framework.component.ComponentException;
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.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
+
import org.apache.cocoon.sitemap.PatternException;
import java.util.Map;
@@ -68,10 +74,20 @@
*/
-public abstract class AbstractProcessingNodeBuilder extends AbstractLoggable
- implements ProcessingNodeBuilder {
+public abstract class AbstractProcessingNodeBuilder extends AbstractLogEnabled
+ implements ProcessingNodeBuilder, Recomposable {
protected TreeBuilder treeBuilder;
+
+ protected ComponentManager manager;
+
+ public void compose(ComponentManager manager) throws ComponentException {
+ this.manager = manager;
+ }
+
+ public void recompose(ComponentManager manager) throws ComponentException {
+ this.manager = manager;
+ }
public void setBuilder(TreeBuilder treeBuilder) {
this.treeBuilder = treeBuilder;
@@ -106,7 +122,9 @@
String name = child.getAttribute("name");
String value = child.getAttribute("value");
try {
- params.put(MapStackResolver.getResolver(name), MapStackResolver.getResolver(value));
+ params.put(
+ VariableResolverFactory.getResolver(name, this.manager),
+ VariableResolverFactory.getResolver(value, this.manager));
} catch(PatternException pe) {
String msg = "Invalid pattern '" + value + " at " + child.getLocation();
getLogger().error(msg, pe);
1.1.2.1 +1 -3 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/CategoryNode.java
Index: CategoryNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/CategoryNode.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- CategoryNode.java 5 Mar 2002 08:26:22 -0000 1.1
+++ CategoryNode.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -50,8 +50,6 @@
*/
package org.apache.cocoon.components.treeprocessor;
-import org.apache.cocoon.components.pipeline.EventPipeline;
-import org.apache.cocoon.components.pipeline.StreamPipeline;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.ProcessingException;
1.1.2.1 +1 -3 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/ContainerNode.java
Index: ContainerNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/ContainerNode.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- ContainerNode.java 5 Mar 2002 08:26:22 -0000 1.1
+++ ContainerNode.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -50,8 +50,6 @@
*/
package org.apache.cocoon.components.treeprocessor;
-import org.apache.cocoon.components.pipeline.EventPipeline;
-import org.apache.cocoon.components.pipeline.StreamPipeline;
import org.apache.cocoon.environment.Environment;
import java.util.*;
1.3.2.5 +5 -2 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/DefaultTreeBuilder.java
Index: DefaultTreeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/DefaultTreeBuilder.java,v
retrieving revision 1.3.2.4
retrieving revision 1.3.2.5
diff -u -r1.3.2.4 -r1.3.2.5
--- DefaultTreeBuilder.java 15 Jul 2002 14:42:48 -0000 1.3.2.4
+++ DefaultTreeBuilder.java 25 Nov 2002 21:51:59 -0000 1.3.2.5
@@ -81,6 +81,7 @@
import org.apache.cocoon.components.ExtendedComponentSelector;
import org.apache.cocoon.components.LifecycleHelper;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
import org.apache.cocoon.environment.Source;
import org.apache.cocoon.environment.SourceResolver;
@@ -502,7 +503,9 @@
String name = child.getAttribute("name");
String value = child.getAttribute("value");
try {
- params.put(MapStackResolver.getResolver(name), MapStackResolver.getResolver(value));
+ params.put(
+ VariableResolverFactory.getResolver(name, this.manager),
+ VariableResolverFactory.getResolver(value, this.manager));
} catch(PatternException pe) {
String msg = "Invalid pattern '" + value + "' at " + child.getLocation();
getLogger().error(msg, pe);
1.1.2.1 +1 -5 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/NamedContainerNode.java
Index: NamedContainerNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/NamedContainerNode.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- NamedContainerNode.java 5 Mar 2002 08:26:22 -0000 1.1
+++ NamedContainerNode.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -50,10 +50,6 @@
*/
package org.apache.cocoon.components.treeprocessor;
-import org.apache.cocoon.components.pipeline.EventPipeline;
-import org.apache.cocoon.components.pipeline.StreamPipeline;
-import org.apache.cocoon.environment.Environment;
-
/**
* A named container node that just invokes its children.
*
1.1.2.1 +2 -2 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/NullNode.java
Index: NullNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/NullNode.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- NullNode.java 5 Mar 2002 08:26:22 -0000 1.1
+++ NullNode.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -63,7 +63,7 @@
public final boolean invoke(Environment env, InvokeContext context) throws Exception {
- getLogger().debug("Invoke on NullNode at " + getLocation());
+ getLogger().warn("Invoke on NullNode at " + getLocation());
return false;
}
1.1.2.1 +2 -2 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/ParameterizableProcessingNode.java
Index: ParameterizableProcessingNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/ParameterizableProcessingNode.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- ParameterizableProcessingNode.java 5 Mar 2002 08:26:22 -0000 1.1
+++ ParameterizableProcessingNode.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -62,7 +62,7 @@
public interface ParameterizableProcessingNode extends ProcessingNode {
/**
- * Set the parameters of this node as a <code>Map</code> of <code>MapStackResolver</code>s
+ * Set the parameters of this node as a <code>Map</code> of <code>VariableResolver</code>s
* that will be resolved at process-time.
*/
void setParameters(Map parameterMap);
1.1.2.1 +43 -12 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/SimpleParentProcessingNode.java
Index: SimpleParentProcessingNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/SimpleParentProcessingNode.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- SimpleParentProcessingNode.java 5 Mar 2002 08:26:22 -0000 1.1
+++ SimpleParentProcessingNode.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -1,36 +1,36 @@
/*
-
+
============================================================================
The Apache Software License, Version 1.1
============================================================================
-
+
Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
+
Redistribution and use in source and binary forms, with or without modifica-
tion, are permitted provided that the following conditions are met:
-
+
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
-
+
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
-
+
3. The end-user documentation included with the redistribution, if any, must
include the following acknowledgment: "This product includes software
developed by the Apache Software Foundation (http://www.apache.org/)."
Alternately, this acknowledgment may appear in the software itself, if
and wherever such third-party acknowledgments normally appear.
-
+
4. The names "Apache Cocoon" and "Apache Software Foundation" must not be
used to endorse or promote products derived from this software without
prior written permission. For written permission, please contact
apache@apache.org.
-
+
5. Products derived from this software may not be called "Apache", nor may
"Apache" appear in their name, without prior written permission of the
Apache Software Foundation.
-
+
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
@@ -41,18 +41,20 @@
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
+
This software consists of voluntary contributions made by many individuals
on behalf of the Apache Software Foundation and was originally created by
Stefano Mazzocchi <st...@apache.org>. For more information on the Apache
Software Foundation, please see <http://www.apache.org/>.
-
+
*/
package org.apache.cocoon.components.treeprocessor;
import org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.environment.Environment;
+
/**
*
* @author <a href="mailto:sylvain@apache.org">Sylvain Wallez</a>
@@ -66,5 +68,34 @@
public void setChildren(ProcessingNode[] children) {
this.children = children;
+ }
+
+ /**
+ * Boolean method with returns true if this Node has children
+ * and false otherwise
+ *
+ * @return boolean
+ */
+ public boolean hasChildren() {
+ if ((this.children == null) || (this.children.length > 0))
+ return true;
+ return false;
+ }
+
+
+ /**
+ * Define common invoke behavior here
+ */
+ public boolean invoke(Environment env, InvokeContext context) throws Exception {
+
+
+// // inform the pipeline (if available) that we have come across
+// // a possible branch point
+// if (context.pipelineIsSet() && this.hasChildren() ) {
+// context.getProcessingPipeline().informBranchPoint();
+// }
+
+ // processing not yet complete, so return false
+ return false;
}
}
1.1.2.1 +7 -3 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/package.html
Index: package.html
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/package.html,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- package.html 5 Mar 2002 08:26:22 -0000 1.1
+++ package.html 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -1,6 +1,10 @@
<html>
-<head><title>package description</title></head>
+<head>
+ <title>Tree Processor</title>
+</head>
<body>
- Evaluation tree based implementation of the <code>Processor</code> interface.
+ <h1>Evaluation tree based implementation of the <code>Processor</code> interface</h1>
+ <p>
+ </p>
</body>
-
\ No newline at end of file
+</html>
No revision
No revision
1.2.2.1 +1 -7 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/PipelineEventComponentProcessingNode.java
Index: PipelineEventComponentProcessingNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/PipelineEventComponentProcessingNode.java,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- PipelineEventComponentProcessingNode.java 9 Sep 2002 12:00:41 -0000 1.2
+++ PipelineEventComponentProcessingNode.java 25 Nov 2002 21:51:59 -0000 1.2.2.1
@@ -63,15 +63,9 @@
public abstract class PipelineEventComponentProcessingNode extends AbstractProcessingNode {
protected Map views;
- protected Map pipelineHints;
public void setViews(Map views) {
this.views = views;
- }
-
- // Set any pipeline-hint parameters
- public void setPipelineHints(Map parameterMap) {
- this.pipelineHints = parameterMap;
}
public boolean hasViews() {
No revision
No revision
1.1.2.1 +9 -3 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActNodeBuilder.java
Index: ActNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActNodeBuilder.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- ActNodeBuilder.java 5 Mar 2002 08:26:23 -0000 1.1
+++ ActNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -58,9 +58,10 @@
import org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNode;
import org.apache.cocoon.components.treeprocessor.CategoryNodeBuilder;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.LinkedProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
import java.util.*;
@@ -82,10 +83,15 @@
this.actSetName = config.getAttribute("set", null);
if (actSetName == null) {
+ String name = config.getAttribute("name", null);
String source = config.getAttribute("src", null);
String type = this.treeBuilder.getTypeForStatement(config, Action.ROLE + "Selector");
- ActTypeNode actTypeNode = new ActTypeNode(type, source);
+ ActTypeNode actTypeNode = new ActTypeNode(
+ type,
+ VariableResolverFactory.getResolver(source, this.manager),
+ name
+ );
this.treeBuilder.setupNode(actTypeNode, config);
actTypeNode.setChildren(buildChildNodes(config));
1.2.2.1 +11 -7 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.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- ActSetNode.java 27 Mar 2002 15:13:40 -0000 1.2
+++ ActSetNode.java 25 Nov 2002 21:51:59 -0000 1.2.2.1
@@ -60,13 +60,11 @@
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.Redirector;
import org.apache.cocoon.environment.SourceResolver;
-import org.apache.cocoon.components.pipeline.EventPipeline;
-import org.apache.cocoon.components.pipeline.StreamPipeline;
import org.apache.cocoon.sitemap.PatternException;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
import org.apache.cocoon.components.treeprocessor.ParameterizableProcessingNode;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
import org.apache.cocoon.components.treeprocessor.SimpleParentProcessingNode;
@@ -101,8 +99,14 @@
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
- List mapStack = context.getMapStack();
- Parameters resolvedParams = MapStackResolver.buildParameters(this.parameters, mapStack);
+ // Perform any common invoke functionality
+ super.invoke(env, context);
+
+ Parameters resolvedParams = VariableResolver.buildParameters(
+ this.parameters,
+ context,
+ env.getObjectModel()
+ );
Map result = this.actionSet.call(env, context, resolvedParams);
@@ -116,7 +120,7 @@
return true;
} else {
- return this.invokeNodes(this.children, env, context, result);
+ return this.invokeNodes(this.children, env, context, null, result);
}
}
}
1.2.2.1 +20 -11 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.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- ActTypeNode.java 27 Mar 2002 15:13:40 -0000 1.2
+++ ActTypeNode.java 25 Nov 2002 21:51:59 -0000 1.2.2.1
@@ -63,7 +63,7 @@
import org.apache.cocoon.sitemap.PatternException;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
import org.apache.cocoon.components.treeprocessor.ParameterizableProcessingNode;
import org.apache.cocoon.components.treeprocessor.SimpleSelectorProcessingNode;
@@ -85,14 +85,20 @@
private Map parameters;
/** The 'src' attribute */
- protected MapStackResolver source;
+ protected VariableResolver source;
+
+ /** The 'name' for the variable anchor */
+ protected String name;
/** Pre-selected action, if it's ThreadSafe */
protected Action threadSafeAction;
- public ActTypeNode(String name, String source) throws PatternException {
- super(name);
- this.source = MapStackResolver.getResolver(source);
+ protected ComponentManager manager;
+
+ public ActTypeNode(String type, VariableResolver source, String name) throws PatternException {
+ super(type);
+ this.source = source;
+ this.name = name;
}
public void setParameters(Map parameterMap) {
@@ -100,7 +106,7 @@
}
public void compose(ComponentManager manager) throws ComponentException {
-
+ this.manager = manager;
setSelector((ComponentSelector)manager.lookup(Action.ROLE + "Selector"));
// Get the action, if it's thread safe
@@ -109,14 +115,16 @@
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
+
+ // Perform any common invoke functionality
+ super.invoke(env, context);
// Prepare data needed by the action
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);
+ String resolvedSource = source.resolve(context, objectModel);
+ Parameters resolvedParams = VariableResolver.buildParameters(this.parameters, context, objectModel);
Map actionResult;
@@ -147,7 +155,7 @@
} else {
// Action succeeded : process children if there are some, with the action result
if (this.children != null) {
- return this.invokeNodes(this.children, env, context, actionResult);
+ return this.invokeNodes(this.children, env, context, name, actionResult);
} else {
// Return false to continue sitemap invocation
@@ -160,5 +168,6 @@
if (this.threadSafeAction != null) {
this.selector.release(this.threadSafeAction);
}
+ this.manager.release(this.selector);
}
}
1.2.2.1 +20 -12 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActionSetNode.java
Index: ActionSetNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActionSetNode.java,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- ActionSetNode.java 27 Mar 2002 15:10:35 -0000 1.2
+++ ActionSetNode.java 25 Nov 2002 21:51:59 -0000 1.2.2.1
@@ -65,7 +65,7 @@
import org.apache.cocoon.sitemap.PatternException;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
import org.apache.cocoon.components.treeprocessor.NamedProcessingNode;
import org.apache.cocoon.components.treeprocessor.SimpleSelectorProcessingNode;
@@ -88,16 +88,19 @@
/** The actions that are ThreadSafe, to avoid lookups */
private Action[] threadSafeActions;
-
+
/** The src for each action */
- private MapStackResolver[] sources;
-
+ private VariableResolver[] sources;
+
/** The parameters for each action */
private Map[] parameters;
+ /** The component manager */
+ protected ComponentManager manager;
+
public ActionSetNode(
String name, String[] types, String[] actionNames,
- MapStackResolver[] sources, Map[] parameters) {
+ VariableResolver[] sources, Map[] parameters) {
super(name);
this.types = types;
this.actionNames = actionNames;
@@ -106,7 +109,7 @@
}
public void compose(ComponentManager manager) throws ComponentException {
-
+ this.manager = manager;
setSelector((ComponentSelector)manager.lookup(Action.ROLE + "Selector"));
// Get all actions that are thread safe
@@ -119,6 +122,9 @@
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
+
+ // Perform any common invoke functionalty
+ // super.invoke(env, context);
String msg = "An action-set cannot be invoked, at " + this.getLocation();
getLogger().error(msg);
throw new UnsupportedOperationException(msg);
@@ -134,7 +140,6 @@
Map objectModel = env.getObjectModel();
Redirector redirector = PipelinesNode.getRedirector(env);
SourceResolver resolver = getSourceResolver(objectModel);
- List mapStack = context.getMapStack();
String cocoonAction = env.getAction();
@@ -149,10 +154,10 @@
Action action;
String actionName = actionNames[i];
- String source = sources[i].resolve(mapStack);
+ String source = sources[i].resolve(context, objectModel);
if (actionName == null || actionName.equals(cocoonAction)) {
-
- Parameters actionParams = MapStackResolver.buildParameters(parameters[i], mapStack);
+
+ Parameters actionParams = VariableResolver.buildParameters(parameters[i], context, objectModel);
if (actionParams == Parameters.EMPTY_PARAMETERS) {
actionParams = params;
} else {
@@ -191,10 +196,13 @@
}
public void dispose() {
- // Dispose all ThreadSafe actions
+
+ // Dispose ThreadSafe actions
for (int i = 0; i < this.threadSafeActions.length; i++) {
this.selector.release(this.threadSafeActions[i]);
}
+
+ this.manager.release(this.selector);
}
/**
1.2.2.1 +7 -5 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActionSetNodeBuilder.java
Index: ActionSetNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActionSetNodeBuilder.java,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- ActionSetNodeBuilder.java 27 Mar 2002 15:10:35 -0000 1.2
+++ ActionSetNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.2.2.1
@@ -57,7 +57,8 @@
import org.apache.cocoon.acting.Action;
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNodeBuilder;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
import java.util.*;
@@ -93,7 +94,8 @@
actionTypes.add(type);
actionNames.add(childConfig.getAttribute("action", null));
- actionSources.add(MapStackResolver.getResolver(childConfig.getAttribute("src", null)));
+ actionSources.add(VariableResolverFactory.getResolver(
+ childConfig.getAttribute("src", null), this.manager));
actionParameters.add(this.getParameters(childConfig));
} else {
@@ -107,8 +109,8 @@
String[] types = (String[])actionTypes.toArray(new String[actionTypes.size()]);
String[] actions = (String[])actionNames.toArray(new String[actionNames.size()]);
Map[] parameters = (Map[])actionParameters.toArray(new Map[actionParameters.size()]);
- MapStackResolver[] sources =
- (MapStackResolver[])actionSources.toArray(new MapStackResolver[actionSources.size()]);
+ VariableResolver[] sources =
+ (VariableResolver[])actionSources.toArray(new VariableResolver[actionSources.size()]);
ActionSetNode node = new ActionSetNode(actionSetName, types, actions, sources, parameters);
this.treeBuilder.setupNode(node, config);
1.3.2.2 +41 -36 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/AggregateNode.java
Index: AggregateNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/AggregateNode.java,v
retrieving revision 1.3.2.1
retrieving revision 1.3.2.2
diff -u -r1.3.2.1 -r1.3.2.2
--- AggregateNode.java 8 Aug 2002 03:21:28 -0000 1.3.2.1
+++ AggregateNode.java 25 Nov 2002 21:51:59 -0000 1.3.2.2
@@ -52,17 +52,16 @@
import org.apache.avalon.framework.parameters.Parameters;
-import org.apache.cocoon.components.pipeline.EventPipeline;
-import org.apache.cocoon.components.pipeline.StreamPipeline;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.sitemap.PatternException;
import org.apache.cocoon.sitemap.ContentAggregator;
+import org.apache.cocoon.components.pipeline.EventPipeline;
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNode;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
import java.util.*;
@@ -88,23 +87,23 @@
public class AggregateNode extends AbstractProcessingNode {
- private MapStackResolver element;
- private MapStackResolver nsURI;
- private MapStackResolver nsPrefix;
+ private VariableResolver element;
+ private VariableResolver nsURI;
+ private VariableResolver nsPrefix;
/** All parts */
private Part[] allParts;
-
+
/** Pre-filtered Part[] for views that have a matching label in any of the parts */
private Map viewParts;
/** View nodes to jump to */
private Map viewNodes;
- public AggregateNode(String element, String nsURI, String nsPrefix) throws PatternException {
- this.element = MapStackResolver.getResolver(element);
- this.nsURI = MapStackResolver.getResolver(nsURI);
- this.nsPrefix = MapStackResolver.getResolver(nsPrefix);
+ public AggregateNode(VariableResolver element, VariableResolver nsURI, VariableResolver nsPrefix) throws PatternException {
+ this.element = element;
+ this.nsURI = nsURI;
+ this.nsPrefix = nsPrefix;
}
public void setParts(Part[] allParts, Map viewParts) {
@@ -121,7 +120,7 @@
boolean infoEnabled = getLogger().isInfoEnabled();
- List mapStack = context.getMapStack();
+ Map objectModel = env.getObjectModel();
// Setup aggregator
EventPipeline eventPipeline = context.getEventPipeline();
@@ -130,14 +129,14 @@
ContentAggregator aggregator = (ContentAggregator)eventPipeline.getGenerator();
aggregator.setRootElement(
- this.element.resolve(mapStack),
- this.nsURI.resolve(mapStack),
- this.nsPrefix.resolve(mapStack)
+ this.element.resolve(context, objectModel),
+ this.nsURI.resolve(context, objectModel),
+ this.nsPrefix.resolve(context, objectModel)
);
// Get actual parts, potentially filtered by the view
Part[] actualParts;
-
+
String cocoonView = env.getView();
if (cocoonView == null) {
// Keep all parts
@@ -146,7 +145,7 @@
} else {
// Are there some parts that match this view ?
actualParts = (Part[])this.viewParts.get(cocoonView);
-
+
// If not, keep all parts
if (actualParts == null) {
actualParts = this.allParts;
@@ -158,15 +157,15 @@
Part part = actualParts[i];
if (part != null) {
aggregator.addPart(
- part.source.resolve(mapStack),
- part.element.resolve(mapStack),
- part.nsURI.resolve(mapStack),
- part.stripRoot.resolve(mapStack),
- part.nsPrefix.resolve(mapStack)
+ part.source.resolve(context, objectModel),
+ part.element.resolve(context, objectModel),
+ part.nsURI.resolve(context, objectModel),
+ part.stripRoot.resolve(context, objectModel),
+ part.nsPrefix.resolve(context, objectModel)
);
}
}
-
+
// Bug #7196 : Some parts matched the view : jump to that view
if (actualParts != this.allParts) {
ProcessingNode viewNode = (ProcessingNode)this.viewNodes.get(cocoonView);
@@ -175,7 +174,7 @@
getLogger().info("Jumping to view '" + cocoonView + "' from aggregate part at " + this.getLocation());
}
return viewNode.invoke(env, context);
- }
+ }
}
// Check aggregate-level view
@@ -194,19 +193,25 @@
}
public static class Part {
- public Part(String source, String element, String nsURI, String nsPrefix, String stripRoot)
+ public Part(
+ VariableResolver source,
+ VariableResolver element,
+ VariableResolver nsURI,
+ VariableResolver nsPrefix,
+ VariableResolver stripRoot)
throws PatternException {
- this.source = MapStackResolver.getResolver(source);
- this.element = MapStackResolver.getResolver(element);
- this.nsURI = MapStackResolver.getResolver(nsURI);
- this.nsPrefix = MapStackResolver.getResolver(nsPrefix);
- this.stripRoot = MapStackResolver.getResolver(stripRoot);
+ this.source = source;
+ this.element = element;
+ this.nsURI = nsURI;
+ this.nsPrefix = nsPrefix;
+ this.stripRoot = stripRoot;
}
- private MapStackResolver source;
- private MapStackResolver element;
- private MapStackResolver nsURI;
- private MapStackResolver nsPrefix;
- private MapStackResolver stripRoot;
+ private VariableResolver source;
+ private VariableResolver element;
+ private VariableResolver nsURI;
+ private VariableResolver nsPrefix;
+ private VariableResolver stripRoot;
+
}
}
1.3.2.1 +11 -11 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/AggregateNodeBuilder.java
Index: AggregateNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/AggregateNodeBuilder.java,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- AggregateNodeBuilder.java 22 Mar 2002 22:26:13 -0000 1.3
+++ AggregateNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.3.2.1
@@ -54,8 +54,9 @@
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNodeBuilder;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
import org.apache.cocoon.components.treeprocessor.LinkedProcessingNodeBuilder;
@@ -80,9 +81,9 @@
// Get root node data
this.node = new AggregateNode(
- config.getAttribute("element"),
- config.getAttribute("ns", ""),
- config.getAttribute("prefix", "")
+ VariableResolverFactory.getResolver(config.getAttribute("element"), this.manager),
+ VariableResolverFactory.getResolver(config.getAttribute("ns", ""), this.manager),
+ VariableResolverFactory.getResolver(config.getAttribute("prefix", ""), this.manager)
);
this.treeBuilder.setupNode(this.node, config);
@@ -109,18 +110,17 @@
if (!"part".equals(childConfig.getName())) {
String msg = "Unknown element '" + childConfig.getName() + " in aggregate ' at " +
childConfig.getLocation();
- getLogger().error(msg);
throw new ConfigurationException(msg);
}
checkNamespace(childConfig);
AggregateNode.Part currentPart = new AggregateNode.Part(
- childConfig.getAttribute("src"),
- childConfig.getAttribute("element", ""),
- childConfig.getAttribute("ns", ""),
- childConfig.getAttribute("prefix", ""),
- childConfig.getAttribute("strip-root", "false")
+ VariableResolverFactory.getResolver(childConfig.getAttribute("src"), this.manager),
+ VariableResolverFactory.getResolver(childConfig.getAttribute("element", ""), this.manager),
+ VariableResolverFactory.getResolver(childConfig.getAttribute("ns", ""), this.manager),
+ VariableResolverFactory.getResolver(childConfig.getAttribute("prefix", ""), this.manager),
+ VariableResolverFactory.getResolver(childConfig.getAttribute("strip-root", "false"), this.manager)
);
allParts.add(currentPart);
1.3.2.1 +23 -12 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallNode.java
Index: CallNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallNode.java,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- CallNode.java 31 Mar 2002 21:07:48 -0000 1.3
+++ CallNode.java 25 Nov 2002 21:51:59 -0000 1.3.2.1
@@ -51,6 +51,9 @@
package org.apache.cocoon.components.treeprocessor.sitemap;
import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.component.Composable;
+import org.apache.avalon.framework.component.ComponentManager;
+import org.apache.avalon.framework.component.ComponentException;
import org.apache.cocoon.environment.Environment;
@@ -59,9 +62,10 @@
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNode;
import org.apache.cocoon.components.treeprocessor.CategoryNode;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.ParameterizableProcessingNode;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
import java.util.List;
import java.util.Map;
@@ -73,7 +77,9 @@
*/
public class CallNode extends AbstractProcessingNode
- implements Initializable, ParameterizableProcessingNode {
+ implements Initializable, ParameterizableProcessingNode, Composable {
+
+ private ComponentManager manager;
/** The parameters of this node */
private Map parameters;
@@ -81,13 +87,17 @@
/** The 'resource' attribute */
private String resourceName;
- private MapStackResolver resourceResolver;
+ private VariableResolver resourceResolver;
/** The category node */
private CategoryNode resources;
private ProcessingNode resourceNode;
+ public void compose(ComponentManager manager) throws ComponentException {
+ this.manager = manager;
+ }
+
public void setParameters(Map parameterMap) {
this.parameters = parameterMap;
}
@@ -98,25 +108,26 @@
}
public void initialize() throws Exception {
- if (MapStackResolver.needsResolve(this.resourceName)) {
+ if (VariableResolverFactory.needsResolve(this.resourceName)) {
// Will always be resolved at invoke time
- this.resourceResolver = MapStackResolver.getResolver(this.resourceName);
+ this.resourceResolver = VariableResolverFactory.getResolver(this.resourceName, this.manager);
} else {
// Static name : get it now
- this.resourceNode = this.resources.getNodeByName(MapStackResolver.unescape(this.resourceName));
+ this.resourceNode = this.resources.getNodeByName(VariableResolverFactory.unescape(this.resourceName));
}
}
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
+ Map objectModel = env.getObjectModel();
// Resolve parameters, but push them only once the resource name has been
// resolved, otherwise it adds an unwanted nesting level
- Map params = MapStackResolver.resolveMap(this.parameters, context.getMapStack());
+ Map params = VariableResolver.buildMap(this.parameters, context, objectModel);
if (this.resourceNode != null) {
// Static resource name
- context.pushMap(params);
+ context.pushMap(/*null,*/params);
try {
return this.resourceNode.invoke(env, context);
@@ -126,13 +137,13 @@
} else {
// Resolved resource name
- String name = this.resourceResolver.resolve(context.getMapStack());
- if (getLogger().isInfoEnabled()) {
+ String name = this.resourceResolver.resolve(context, objectModel);
+ if (getLogger().isDebugEnabled()) {
getLogger().info("Calling resource " + name);
}
// and only now push the parameters
- context.pushMap(params);
+ context.pushMap(/*null,*/params);
try {
return this.resources.invokeByName(name, env, context);
1.2.2.1 +1 -2 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallNodeBuilder.java
Index: CallNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallNodeBuilder.java,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- CallNodeBuilder.java 13 Mar 2002 17:42:22 -0000 1.2
+++ CallNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.2.2.1
@@ -56,7 +56,6 @@
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.CategoryNode;
import org.apache.cocoon.components.treeprocessor.CategoryNodeBuilder;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.LinkedProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
1.1.2.2 +36 -28 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ComponentsSelector.java
Index: ComponentsSelector.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ComponentsSelector.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- ComponentsSelector.java 8 Aug 2002 03:21:28 -0000 1.1.2.1
+++ ComponentsSelector.java 25 Nov 2002 21:51:59 -0000 1.1.2.2
@@ -78,7 +78,8 @@
* @version CVS $Id$
*/
-public class ComponentsSelector extends ExtendedComponentSelector implements OutputComponentSelector, SitemapComponentSelector {
+public class ComponentsSelector extends ExtendedComponentSelector
+implements OutputComponentSelector, SitemapComponentSelector {
public static final int UNKNOWN = -1;
public static final int GENERATOR = 0;
@@ -170,7 +171,7 @@
if (this.roleId == SERIALIZER || this.roleId == READER) {
this.hintMimeTypes = new HashMap();
}
-
+
this.hintLabels = new HashMap();
super.configure(config);
@@ -193,7 +194,7 @@
this.hintMimeTypes.put(hint, mimeType);
}
}
-
+
String label = config.getAttribute("label", null);
if (label != null) {
// Empty '' attribute will result in empty array,
@@ -213,36 +214,43 @@
*/
public void initialize() /*throws Exception*/ {
- // FIXME : need to catch exceptions since ECS doesn't propagate the throws clause of Initializable
- try {
-
- Configuration emptyConfig = new DefaultConfiguration("", "");
+ // FIXME : need to catch exceptions since ECS doesn't propagate the throws clause of Initializable
+ try {
- // Ensure all system-defined hints exist.
- // NOTE : checking this here means they can be user-defined in the sitemap
- switch(this.roleId) {
- case GENERATOR :
- ensureExists("<notifier>",
- org.apache.cocoon.sitemap.NotifyingGenerator.class, emptyConfig);
+ DefaultConfiguration config = null;
- ensureExists("<aggregator>",
- org.apache.cocoon.sitemap.ContentAggregator.class, emptyConfig);
- break;
+ // Ensure all system-defined hints exist.
+ // NOTE : checking this here means they can be user-defined in the sitemap
+ switch(this.roleId) {
+ case GENERATOR :
+
+ config = new DefaultConfiguration(COMPONENT_NAMES[GENERATOR], "autogenerated");
+ config.setAttribute("name", "<notifier>");
+ ensureExists("<notifier>",
+ org.apache.cocoon.sitemap.NotifyingGenerator.class, config);
+
+ config = new DefaultConfiguration(COMPONENT_NAMES[GENERATOR], "autogenerated");
+ config.setAttribute("name", "<aggregator>");
+ ensureExists("<aggregator>",
+ org.apache.cocoon.sitemap.ContentAggregator.class, config);
+ break;
- case TRANSFORMER :
- ensureExists("<translator>",
- org.apache.cocoon.sitemap.LinkTranslator.class, emptyConfig);
- break;
- }
+ case TRANSFORMER :
+ config = new DefaultConfiguration(COMPONENT_NAMES[TRANSFORMER], "autogenerated");
+ config.setAttribute("name", "<translator>");
+ ensureExists("<translator>",
+ org.apache.cocoon.sitemap.LinkTranslator.class, config);
+ break;
+ }
- super.initialize();
+ super.initialize();
- // Don't keep known hints (they're no more needed)
- this.knownHints = null;
+ // Don't keep known hints (they're no more needed)
+ this.knownHints = null;
- } catch(Exception e) {
- throw new CascadingRuntimeException("Cannot setup default components", e);
- }
+ } catch(Exception e) {
+ throw new CascadingRuntimeException("Cannot setup default components", e);
+ }
}
1.1.2.1 +15 -17 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/GenerateNode.java
Index: GenerateNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/GenerateNode.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- GenerateNode.java 5 Mar 2002 08:26:23 -0000 1.1
+++ GenerateNode.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -50,16 +50,17 @@
*/
package org.apache.cocoon.components.treeprocessor.sitemap;
-import org.apache.cocoon.components.pipeline.EventPipeline;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.sitemap.PatternException;
-import org.apache.cocoon.components.treeprocessor.AbstractProcessingNode;
import org.apache.cocoon.components.treeprocessor.CategoryNode;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.ParameterizableProcessingNode;
+import org.apache.cocoon.components.treeprocessor.PipelineEventComponentProcessingNode;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+
+import org.apache.avalon.framework.parameters.Parameters;
import java.util.*;
@@ -69,46 +70,43 @@
* @version CVS $Id$
*/
-public class GenerateNode extends AbstractProcessingNode implements ParameterizableProcessingNode {
+public class GenerateNode extends PipelineEventComponentProcessingNode implements ParameterizableProcessingNode {
private String generatorName;
- private MapStackResolver source;
+ private VariableResolver source;
private Map parameters;
- private Map views;
/** The category node */
private CategoryNode viewsNode;
- public GenerateNode(String name, String source) throws PatternException {
+ public GenerateNode(String name, VariableResolver source) throws PatternException {
this.generatorName = name;
- this.source = MapStackResolver.getResolver(source);
+ this.source = source;
}
public void setParameters(Map parameterMap) {
this.parameters = parameterMap;
}
- public void setViews(Map views) {
- this.views = views;
- }
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
- List mapStack = context.getMapStack();
+ Map objectModel = env.getObjectModel();
context.getEventPipeline().setGenerator(
this.generatorName,
- source.resolve(mapStack),
- MapStackResolver.buildParameters(this.parameters, mapStack)
+ source.resolve(context, objectModel),
+ VariableResolver.buildParameters(this.parameters, context, objectModel)
);
+
// Check view
if (this.views != null) {
-
+
String cocoonView = env.getView();
if (cocoonView != null) {
@@ -124,7 +122,7 @@
}
}
- // Return false to contine sitemap invocation
+ // Return false to continue sitemap invocation
return false;
}
}
1.1.2.1 +7 -2 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/GenerateNodeBuilder.java
Index: GenerateNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/GenerateNodeBuilder.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- GenerateNodeBuilder.java 5 Mar 2002 08:26:23 -0000 1.1
+++ GenerateNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -57,6 +57,8 @@
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.LinkedProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
import java.util.*;
@@ -79,7 +81,10 @@
this.views = ((SitemapLanguage)this.treeBuilder).getViewsForStatement(Generator.ROLE, type, config);
- this.node = new GenerateNode(type, config.getAttribute("src", null));
+ this.node = new GenerateNode(
+ type,
+ VariableResolverFactory.getResolver(config.getAttribute("src", null), this.manager)
+ );
return this.treeBuilder.setupNode(this.node, config);
}
1.1.2.1 +31 -15 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MatchNode.java
Index: MatchNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MatchNode.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- MatchNode.java 5 Mar 2002 08:26:23 -0000 1.1
+++ MatchNode.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -51,12 +51,11 @@
package org.apache.cocoon.components.treeprocessor.sitemap;
import org.apache.cocoon.environment.Environment;
-import org.apache.cocoon.components.pipeline.EventPipeline;
-import org.apache.cocoon.components.pipeline.StreamPipeline;
import org.apache.cocoon.sitemap.PatternException;
import org.apache.cocoon.components.treeprocessor.SimpleSelectorProcessingNode;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
import org.apache.cocoon.matching.Matcher;
+import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.component.ComponentSelector;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.parameters.Parameters;
@@ -74,19 +73,26 @@
* @version CVS $Id$
*/
-public class MatchNode extends SimpleSelectorProcessingNode implements ParameterizableProcessingNode, Composable {
+public class MatchNode extends SimpleSelectorProcessingNode
+implements ParameterizableProcessingNode, Composable, Disposable {
/** The 'pattern' attribute */
- private MapStackResolver pattern;
+ private VariableResolver pattern;
+
+ /** The 'name' for the variable anchor */
+ private String name;
/** The matcher, if it's ThreadSafe */
private Matcher threadSafeMatcher;
private Map parameters;
- public MatchNode(String name, String pattern) throws PatternException {
- super(name);
- this.pattern = MapStackResolver.getResolver(pattern);
+ private ComponentManager manager;
+
+ public MatchNode(String type, VariableResolver pattern, String name) throws PatternException {
+ super(type);
+ this.pattern = pattern;
+ this.name = name;
}
public void setParameters(Map parameterMap) {
@@ -94,8 +100,8 @@
}
public void compose(ComponentManager manager) throws ComponentException {
-
- super.setSelector((ComponentSelector)manager.lookup(Matcher.ROLE + "Selector"));
+ this.manager = manager;
+ this.setSelector((ComponentSelector)manager.lookup(Matcher.ROLE + "Selector"));
// Get matcher if it's ThreadSafe
this.threadSafeMatcher = (Matcher)this.getThreadSafeComponent();
@@ -103,12 +109,15 @@
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
+
+ // Perform any common invoke functionality
+ super.invoke(env, context);
List mapStack = context.getMapStack();
-
- String resolvedPattern = pattern.resolve(mapStack);
Map objectModel = env.getObjectModel();
- Parameters resolvedParams = MapStackResolver.buildParameters(this.parameters, mapStack);
+
+ String resolvedPattern = pattern.resolve(context, objectModel);
+ Parameters resolvedParams = VariableResolver.buildParameters(this.parameters, context, objectModel);
Map result = null;
@@ -134,11 +143,18 @@
}
// Invoke children with the matcher results
- return this.invokeNodes(children, env, context, result);
+ return this.invokeNodes(children, env, context, name, result);
} else {
// Matcher failed
return false;
}
+ }
+
+ /**
+ * Disposable Interface
+ */
+ public void dispose() {
+ this.manager.release(this.selector);
}
}
1.2.2.1 +19 -23 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MatchNodeBuilder.java
Index: MatchNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MatchNodeBuilder.java,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- MatchNodeBuilder.java 17 Mar 2002 21:55:22 -0000 1.2
+++ MatchNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.2.2.1
@@ -50,19 +50,18 @@
*/
package org.apache.cocoon.components.treeprocessor.sitemap;
-import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentSelector;
-import org.apache.avalon.framework.component.Recomposable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.thread.ThreadSafe;
import org.apache.cocoon.matching.Matcher;
import org.apache.cocoon.matching.PreparableMatcher;
import org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNodeBuilder;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
-import org.apache.cocoon.components.treeprocessor.LinkedProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.SimpleSelectorProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
import java.util.*;
@@ -73,46 +72,43 @@
*/
public class MatchNodeBuilder extends AbstractParentProcessingNodeBuilder
- implements Recomposable {
+ implements ThreadSafe {
private static final String SELECTOR_ROLE = Matcher.ROLE + "Selector";
- private ComponentManager manager;
-
- public void compose(ComponentManager manager) {
- this.manager = manager;
- }
-
- public void recompose(ComponentManager manager) {
- this.manager = manager;
- }
-
public ProcessingNode buildNode(Configuration config) throws Exception {
String pattern = config.getAttribute("pattern", null);
+ String name = config.getAttribute("name", null);
String type = this.treeBuilder.getTypeForStatement(config, SELECTOR_ROLE);
// Get the type and class for this matcher
ComponentsSelector selector = (ComponentsSelector)this.manager.lookup(SELECTOR_ROLE);
- // Find matcher class
- Matcher matcher = (Matcher)selector.select(type);
- Class clazz = matcher.getClass();
- selector.release(matcher);
+ Class clazz = null;
+ try {
+ // Find matcher class
+ Matcher matcher = (Matcher)selector.select(type);
+ clazz = matcher.getClass();
+ selector.release(matcher);
+ } finally {
+ this.manager.release(selector);
+ }
// PreparableMatcher are only prepared if pattern doesn't need request-time resolution.
boolean preparable =
PreparableMatcher.class.isAssignableFrom(clazz) &&
- !MapStackResolver.needsResolve(pattern);
+ !VariableResolverFactory.needsResolve(pattern);
// Instanciate appropriate node
SimpleSelectorProcessingNode node;
+ VariableResolver patternResolver = VariableResolverFactory.getResolver(pattern, this.manager);
if (preparable) {
- node = new PreparableMatchNode(type, pattern);
+ node = new PreparableMatchNode(type, VariableResolverFactory.unescape(pattern),name);
} else {
- node = new MatchNode(type, pattern);
+ node = new MatchNode(type, patternResolver,name);
}
this.treeBuilder.setupNode(node, config);
1.2.2.1 +15 -22 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNode.java
Index: MountNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNode.java,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- MountNode.java 15 Mar 2002 10:51:11 -0000 1.2
+++ MountNode.java 25 Nov 2002 21:51:59 -0000 1.2.2.1
@@ -50,22 +50,16 @@
*/
package org.apache.cocoon.components.treeprocessor.sitemap;
+import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
-
-import org.apache.cocoon.components.pipeline.EventPipeline;
-import org.apache.cocoon.components.pipeline.StreamPipeline;
-
-import org.apache.cocoon.environment.Environment;
-import org.apache.cocoon.sitemap.PatternException;
-
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
+import org.apache.avalon.framework.component.Composable;
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNode;
import org.apache.cocoon.components.treeprocessor.TreeProcessor;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
-
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.environment.Environment;
+import org.apache.cocoon.sitemap.PatternException;
import java.util.*;
-import org.apache.avalon.framework.component.Composable;
-import org.apache.avalon.framework.component.ComponentException;
/**
*
@@ -76,10 +70,10 @@
public class MountNode extends AbstractProcessingNode implements Composable {
/** The 'uri-prefix' attribute */
- private MapStackResolver prefix;
+ private VariableResolver prefix;
/** The 'src' attribute */
- private MapStackResolver source;
+ private VariableResolver source;
/** Processors for sources */
private Map processors = new HashMap();
@@ -93,10 +87,8 @@
/** The component manager to be used by the mounted processor */
private ComponentManager manager;
- public MountNode(String prefix, String source, String language, TreeProcessor parentProcessor)
- throws PatternException {
- this.prefix = MapStackResolver.getResolver(prefix);
- this.source = MapStackResolver.getResolver(source);
+ public MountNode(VariableResolver prefix, VariableResolver source, String language, TreeProcessor parentProcessor) { this.prefix = prefix;
+ this.source = source;
this.language = language;
this.parentProcessor = parentProcessor;
}
@@ -109,14 +101,15 @@
throws Exception {
List mapStack = context.getMapStack();
+ Map objectModel = env.getObjectModel();
- String resolvedSource = this.source.resolve(mapStack);
+ String resolvedSource = this.source.resolve(context, objectModel);
TreeProcessor processor = (TreeProcessor)processors.get(resolvedSource);
if (processor == null) {
processor = getProcessor(env, resolvedSource);
}
- String resolvedPrefix = this.prefix.resolve(mapStack);
+ String resolvedPrefix = this.prefix.resolve(context, objectModel);
String oldPrefix = env.getURIPrefix();
String oldURI = env.getURI();
@@ -141,11 +134,11 @@
}
private synchronized TreeProcessor getProcessor(Environment env, String source) throws Exception {
-
+
TreeProcessor processor = (TreeProcessor)processors.get(source);
if (processor == null) {
-
+
// Handle directory mounts
String actualSource;
if (source.charAt(source.length() - 1) == '/') {
1.1.2.1 +5 -3 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNodeBuilder.java
Index: MountNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNodeBuilder.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- MountNodeBuilder.java 5 Mar 2002 08:26:23 -0000 1.1
+++ MountNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -55,6 +55,8 @@
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
/**
*
@@ -72,8 +74,8 @@
public ProcessingNode buildNode(Configuration config) throws Exception {
MountNode node = new MountNode(
- config.getAttribute("uri-prefix"),
- config.getAttribute("src"),
+ VariableResolverFactory.getResolver(config.getAttribute("uri-prefix"), manager),
+ VariableResolverFactory.getResolver(config.getAttribute("src"), manager),
config.getAttribute("language", null),
this.treeBuilder.getProcessor()
);
1.1.2.3 +47 -43 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelineNode.java
Index: PipelineNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelineNode.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- PipelineNode.java 8 Aug 2002 03:21:28 -0000 1.1.2.2
+++ PipelineNode.java 25 Nov 2002 21:51:59 -0000 1.1.2.3
@@ -50,36 +50,33 @@
*/
package org.apache.cocoon.components.treeprocessor.sitemap;
-import org.apache.avalon.framework.activity.Disposable;
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.framework.configuration.Configuration;
import org.apache.cocoon.ConnectionResetException;
import org.apache.cocoon.Constants;
import org.apache.cocoon.ResourceNotFoundException;
-
-import org.apache.cocoon.environment.Environment;
-import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.components.notification.Notifying;
import org.apache.cocoon.components.notification.NotifyingBuilder;
-import org.apache.cocoon.components.pipeline.EventPipeline;
-import org.apache.cocoon.components.pipeline.StreamPipeline;
import org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
-import org.apache.cocoon.components.treeprocessor.ProcessingNode;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
+import org.apache.cocoon.components.treeprocessor.ParameterizableProcessingNode;
+import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.environment.Environment;
-import java.util.*;
+import java.util.Map;
/**
- *
+ * Handles <map:pipeline>
*
* @author <a href="mailto:sylvain@apache.org">Sylvain Wallez</a>
+ * @author <a href="mailto:gianugo@apache.org">Gianugo Rabellino</a>
+ * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
* @version CVS $Id$
*/
-
-public class PipelineNode extends AbstractParentProcessingNode implements Composable {
+public class PipelineNode
+ extends AbstractParentProcessingNode
+ implements Composable, ParameterizableProcessingNode {
// TODO : handle a 'fail-hard' environment attribute
// can be useful to stop off-line generation when there's an error
@@ -97,6 +94,20 @@
/** Is it the last <pipeline> in the enclosing <pipelines> ? */
private boolean isLast = false;
+ /** The component name of the processing pipeline */
+ protected String processingPipeline;
+
+ /** Optional Sitemap parameters */
+ protected Map parameters;
+
+ /**
+ * A constructor to receive the optional expires parameter
+ * and optional parameters for the processing pipeline
+ */
+ public PipelineNode(Configuration config) {
+ this.processingPipeline = config.getAttribute("type", null);
+ }
+
/**
* The component manager is used to create error pipelines
*/
@@ -104,22 +115,23 @@
this.manager = manager;
}
- public void setChildren(ProcessingNode[] nodes)
- {
+ public void setChildren(ProcessingNode[] nodes) {
this.children = nodes;
}
+ public void setParameters(Map parameterMap) {
+ this.parameters = parameterMap;
+ }
+
public void setLast(boolean isLast) {
this.isLast = isLast;
}
- public void set404Handler(ProcessingNode node)
- {
+ public void set404Handler(ProcessingNode node) {
this.error404 = node;
}
- public void set500Handler(ProcessingNode node)
- {
+ public void set500Handler(ProcessingNode node) {
this.error500 = node;
}
@@ -128,7 +140,7 @@
}
public final boolean invoke(Environment env, InvokeContext context)
- throws Exception {
+ throws Exception {
// Always fail on external resquests if internal only.
if (this.internalOnly && !context.isInternalRequest()) {
@@ -136,7 +148,6 @@
}
try {
-
if (invokeNodes(children, env, context)) {
return true;
} else if (this.isLast) {
@@ -146,44 +157,33 @@
} else {
return false;
}
-
} catch (ConnectionResetException cre) {
// Will be reported by CocoonServlet, rethrowing
throw cre;
-
} catch(ResourceNotFoundException rnfe) {
- getLogger().warn("Resource not found in pipeline at " + getLocation(), rnfe);
-
+ getLogger().info("Resource not found in pipeline at " + getLocation(), rnfe);
if (error404 != null) {
// There's a handler
return invokeErrorHandler(error404, rnfe, env);
-
} else {
// No handler : propagate
throw rnfe;
}
-
} catch(Exception e) {
-
// Rethrow exception for internal requests
if (error500 != null && !context.isInternalRequest()) {
-
- getLogger().warn("Error while processing pipeline at " + getLocation(), e);
-
+ getLogger().info("Error while processing pipeline at " + getLocation(), e);
return invokeErrorHandler(error500, e, env);
-
} else {
// No handler : propagate
-
- getLogger().error("Error while processing pipeline at " + getLocation(), e);
+ getLogger().info("Error while processing pipeline at " + getLocation(), e);
throw e;
}
}
}
private boolean invokeErrorHandler(ProcessingNode node, Exception ex, Environment env)
- throws Exception {
-
+ throws Exception {
InvokeContext errorContext = null;
try {
@@ -198,23 +198,27 @@
// Create a Notifying
NotifyingBuilder notifyingBuilder= (NotifyingBuilder)this.manager.lookup(NotifyingBuilder.ROLE);
- Notifying currentNotifying = notifyingBuilder.build(this, ex);
- this.manager.release(notifyingBuilder);
+ Notifying currentNotifying = null;
+ try {
+ currentNotifying = notifyingBuilder.build(this, ex);
+ } finally {
+ this.manager.release(notifyingBuilder);
+ }
// Add it to the object model
env.getObjectModel().put(Constants.NOTIFYING_OBJECT, currentNotifying );
// <notifier> is added in HandleErrorsNode
return node.invoke(env, errorContext);
-
} catch (Exception subEx) {
- getLogger().error("error notifier barfs", subEx);
+ getLogger().error("Error notifier is unable to notify the problem. Please check the logs. In the default webapp, look in the WEB-INF/logs dir.", subEx);
return false;
-
} finally {
if (errorContext != null) {
errorContext.dispose();
}
}
}
+
}
+
1.1.2.1 +37 -41 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelineNodeBuilder.java
Index: PipelineNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelineNodeBuilder.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- PipelineNodeBuilder.java 5 Mar 2002 08:26:23 -0000 1.1
+++ PipelineNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -1,5 +1,4 @@
/*
-
============================================================================
The Apache Software License, Version 1.1
============================================================================
@@ -53,7 +52,6 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.thread.ThreadSafe;
-
import org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
import org.apache.cocoon.components.treeprocessor.ProcessingNodeBuilder;
@@ -62,72 +60,70 @@
/**
* Builds a <map:pipeline>
-
* @author <a href="mailto:sylvain@apache.org">Sylvain Wallez</a>
+ * @author <a href="mailto:gianugo@apache.org">Gianugo Rabellino</a>
* @version CVS $Id$
*/
-public class PipelineNodeBuilder extends AbstractParentProcessingNodeBuilder implements ThreadSafe {
+public class PipelineNodeBuilder
+ extends AbstractParentProcessingNodeBuilder
+ implements ThreadSafe {
/** This builder has no parameters -- return <code>false</code> */
protected boolean hasParameters() {
return true;
}
- public ProcessingNode buildNode(Configuration config) throws Exception {
+ public ProcessingNode buildNode(Configuration config)
+ throws Exception {
+ PipelineNode node = new PipelineNode( config );
- PipelineNode node = new PipelineNode();
this.treeBuilder.setupNode(node, config);
-
node.setInternalOnly(config.getAttributeAsBoolean("internal-only", false));
-
ProcessingNode error404Handler = null;
ProcessingNode error500Handler = null;
-
Configuration[] childConfigs = config.getChildren();
List children = new ArrayList();
+ for (int i = 0; i < childConfigs.length; i++) {
- childLoop : for (int i = 0; i < childConfigs.length; i++) {
Configuration childConfig = childConfigs[i];
- if (!isChild(childConfig)) {
- continue childLoop;
- }
-
- ProcessingNodeBuilder builder = this.treeBuilder.createNodeBuilder(childConfig);
+ if (isChild(childConfig)) {
- if (builder instanceof HandleErrorsNodeBuilder) {
- // Error handler : check type
- HandleErrorsNode handler = (HandleErrorsNode)builder.buildNode(childConfig);
- int type = handler.getStatusCode();
-
- if ( (type == 404 && error404Handler != null) ||
- (type == 500 && error500Handler != null) ) {
- String msg = "Duplicate handle-errors at " + handler.getLocation();
- getLogger().error(msg);
- throw new ConfigurationException(msg);
- }
-
- if (type == 404) {
- error404Handler = handler;
- } else if (type == 500) {
- error500Handler = handler;
+ ProcessingNodeBuilder builder = this.treeBuilder.createNodeBuilder(childConfig);
+ if (builder instanceof HandleErrorsNodeBuilder) {
+ // Error handler : check type
+ HandleErrorsNode handler = (HandleErrorsNode)builder.buildNode(childConfig);
+ int type = handler.getStatusCode();
+
+ if ( (type == 404 && error404Handler != null) ||
+ (type == 500 && error500Handler != null) ) {
+ String msg = "Duplicate handle-errors at " + handler.getLocation();
+ getLogger().error(msg);
+ throw new ConfigurationException(msg);
+ }
+
+ if (type == 404) {
+ error404Handler = handler;
+ } else if (type == 500) {
+ error500Handler = handler;
+ } else {
+ String msg = "Unknown handle-errors type (" + type + ") at " + handler.getLocation();
+ getLogger().error(msg);
+ throw new ConfigurationException(msg);
+ }
} else {
- String msg = "Unkown handle-errors type (" + type + ") at " + handler.getLocation();
- getLogger().error(msg);
- throw new ConfigurationException(msg);
+ // Regular builder
+ children.add(builder.buildNode(childConfig));
}
-
- } else {
- // Regular builder
- children.add(builder.buildNode(childConfig));
}
}
-
node.setChildren(toNodeArray(children));
node.set404Handler(error404Handler);
node.set500Handler(error500Handler);
-
return node;
}
+
+
}
+
1.3.2.1 +18 -17 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.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- PipelinesNode.java 27 Mar 2002 15:13:40 -0000 1.3
+++ PipelinesNode.java 25 Nov 2002 21:51:59 -0000 1.3.2.1
@@ -50,30 +50,24 @@
*/
package org.apache.cocoon.components.treeprocessor.sitemap;
+import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
-import org.apache.avalon.framework.activity.Disposable;
-
-import org.apache.cocoon.ResourceNotFoundException;
-
-import org.apache.cocoon.environment.Redirector;
-
+import org.apache.cocoon.Processor;
+import org.apache.cocoon.components.treeprocessor.InvokeContext;
+import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.SimpleParentProcessingNode;
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 org.apache.cocoon.environment.Redirector;
-import java.util.*;
-import org.apache.avalon.framework.component.ComponentException;
+import java.util.Map;
/**
* Handles <map:pipelines>
*
* @author <a href="mailto:sylvain@apache.org">Sylvain Wallez</a>
+ * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
* @version CVS $Id$
*/
@@ -83,10 +77,14 @@
private static final String REDIRECTOR_ATTR = "sitemap:redirector";
private ComponentManager manager;
-
+
private Processor processor;
- public PipelinesNode(Processor processor) {
+ /**
+ * Constructor
+ * @param processor The processor for this sitemap
+ */
+ public PipelinesNode(Processor processor) {
this.processor = processor;
}
@@ -117,6 +115,9 @@
*/
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
+
+ // Perform any common invoke functionality
+ super.invoke(env, context);
// Recompose context (and pipelines) to the local component manager
context.recompose(this.manager);
1.2.2.1 +11 -3 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.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- PipelinesNodeBuilder.java 27 Mar 2002 15:13:40 -0000 1.2
+++ PipelinesNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.2.2.1
@@ -53,20 +53,28 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.thread.ThreadSafe;
-
import org.apache.cocoon.components.treeprocessor.ContainerNodeBuilder;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import java.util.HashMap;
+import java.util.Map;
/**
* Builds a <map:pipelines>
*
* @author <a href="mailto:sylvain@apache.org">Sylvain Wallez</a>
+ * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
* @version CVS $Id$
*/
public class PipelinesNodeBuilder extends ContainerNodeBuilder implements ThreadSafe {
- public ProcessingNode buildNode(Configuration config) throws Exception {
+ public ProcessingNode buildNode(Configuration config)
+ throws Exception {
+ // check for component configurations
+ Configuration child = config.getChild("component-configurations", false);
+ if (child != null) {
+ this.checkNamespace(child);
+ }
PipelinesNode node = new PipelinesNode(this.treeBuilder.getProcessor());
this.treeBuilder.setupNode(node, config);
1.1.2.1 +28 -11 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PreparableMatchNode.java
Index: PreparableMatchNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PreparableMatchNode.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- PreparableMatchNode.java 5 Mar 2002 08:26:23 -0000 1.1
+++ PreparableMatchNode.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -51,13 +51,13 @@
package org.apache.cocoon.components.treeprocessor.sitemap;
import org.apache.cocoon.environment.Environment;
-import org.apache.cocoon.components.pipeline.EventPipeline;
-import org.apache.cocoon.components.pipeline.StreamPipeline;
import org.apache.cocoon.sitemap.PatternException;
import org.apache.cocoon.components.treeprocessor.SimpleSelectorProcessingNode;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
import org.apache.cocoon.matching.Matcher;
import org.apache.cocoon.matching.PreparableMatcher;
+import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.component.ComponentSelector;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.Composable;
@@ -80,6 +80,9 @@
/** The 'pattern' attribute */
private String pattern;
+ /** The 'name' for the variable anchor */
+ private String name;
+
private Object preparedPattern;
private Map parameters;
@@ -87,9 +90,12 @@
/** The matcher, if it's ThreadSafe */
private PreparableMatcher threadSafeMatcher;
- public PreparableMatchNode(String name, String pattern) throws PatternException {
- super(name);
+ protected ComponentManager manager;
+
+ public PreparableMatchNode(String type, String pattern, String name) throws PatternException {
+ super(type);
this.pattern = pattern;
+ this.name = name;
}
public void setParameters(Map parameterMap) {
@@ -98,7 +104,7 @@
public void compose(ComponentManager manager) throws ComponentException {
-
+ this.manager = manager;
setSelector((ComponentSelector)manager.lookup(Matcher.ROLE + "Selector"));
// Prepare the pattern, and keep matcher if ThreadSafe
@@ -109,11 +115,10 @@
}
try {
- this.preparedPattern = matcher.preparePattern(MapStackResolver.unescape(this.pattern));
+ this.preparedPattern = matcher.preparePattern(this.pattern);
} catch(PatternException pe) {
String msg = "Invalid pattern '" + this.pattern + "' for matcher at " + this.getLocation();
- getLogger().error(msg, pe);
throw new ComponentException(msg, pe);
} finally {
@@ -125,9 +130,14 @@
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
+
+ // Perform any common invoke functionality
+ super.invoke(env, context);
Map objectModel = env.getObjectModel();
- Parameters resolvedParams = MapStackResolver.buildParameters(this.parameters, context.getMapStack());
+ Parameters resolvedParams = VariableResolver.buildParameters(
+ this.parameters, context, objectModel
+ );
Map result = null;
@@ -153,11 +163,18 @@
}
// Invoke children with the matcher results
- return this.invokeNodes(children, env, context, result);
+ return this.invokeNodes(children, env, context, name, result);
} else {
// Matcher failed
return false;
}
+ }
+
+ /**
+ * Disposable Interface
+ */
+ public void dispose() {
+ this.manager.release(this.selector);
}
}
1.1.2.1 +11 -12 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ReadNode.java
Index: ReadNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ReadNode.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- ReadNode.java 5 Mar 2002 08:26:23 -0000 1.1
+++ ReadNode.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -52,12 +52,11 @@
import org.apache.cocoon.components.pipeline.StreamPipeline;
import org.apache.cocoon.environment.Environment;
-import org.apache.cocoon.sitemap.PatternException;
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNode;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.ParameterizableProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
import java.util.List;
import java.util.Map;
@@ -72,7 +71,7 @@
private String readerName;
- private MapStackResolver source;
+ private VariableResolver source;
private String mimeType;
@@ -87,9 +86,9 @@
* @param mimeType the mime-type, or <code>null</code> not specified.
* @param statusCode the HTTP response status code, or <code>-1</code> if not specified.
*/
- public ReadNode(String name, String source, String mimeType, int statusCode) throws PatternException {
+ public ReadNode(String name, VariableResolver source, String mimeType, int statusCode) {
this.readerName = name;
- this.source = MapStackResolver.getResolver(source);
+ this.source = source;
this.mimeType = mimeType;
this.statusCode = statusCode;
}
@@ -101,7 +100,7 @@
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
- List mapStack = context.getMapStack();
+ Map objectModel = env.getObjectModel();
StreamPipeline pipeline = context.getStreamPipeline();
@@ -109,16 +108,16 @@
// No mime-type set on node
pipeline.setReader(
this.readerName,
- source.resolve(mapStack),
- MapStackResolver.buildParameters(this.parameters, mapStack)
- );
+ source.resolve(context, objectModel),
+ VariableResolver.buildParameters(this.parameters, context, objectModel)
+ );
} else {
// mime-type set on node
pipeline.setReader(
this.readerName,
- source.resolve(mapStack),
- MapStackResolver.buildParameters(this.parameters, mapStack),
+ source.resolve(context, objectModel),
+ VariableResolver.buildParameters(this.parameters, context, objectModel),
this.mimeType
);
}
1.1.2.1 +4 -2 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ReadNodeBuilder.java
Index: ReadNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ReadNodeBuilder.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- ReadNodeBuilder.java 5 Mar 2002 08:26:23 -0000 1.1
+++ ReadNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -58,6 +58,8 @@
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
/**
*
@@ -73,7 +75,7 @@
ReadNode node = new ReadNode(
type,
- config.getAttribute("src", null),
+ VariableResolverFactory.getResolver(config.getAttribute("src", null), this.manager),
config.getAttribute("mime-type", null),
config.getAttributeAsInteger("status-code", -1)
);
1.1.2.1 +5 -4 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/RedirectToNodeBuilder.java
Index: RedirectToNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/RedirectToNodeBuilder.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- RedirectToNodeBuilder.java 5 Mar 2002 08:26:23 -0000 1.1
+++ RedirectToNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -57,8 +57,9 @@
import org.apache.cocoon.components.treeprocessor.CategoryNode;
import org.apache.cocoon.components.treeprocessor.CategoryNodeBuilder;
import org.apache.cocoon.components.treeprocessor.LinkedProcessingNodeBuilder;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
import java.util.*;
@@ -94,14 +95,14 @@
String target = config.getAttribute("target", null);
if (target != null) {
Map params = new HashMap(1);
- params.put("target", MapStackResolver.getResolver(target));
+ params.put("target", VariableResolverFactory.getResolver(target, this.manager));
this.callNode.setParameters(params);
}
return this.callNode;
} else {
ProcessingNode URINode = new RedirectToURINode(
- config.getAttribute("uri"),
+ VariableResolverFactory.getResolver(config.getAttribute("uri"), this.manager),
config.getAttributeAsBoolean("session", false)
);
return this.treeBuilder.setupNode(URINode, config);
1.2.2.1 +9 -10 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.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- RedirectToURINode.java 27 Mar 2002 15:13:40 -0000 1.2
+++ RedirectToURINode.java 25 Nov 2002 21:51:59 -0000 1.2.2.1
@@ -57,8 +57,8 @@
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNode;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
import java.util.List;
import java.util.Map;
@@ -72,24 +72,23 @@
public class RedirectToURINode extends AbstractProcessingNode {
/** The 'uri' attribute */
- private MapStackResolver uri;
+ private VariableResolver uri;
- private boolean keepSession;
+ private boolean createSession;
- public RedirectToURINode(String uri, boolean keepSession) throws PatternException {
- this.uri = MapStackResolver.getResolver(uri);
+ public RedirectToURINode(VariableResolver uri, boolean createSession) throws PatternException {
+ this.uri = uri;
+ this.createSession = createSession;
}
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
- String resolvedURI = uri.resolve(context.getMapStack());
+ String resolvedURI = uri.resolve(context, env.getObjectModel());
if (getLogger().isInfoEnabled()) {
getLogger().info("Redirecting to '" + resolvedURI + "' at " + this.getLocation());
}
-
- PipelinesNode.getRedirector(env).redirect(this.keepSession, resolvedURI);
-
+ PipelinesNode.getRedirector(env).redirect(this.createSession, resolvedURI);
return true;
}
}
1.2.2.1 +14 -9 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SelectNode.java
Index: SelectNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SelectNode.java,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- SelectNode.java 27 Mar 2002 22:20:12 -0000 1.2
+++ SelectNode.java 25 Nov 2002 21:51:59 -0000 1.2.2.1
@@ -66,10 +66,10 @@
import org.apache.cocoon.sitemap.PatternException;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.ParameterizableProcessingNode;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
import org.apache.cocoon.components.treeprocessor.SimpleSelectorProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
import java.util.List;
import java.util.Map;
@@ -91,10 +91,12 @@
private ProcessingNode[][] whenNodes;
- private MapStackResolver[] whenTests;
+ private VariableResolver[] whenTests;
private ProcessingNode[] otherwhiseNodes;
+ private ComponentManager manager;
+
public SelectNode(String name) throws PatternException {
super(name);
}
@@ -103,14 +105,14 @@
this.parameters = parameterMap;
}
- public void setCases(ProcessingNode[][] whenNodes, MapStackResolver[] whenTests, ProcessingNode[] otherwhiseNodes) {
+ public void setCases(ProcessingNode[][] whenNodes, VariableResolver[] whenTests, ProcessingNode[] otherwhiseNodes) {
this.whenNodes = whenNodes;
this.whenTests = whenTests;
this.otherwhiseNodes = otherwhiseNodes;
}
public void compose(ComponentManager manager) throws ComponentException {
-
+ this.manager = manager;
setSelector((ComponentSelector)manager.lookup(Selector.ROLE + "Selector"));
// Get the selector, if it's ThreadSafe
@@ -120,17 +122,19 @@
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
+ // Perform any common invoke functionality
+ super.invoke(env, context);
+
// Prepare data needed by the action
Map objectModel = env.getObjectModel();
- List mapStack = context.getMapStack();
- Parameters resolvedParams = MapStackResolver.buildParameters(this.parameters, mapStack);
+ Parameters resolvedParams = VariableResolver.buildParameters(this.parameters, context, objectModel);
// If selector is ThreadSafe, avoid select() and try/catch block (faster !)
if (this.threadSafeSelector != null) {
for (int i = 0; i < this.whenTests.length; i++) {
if (this.threadSafeSelector.select(
- whenTests[i].resolve(mapStack),
+ whenTests[i].resolve(context, objectModel),
objectModel,
resolvedParams)) {
return invokeNodes(this.whenNodes[i], env, context);
@@ -149,7 +153,7 @@
for (int i = 0; i < this.whenTests.length; i++) {
if (selector.select(
- whenTests[i].resolve(mapStack),
+ whenTests[i].resolve(context, objectModel),
objectModel,
resolvedParams)) {
return invokeNodes(this.whenNodes[i], env, context);
@@ -171,5 +175,6 @@
if (this.threadSafeSelector != null) {
this.selector.release(this.threadSafeSelector);
}
+ this.manager.release(this.selector);
}
}
1.1.2.1 +34 -17 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SelectNodeBuilder.java
Index: SelectNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SelectNodeBuilder.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- SelectNodeBuilder.java 5 Mar 2002 08:26:23 -0000 1.1
+++ SelectNodeBuilder.java 25 Nov 2002 21:51:59 -0000 1.1.2.1
@@ -57,9 +57,10 @@
import org.apache.cocoon.selection.Selector;
import org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNodeBuilder;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.LinkedProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
import java.util.*;
@@ -69,21 +70,20 @@
* @version CVS $Id$
*/
-public class SelectNodeBuilder extends AbstractParentProcessingNodeBuilder implements ThreadSafe {
+public class SelectNodeBuilder extends AbstractParentProcessingNodeBuilder {
+
+ private static final String SELECTOR_ROLE = Selector.ROLE + "Selector";
public ProcessingNode buildNode(Configuration config) throws Exception {
- String type = this.treeBuilder.getTypeForStatement(config, Selector.ROLE + "Selector");
-
- SelectNode node = new SelectNode(type);
- this.treeBuilder.setupNode(node, config);
+ String type = this.treeBuilder.getTypeForStatement(config, SELECTOR_ROLE);
// Lists of ProcessingNode[] and test resolvers for each "when"
List whenChildren = new ArrayList();
List whenTests = new ArrayList();
// Nodes for otherwise (if any)
- ProcessingNode[] otherwhiseNodes = null;
+ ProcessingNode[] otherwiseNodes = null;
Configuration[] childrenConfig = config.getChildren();
for (int i = 0; i < childrenConfig.length; i++) {
@@ -94,19 +94,21 @@
if ("when".equals(name)) {
checkNamespace(childConfig);
- whenTests.add(MapStackResolver.getResolver(childConfig.getAttribute("test")));
+ whenTests.add(
+ VariableResolverFactory.getResolver(childConfig.getAttribute("test"), this.manager)
+ );
whenChildren.add(buildChildNodes(childConfig));
} else if ("otherwise".equals(name)) {
checkNamespace(childConfig);
- if (otherwhiseNodes != null) {
+ if (otherwiseNodes != null) {
String msg = "Duplicate " + name + " (only one is allowed) at " + childConfig.getLocation();
getLogger().error(msg);
throw new ConfigurationException(msg);
}
- otherwhiseNodes = buildChildNodes(childConfig);
+ otherwiseNodes = buildChildNodes(childConfig);
} else if (isParameter(childConfig)) {
// ignore it. It is handled automatically in setupNode()
@@ -114,17 +116,32 @@
} else {
// Unknown element
String msg = "Unknown element '" + name + "' in select at " + childConfig.getLocation();
- getLogger().error(msg);
throw new ConfigurationException(msg);
}
}
- node.setCases(
- (ProcessingNode[][])whenChildren.toArray(new ProcessingNode[0][0]),
- (MapStackResolver[])whenTests.toArray(new MapStackResolver[whenTests.size()]),
- otherwhiseNodes
- );
+ ProcessingNode[][] whenChildrenNodes = (ProcessingNode[][])whenChildren.toArray(new ProcessingNode[0][0]);
+ VariableResolver[] whenResolvers = (VariableResolver[])whenTests.toArray(new VariableResolver[whenTests.size()]);
+
+ // Get the type and class for this selector
+ ComponentsSelector compSelector = (ComponentsSelector)this.manager.lookup(SELECTOR_ROLE);
+ Class clazz = null;
+ try {
+ // Find selector class
+ Selector selector = (Selector)compSelector.select(type);
+ try {
+ clazz = selector.getClass();
+ } finally {
+ compSelector.release(selector);
+ }
+ } finally {
+ this.manager.release(compSelector);
+ }
+
+ SelectNode node = new SelectNode(type);
+ this.treeBuilder.setupNode(node, config);
+ node.setCases(whenChildrenNodes, whenResolvers, otherwiseNodes);
return node;
}
}
1.1.2.2 +10 -9 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SerializeNode.java
Index: SerializeNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SerializeNode.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- SerializeNode.java 8 Aug 2002 03:21:28 -0000 1.1.2.1
+++ SerializeNode.java 25 Nov 2002 21:51:59 -0000 1.1.2.2
@@ -58,9 +58,10 @@
import org.apache.cocoon.sitemap.PatternException;
-import org.apache.cocoon.components.treeprocessor.AbstractProcessingNode;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
+import org.apache.cocoon.components.treeprocessor.PipelineEventComponentProcessingNode;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
import java.util.*;
/**
@@ -69,7 +70,7 @@
* @version CVS $Id$
*/
-public class SerializeNode extends AbstractProcessingNode {
+public class SerializeNode extends PipelineEventComponentProcessingNode {
private String serializerName;
@@ -77,7 +78,6 @@
private int statusCode;
- private Map views;
/**
* Build a <code>SerializerNode</code> having a name, a mime-type and a status code (HTTP codes).
@@ -92,15 +92,13 @@
this.statusCode = statusCode;
}
- public void setViews(Map views) {
- this.views = views;
- }
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
// Check view
if (this.views != null) {
+
String cocoonView = env.getView();
if (cocoonView != null) {
@@ -125,7 +123,10 @@
StreamPipeline pipeline = context.getStreamPipeline();
- if (this.mimeType == null) {
+ List mapStack = context.getMapStack();
+ Map objectModel = env.getObjectModel();
+
+ if (this.mimeType == null) {
// No mime-type set on node
pipeline.setSerializer(
this.serializerName,
@@ -138,7 +139,7 @@
pipeline.setSerializer(
this.serializerName,
null,
- Parameters.EMPTY_PARAMETERS,
+ Parameters.EMPTY_PARAMETERS, // No parameters on serializers
this.mimeType
);
}
1.1.2.1 +1 -1 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SerializeNodeBuilder.java
Index: SerializeNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SerializeNodeBuilder.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
1.4.2.3 +12 -6 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java
Index: SitemapLanguage.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java,v
retrieving revision 1.4.2.2
retrieving revision 1.4.2.3
diff -u -r1.4.2.2 -r1.4.2.3
--- SitemapLanguage.java 30 Jun 2002 20:45:54 -0000 1.4.2.2
+++ SitemapLanguage.java 25 Nov 2002 21:51:59 -0000 1.4.2.3
@@ -100,7 +100,9 @@
Configuration config = tree.getChild("components", false);
if (config == null) {
- getLogger().debug("Sitemap has no components definition at " + tree.getLocation());
+ if (this.getLogger().isDebugEnabled()) {
+ getLogger().debug("Sitemap has no components definition at " + tree.getLocation());
+ }
config = new DefaultConfiguration("", "");
}
@@ -205,7 +207,9 @@
* @param view the view name
*/
public void addViewForLabel(String label, String view) {
- getLogger().debug("views:addViewForLabel(" + label + ", " + view + ")");
+ if (this.getLogger().isDebugEnabled()) {
+ getLogger().debug("views:addViewForLabel(" + label + ", " + view + ")");
+ }
Set views = (Set)this.labelViews.get(label);
if (views == null) {
views = new HashSet();
@@ -259,7 +263,7 @@
}
} catch(Exception e) {
// Ignore (no selector for this role)
- getLogger().debug("No selector for role " + role);
+ getLogger().warn("No selector for role " + role);
} finally {
this.manager.release( selector );
}
@@ -300,7 +304,9 @@
if (views.size() == 0) {
views = null;
- getLogger().debug(statement.getName() + " has no views at " + statement.getLocation());
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug(statement.getName() + " has no views at " + statement.getLocation());
+ }
} else {
if (getLogger().isDebugEnabled()) {
// Dump matching views
@@ -366,5 +372,5 @@
} else {
return Arrays.asList(StringUtils.split(labels, ", \t\n\r"));
}
- }
+ }
}
1.1.2.1 +13 -14 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/TransformNode.java
Index: TransformNode.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/TransformNode.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- TransformNode.java 5 Mar 2002 08:26:23 -0000 1.1
+++ TransformNode.java 25 Nov 2002 21:52:00 -0000 1.1.2.1
@@ -53,11 +53,13 @@
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.sitemap.PatternException;
-import org.apache.cocoon.components.treeprocessor.AbstractProcessingNode;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
-import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.components.treeprocessor.ParameterizableProcessingNode;
+import org.apache.cocoon.components.treeprocessor.PipelineEventComponentProcessingNode;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+
+import org.apache.avalon.framework.parameters.Parameters;
import java.util.List;
import java.util.Map;
@@ -68,42 +70,39 @@
* @version CVS $Id$
*/
-public class TransformNode extends AbstractProcessingNode implements ParameterizableProcessingNode {
+public class TransformNode extends PipelineEventComponentProcessingNode implements ParameterizableProcessingNode {
private String transformerName;
- private MapStackResolver source;
+ private VariableResolver source;
private Map parameters;
- private Map views;
- public TransformNode(String name, String source) throws PatternException {
+ public TransformNode(String name, VariableResolver source) throws PatternException {
this.transformerName = name;
- this.source = MapStackResolver.getResolver(source);
+ this.source = source;
}
public void setParameters(Map parameterMap) {
this.parameters = parameterMap;
}
- public void setViews(Map views) {
- this.views = views;
- }
public final boolean invoke(Environment env, InvokeContext context)
throws Exception {
- List mapStack = context.getMapStack();
+ Map objectModel = env.getObjectModel();
context.getEventPipeline().addTransformer(
this.transformerName,
- source.resolve(mapStack),
- MapStackResolver.buildParameters(this.parameters, mapStack)
+ source.resolve(context, objectModel),
+ VariableResolver.buildParameters(this.parameters, context, objectModel)
);
// Check view
if (this.views != null) {
+
String cocoonView = env.getView();
if (cocoonView != null) {
1.1.2.1 +9 -2 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/TransformNodeBuilder.java
Index: TransformNodeBuilder.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/TransformNodeBuilder.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- TransformNodeBuilder.java 5 Mar 2002 08:26:23 -0000 1.1
+++ TransformNodeBuilder.java 25 Nov 2002 21:52:00 -0000 1.1.2.1
@@ -57,6 +57,8 @@
import org.apache.cocoon.components.treeprocessor.AbstractProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.LinkedProcessingNodeBuilder;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
import java.util.*;
@@ -79,7 +81,12 @@
this.views = ((SitemapLanguage)this.treeBuilder).getViewsForStatement(Transformer.ROLE, type, config);
- this.node = new TransformNode(type, config.getAttribute("src", null));
+
+ this.node = new TransformNode(
+ type,
+ VariableResolverFactory.getResolver(config.getAttribute("src", null), this.manager)
+ );
+
return this.treeBuilder.setupNode(node, config);
}
1.1.2.1 +7 -3 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/package.html
Index: package.html
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/package.html,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- package.html 5 Mar 2002 08:26:23 -0000 1.1
+++ package.html 25 Nov 2002 21:52:00 -0000 1.1.2.1
@@ -1,6 +1,10 @@
<html>
-<head><title>package description</title></head>
+<head>
+ <title>Implemention of the Sitemap language</title>
+</head>
<body>
- Implemention of the Sitemap language.
+ <h1>Implemention of the Sitemap language</h1>
+ <p>
+ </p>
</body>
-
\ No newline at end of file
+</html>
No revision
No revision
1.3.2.1 +1 -6 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/NOPVariableResolver.java
Index: NOPVariableResolver.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/NOPVariableResolver.java,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- NOPVariableResolver.java 12 Oct 2002 05:11:40 -0000 1.3
+++ NOPVariableResolver.java 25 Nov 2002 21:52:01 -0000 1.3.2.1
@@ -64,15 +64,10 @@
private String expression = null;
public NOPVariableResolver(String expression) {
+ super(expression);
if (expression != null) {
- // Keep the original unescaped expression
- this.originalExpr = expression;
this.expression = VariableResolverFactory.unescape(expression);
}
- }
-
- public String toString() {
- return this.originalExpr;
}
public final String resolve(InvokeContext context, Map objectModel) {
1.6.2.1 +2 -3 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolver.java
Index: PreparedVariableResolver.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolver.java,v
retrieving revision 1.6
retrieving revision 1.6.2.1
diff -u -r1.6 -r1.6.2.1
--- PreparedVariableResolver.java 29 Oct 2002 13:16:12 -0000 1.6
+++ PreparedVariableResolver.java 25 Nov 2002 21:52:01 -0000 1.6.2.1
@@ -78,7 +78,6 @@
private ComponentSelector selector;
final private List items = new ArrayList();
- final private String originalExpr;
// Special constants used for levels
static final int ROOT = 0;
@@ -95,7 +94,7 @@
public PreparedVariableResolver(String expr, ComponentManager manager) throws PatternException {
- this.originalExpr = expr;
+ super(expr);
this.manager = manager;
@@ -267,7 +266,7 @@
{
String name = (String) this.items.get(++i);
Object variable = this.items.get(++i);
- Map levelResult = context.getMapByAnchor(name);
+ Map levelResult = null; //context.getMapByAnchor(name);
if (levelResult == null) {
throw new PatternException("Error while evaluating '" + this.originalExpr +
1.3.2.1 +13 -8 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolver.java
Index: VariableResolver.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolver.java,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- VariableResolver.java 12 Oct 2002 05:11:40 -0000 1.3
+++ VariableResolver.java 25 Nov 2002 21:52:01 -0000 1.3.2.1
@@ -72,9 +72,13 @@
public static final Map EMPTY_MAP = Collections.unmodifiableMap(new java.util.HashMap(0));
- protected String originalExpr = null;
+ protected final String originalExpr;
+
+ protected VariableResolver(String expr) {
+ this.originalExpr = expr;
+ }
- public String getKey() {
+ public final String toString() {
return this.originalExpr;
}
@@ -83,11 +87,12 @@
*/
public boolean equals(Object object) {
if (object instanceof VariableResolver) {
- if (((VariableResolver)object).getKey().equals(this.getKey())) {
- return true;
- }
+ VariableResolver other = (VariableResolver)object;
+ return (this.originalExpr == null && other.originalExpr == null) ||
+ (this.originalExpr.equals(other.originalExpr));
+ } else {
+ return false;
}
- return false;
}
/**
@@ -95,7 +100,7 @@
* needed to determine uniqueness within hashtables
*/
public int hashCode() {
- return (int) HashUtil.hash(this.getKey());
+ return this.originalExpr == null ? 0 : this.originalExpr.hashCode();
}
/**
1.1.2.1 +0 -0 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolverFactory.java
Index: VariableResolverFactory.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolverFactory.java,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
----------------------------------------------------------------------
In case of troubles, e-mail: webmaster@xml.apache.org
To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org