sylvain 02/02/06 10:22:29
Modified: src/java/org/apache/cocoon cocoon.roles
src/java/org/apache/cocoon/components/pipeline
AbstractStreamPipeline.java
src/java/org/apache/cocoon/sitemap AbstractSitemap.java
SitemapComponentSelector.java sitemap.roles
src/scratchpad/src/org/apache/cocoon/treeprocessor
InvokeContext.java TreeProcessor.java
src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap
ActNodeBuilder.java ActSetNode.java
ActionSetNode.java ActionSetNodeBuilder.java
ComponentsSelector.java PipelineNode.java
SitemapLanguage.java
Log:
- patch #6254 from Peter Royal ([EMAIL PROTECTED]] for dumping sitemap
parameters,
- action-set sources now behave like in the compiled sitemap
- synch with recent changes in compiled sitemap to inherit view labels
Revision Changes Path
1.7 +7 -7 xml-cocoon2/src/java/org/apache/cocoon/cocoon.roles
Index: cocoon.roles
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/cocoon.roles,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- cocoon.roles 4 Feb 2002 02:30:34 -0000 1.6
+++ cocoon.roles 6 Feb 2002 18:22:28 -0000 1.7
@@ -159,31 +159,31 @@
<!-- Sitemap Roles -->
<role name="org.apache.cocoon.acting.ActionSelector"
shorthand="actions"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector"/>
<role name="org.apache.cocoon.selection.SelectorSelector"
shorthand="selectors"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector"/>
<role name="org.apache.cocoon.matching.MatcherSelector"
shorthand="matchers"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector"/>
<role name="org.apache.cocoon.generation.GeneratorSelector"
shorthand="generators"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector">
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector">
</role>
<role name="org.apache.cocoon.transformation.TransformerSelector"
shorthand="transformers"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector"/>
<role name="org.apache.cocoon.serialization.SerializerSelector"
shorthand="serializers"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector"/>
<role name="org.apache.cocoon.reading.ReaderSelector"
shorthand="readers"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector"/>
</role-list>
1.7 +8 -2
xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/AbstractStreamPipeline.java
Index: AbstractStreamPipeline.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/AbstractStreamPipeline.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- AbstractStreamPipeline.java 4 Feb 2002 12:25:11 -0000 1.6
+++ AbstractStreamPipeline.java 6 Feb 2002 18:22:28 -0000 1.7
@@ -78,7 +78,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: AbstractStreamPipeline.java,v 1.6 2002/02/04 12:25:11
cziegeler Exp $
+ * @version CVS $Id: AbstractStreamPipeline.java,v 1.7 2002/02/06 18:22:28 sylvain
Exp $
*/
public abstract class AbstractStreamPipeline extends AbstractLoggable implements
StreamPipeline, Disposable {
protected EventPipeline eventPipeline;
@@ -282,9 +282,15 @@
} else if (serializerMimeType != null) {
// there was a mimeType specified in the sitemap pipeline
environment.setContentType (serializerMimeType);
- } else {
+ } else if (this.sitemapSerializerMimeType != null) {
// use the mimeType specified in the sitemap component declaration
environment.setContentType (this.sitemapSerializerMimeType);
+ } else {
+ // No mimeType available
+ String message = "Unable to determine MIME type for " +
+ environment.getURIPrefix() + "/" + environment.getURI();
+ getLogger().error(message);
+ throw new ProcessingException(message);
}
}
1.9 +16 -16
xml-cocoon2/src/java/org/apache/cocoon/sitemap/AbstractSitemap.java
Index: AbstractSitemap.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/sitemap/AbstractSitemap.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- AbstractSitemap.java 4 Feb 2002 14:05:18 -0000 1.8
+++ AbstractSitemap.java 6 Feb 2002 18:22:28 -0000 1.9
@@ -96,7 +96,7 @@
* Base class for generated <code>Sitemap</code> classes
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Id: AbstractSitemap.java,v 1.8 2002/02/04 14:05:18 cziegeler Exp $
+ * @version CVS $Id: AbstractSitemap.java,v 1.9 2002/02/06 18:22:28 sylvain Exp $
*/
public abstract class AbstractSitemap extends AbstractLoggable implements Sitemap,
Disposable, ThreadSafe {
private Context context;
@@ -116,13 +116,13 @@
/** The creation date */
protected static long dateCreated = -1L;
- protected SitemapComponentSelector generators;
- protected SitemapComponentSelector transformers;
- protected SitemapComponentSelector serializers;
- protected SitemapComponentSelector readers;
- protected SitemapComponentSelector actions;
- protected SitemapComponentSelector matchers;
- protected SitemapComponentSelector selectors;
+ protected DefaultSitemapComponentSelector generators;
+ protected DefaultSitemapComponentSelector transformers;
+ protected DefaultSitemapComponentSelector serializers;
+ protected DefaultSitemapComponentSelector readers;
+ protected DefaultSitemapComponentSelector actions;
+ protected DefaultSitemapComponentSelector matchers;
+ protected DefaultSitemapComponentSelector selectors;
/**
* Set the role manager
@@ -158,13 +158,13 @@
this.urlFactory = (URLFactory)manager.lookup(URLFactory.ROLE);
// Create Sitemap Selectors
- this.generators = new SitemapComponentSelector();
- this.transformers = new SitemapComponentSelector();
- this.serializers = new SitemapComponentSelector();
- this.readers = new SitemapComponentSelector();
- this.actions = new SitemapComponentSelector();
- this.matchers = new SitemapComponentSelector();
- this.selectors = new SitemapComponentSelector();
+ this.generators = new DefaultSitemapComponentSelector();
+ this.transformers = new DefaultSitemapComponentSelector();
+ this.serializers = new DefaultSitemapComponentSelector();
+ this.readers = new DefaultSitemapComponentSelector();
+ this.actions = new DefaultSitemapComponentSelector();
+ this.matchers = new DefaultSitemapComponentSelector();
+ this.selectors = new DefaultSitemapComponentSelector();
// Set Parent Sitemap Selectors
try {
@@ -205,7 +205,7 @@
}
}
- private void setupSelector(SitemapComponentSelector selector) throws Exception {
+ private void setupSelector(DefaultSitemapComponentSelector selector) throws
Exception {
selector.setLogger(getLogger());
selector.contextualize(this.context);
selector.setRoleManager(AbstractSitemap.roleManager);
1.7 +6 -132
xml-cocoon2/src/java/org/apache/cocoon/sitemap/SitemapComponentSelector.java
Index: SitemapComponentSelector.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/sitemap/SitemapComponentSelector.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- SitemapComponentSelector.java 4 Feb 2002 10:12:42 -0000 1.6
+++ SitemapComponentSelector.java 6 Feb 2002 18:22:28 -0000 1.7
@@ -55,144 +55,18 @@
package org.apache.cocoon.sitemap;
-import org.apache.avalon.excalibur.component.ExcaliburComponentSelector;
-import org.apache.avalon.framework.component.Component;
-import org.apache.avalon.framework.component.ComponentException;
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.component.ComponentSelector;
import org.apache.cocoon.components.pipeline.OutputComponentSelector;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.StringTokenizer;
-
/**
- * Default component manager for Cocoon's sitemap components.
+ * Component manager for Cocoon's sitemap components.
*
- * @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Id: SitemapComponentSelector.java,v 1.6 2002/02/04 10:12:42
cziegeler Exp $
+ * @version CVS $Id: SitemapComponentSelector.java,v 1.7 2002/02/06 18:22:28
sylvain Exp $
*/
-public class SitemapComponentSelector extends ExcaliburComponentSelector
- implements OutputComponentSelector {
-
- private Map hintLabels;
- private Map mime_types;
- private SitemapComponentSelector parentSelector;
-
- /** Dynamic component handlers mapping. */
- private Map componentMapping;
-
- /** The conctructors (same as the Avalon ComponentManager)
- */
- public SitemapComponentSelector() {
- super();
- this.hintLabels = new HashMap();
- this.mime_types = new HashMap();
- componentMapping = Collections.synchronizedMap(new HashMap());
- }
-
- public void setParentSelector(SitemapComponentSelector newSelector) {
- if (this.parentSelector == null) {
- this.parentSelector = newSelector;
- }
- }
-
- public Component select(Object hint) throws ComponentException {
- Component component = null;
-
- try {
- component = super.select(hint);
- } catch (ComponentException ce) {
- if (this.parentSelector != null) {
- component = this.parentSelector.select(hint);
- componentMapping.put(component, this.parentSelector);
- } else {
- throw ce;
- }
- }
-
- return component;
- }
-
- public void release(Component component) {
- SitemapComponentSelector selector =
(SitemapComponentSelector)componentMapping.get(component);
- if(selector != null) {
- componentMapping.remove(component);
- selector.release(component);
- } else {
- super.release(component);
- }
- }
-
- public void initialize() {
- super.initialize();
- this.mime_types = Collections.unmodifiableMap(this.mime_types);
- }
-
- public String getMimeTypeForHint(Object hint) {
- String mimeType = (String)this.mime_types.get(hint);
- if (mimeType != null) {
- return mimeType;
- }
- if (this.parentSelector != null) {
- return this.parentSelector.getMimeTypeForHint(hint);
- }
- return null;
- }
-
- public boolean hasLabel(Object hint, String label) {
- String[] labels = (String[])this.hintLabels.get(hint);
- if (labels != null) {
- for (int i = 0; i < labels.length; i++) {
- if (labels[i].equals(label))
- return true;
- }
- } else if (parentSelector != null) {
- return parentSelector.hasLabel(hint, label);
- }
- return false;
- }
-
- public String[] getLabels(Object hint) {
- String[] labels = (String[])this.hintLabels.get(hint);
- // Labels can be inherited or completely overrided
- if (labels == null && parentSelector != null) {
- return parentSelector.getLabels(hint);
- }
- return labels;
- }
-
- public void addComponent(Object hint, Class component, Configuration conf)
- throws ComponentException {
-
- String mimeType = conf.getAttribute("mime-type", null);
- if (mimeType != null)
- this.mime_types.put(hint, mimeType);
-
- String label = conf.getAttribute("label", null);
- if (label != null) {
- // Empty '' attribute will result in empty array,
- // overriding all labels on the component declared in the parent.
- StringTokenizer st = new StringTokenizer(label, " ,", false);
- String[] labels = new String[st.countTokens()];
- for (int i = 0; i < labels.length; i++) {
- labels[i] = st.nextToken();
- }
- this.hintLabels.put(hint, labels);
- }
-
- super.addComponent(hint, component, conf);
- }
+public interface SitemapComponentSelector extends ComponentSelector,
OutputComponentSelector {
- public void addSitemapComponent(Object hint, Class component,
- Configuration conf, String mimeType)
- throws ComponentException, ConfigurationException {
+ boolean hasLabel(Object hint, String label);
- this.addComponent(hint, component, conf);
- this.mime_types.put(hint, mimeType);
- }
+ String[] getLabels(Object hint);
}
1.2 +7 -7 xml-cocoon2/src/java/org/apache/cocoon/sitemap/sitemap.roles
Index: sitemap.roles
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/sitemap/sitemap.roles,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- sitemap.roles 3 Jan 2002 12:31:20 -0000 1.1
+++ sitemap.roles 6 Feb 2002 18:22:28 -0000 1.2
@@ -16,34 +16,34 @@
<role name="org.apache.cocoon.acting.ActionSelector"
shorthand="action"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector"/>
<role name="org.apache.cocoon.selection.SelectorSelector"
shorthand="selector"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector"/>
<role name="org.apache.cocoon.matching.MatcherSelector"
shorthand="matcher"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector"/>
<role name="org.apache.cocoon.generation.GeneratorSelector"
shorthand="generator"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector">
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector">
<!--NKB doesnt load it - should be used instead of old error-notifier
<hint shorthand="!notifying-generator!"
class="org.apache.cocoon.sitemap.NotifyingGenerator"/>-->
</role>
<role name="org.apache.cocoon.transformation.TransformerSelector"
shorthand="transformer"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector"/>
<role name="org.apache.cocoon.serialization.SerializerSelector"
shorthand="serializer"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector"/>
<role name="org.apache.cocoon.reading.ReaderSelector"
shorthand="reader"
- default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
+ default-class="org.apache.cocoon.sitemap.DefaultSitemapComponentSelector"/>
<role name="org.apache.cocoon.components.notification.NotifyingBuilder"
shorthand="notifying-builder"
1.5 +45 -3
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/InvokeContext.java
Index: InvokeContext.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/InvokeContext.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- InvokeContext.java 4 Feb 2002 14:43:43 -0000 1.4
+++ InvokeContext.java 6 Feb 2002 18:22:28 -0000 1.5
@@ -60,10 +60,12 @@
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.thread.ThreadSafe;
+import org.apache.avalon.framework.logger.Loggable;
import org.apache.cocoon.components.pipeline.EventPipeline;
import org.apache.cocoon.components.pipeline.StreamPipeline;
import org.apache.cocoon.environment.Environment;
+import org.apache.log.Logger;
import java.util.*;
@@ -78,10 +80,10 @@
* </ul>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: InvokeContext.java,v 1.4 2002/02/04 14:43:43 cziegeler Exp $
+ * @version CVS $Id: InvokeContext.java,v 1.5 2002/02/06 18:22:28 sylvain Exp $
*/
-public class InvokeContext implements Recomposable, Disposable {
+public class InvokeContext implements Recomposable, Disposable, Loggable {
private List mapStack = new ArrayList();
@@ -97,6 +99,9 @@
/** The component manager that was used to get the pipelines */
private ComponentManager pipelinesManager;
+ /** Logger that we will log any messages to */
+ private Logger logger;
+
/**
* Create an <code>InvokeContext</code> without existing pipelines. This also
means
* the current request is external.
@@ -115,6 +120,11 @@
this.eventPipeline = eventPipeline;
}
+ public void setLogger(Logger logger)
+ {
+ this.logger = logger;
+ }
+
public void compose(ComponentManager manager) throws ComponentException {
this.currentManager = manager;
}
@@ -187,8 +197,40 @@
*/
public final void pushMap(Map map) {
mapStack.add(map);
- // FIXME : dump map contents to logger
+
+ if (this.logger.isDebugEnabled()) {
+ dumpParameters(getMapStack());
+ }
}
+
+ /**
+ * Dumps all sitemap parameters to log
+ */
+ protected void dumpParameters(List list)
+ {
+ if (!list.isEmpty()) {
+ StringBuffer sb = new StringBuffer();
+
+ sb.append("\nCurrent Sitemap Parameters:\n");
+ String path = "";
+
+ for (int i = list.size() - 1; i >= 0; i--) {
+ Map map = (Map) list.get(i);
+ Iterator keys = map.keySet().iterator();
+
+ while (keys.hasNext()) {
+ String key = (String) keys.next();
+ sb.append("PARAM: '").append(path).append(key);
+ sb.append("' VALUE: '").append(map.get(key)).append("'\n");
+ }
+
+ path = "../" + path;
+ }
+
+ this.logger.debug(sb.toString());
+ }
+ }
+
/**
* Pop the topmost element of the current Map stack.
1.6 +7 -1
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/TreeProcessor.java
Index: TreeProcessor.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/TreeProcessor.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- TreeProcessor.java 4 Feb 2002 14:43:43 -0000 1.5
+++ TreeProcessor.java 6 Feb 2002 18:22:28 -0000 1.6
@@ -100,7 +100,7 @@
* Interpreted tree-traversal implementation of a pipeline assembly language.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: TreeProcessor.java,v 1.5 2002/02/04 14:43:43 cziegeler Exp $
+ * @version CVS $Id: TreeProcessor.java,v 1.6 2002/02/06 18:22:28 sylvain Exp $
*/
public class TreeProcessor extends AbstractLoggable implements ThreadSafe,
Processor,
@@ -313,6 +313,9 @@
public boolean process(Environment environment) throws Exception {
InvokeContext context = new InvokeContext();
+
+ context.setLogger(getLogger());
+
try {
return process(environment, context);
} finally {
@@ -323,6 +326,9 @@
public boolean process(Environment environment, StreamPipeline pipeline,
EventPipeline eventPipeline)
throws Exception {
InvokeContext context = new InvokeContext(pipeline, eventPipeline);
+
+ context.setLogger(getLogger());
+
try {
return process(environment, context);
} finally {
1.5 +6 -3
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/ActNodeBuilder.java
Index: ActNodeBuilder.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/ActNodeBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ActNodeBuilder.java 4 Feb 2002 14:39:53 -0000 1.4
+++ ActNodeBuilder.java 6 Feb 2002 18:22:28 -0000 1.5
@@ -75,7 +75,7 @@
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: ActNodeBuilder.java,v 1.4 2002/02/04 14:39:53 cziegeler Exp $
+ * @version CVS $Id: ActNodeBuilder.java,v 1.5 2002/02/06 18:22:28 sylvain Exp $
*/
public class ActNodeBuilder extends AbstractParentProcessingNodeBuilder
@@ -88,12 +88,12 @@
public ProcessingNode buildNode(Configuration config) throws Exception {
- String source = config.getAttribute("src", null);
// Is it an action-set call ?
this.actSetName = config.getAttribute("set", null);
if (actSetName == null) {
+ String source = config.getAttribute("src", null);
String type = this.treeBuilder.getTypeForStatement(config, Action.ROLE
+ "Selector");
ActTypeNode actTypeNode = new ActTypeNode(type, source);
@@ -106,7 +106,10 @@
} else {
// Action set call
- this.actSetNode = new ActSetNode(source);
+ if (config.getAttribute("src", null) != null) {
+ getLogger().warn("The 'src' attribute is ignored for action-set
call at " + config.getLocation());
+ }
+ this.actSetNode = new ActSetNode();
this.treeBuilder.setupNode(this.actSetNode, config);
this.actSetNode.setChildren(buildChildNodes(config));
1.5 +2 -10
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/ActSetNode.java
Index: ActSetNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/ActSetNode.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ActSetNode.java 4 Feb 2002 14:39:53 -0000 1.4
+++ ActSetNode.java 6 Feb 2002 18:22:28 -0000 1.5
@@ -84,7 +84,7 @@
* Handles <map:act type="..."> (action-sets calls are handled by {@link
ActSetNode}).
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: ActSetNode.java,v 1.4 2002/02/04 14:39:53 cziegeler Exp $
+ * @version CVS $Id: ActSetNode.java,v 1.5 2002/02/06 18:22:28 sylvain Exp $
*/
public class ActSetNode extends SimpleParentProcessingNode
@@ -93,16 +93,9 @@
/** The parameters of this node */
private Map parameters;
- /** The 'src' attribute */
- protected MapStackResolver source;
-
/** The action set to call */
private ActionSetNode actionSet;
- public ActSetNode(String source) throws PatternException {
- this.source = MapStackResolver.getResolver(source);
- }
-
public void setParameters(Map parameterMap) {
this.parameters = parameterMap;
}
@@ -115,10 +108,9 @@
throws Exception {
List mapStack = context.getMapStack();
- String resolvedSource = source.resolve(mapStack);
Parameters resolvedParams =
MapStackResolver.buildParameters(this.parameters, mapStack);
- Map result = this.actionSet.call(env, context, resolvedSource,
resolvedParams);
+ Map result = this.actionSet.call(env, context, resolvedParams);
if (PipelinesNode.getRedirector(env).hasRedirected()) {
return true;
1.6 +9 -3
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/ActionSetNode.java
Index: ActionSetNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/ActionSetNode.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ActionSetNode.java 5 Feb 2002 20:32:50 -0000 1.5
+++ ActionSetNode.java 6 Feb 2002 18:22:28 -0000 1.6
@@ -78,7 +78,7 @@
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: ActionSetNode.java,v 1.5 2002/02/05 20:32:50 sylvain Exp $
+ * @version CVS $Id: ActionSetNode.java,v 1.6 2002/02/06 18:22:28 sylvain Exp $
*/
public class ActionSetNode extends SimpleSelectorProcessingNode
@@ -92,11 +92,15 @@
/** The actions that are ThreadSafe, to avoid lookups */
private Action[] threadSafeActions;
+
+ /** The src for each action */
+ private MapStackResolver[] sources;
- public ActionSetNode(String name, String[] types, String[] actionNames) {
+ public ActionSetNode(String name, String[] types, String[] actionNames,
MapStackResolver[] sources) {
super(name);
this.types = types;
this.actionNames = actionNames;
+ this.sources = sources;
}
public void compose(ComponentManager manager) throws ComponentException {
@@ -122,12 +126,13 @@
* Call the actions composing the action-set and return the combined result of
* these actions.
*/
- public final Map call(Environment env, InvokeContext context, String source,
Parameters params) throws Exception {
+ public final Map call(Environment env, InvokeContext context, Parameters
params) throws Exception {
// Prepare data needed by the actions
Map objectModel = env.getObjectModel();
SitemapRedirector redirector = PipelinesNode.getRedirector(env);
SourceResolver resolver = getSourceResolver(objectModel);
+ List mapStack = context.getMapStack();
String cocoonAction = env.getAction();
@@ -142,6 +147,7 @@
Action action;
String actionName = actionNames[i];
+ String source = sources[i].resolve(mapStack);
if (actionName == null || actionName.equals(cocoonAction)) {
// If action is ThreadSafe, avoid select() and try/catch block
(faster !)
1.5 +9 -5
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/ActionSetNodeBuilder.java
Index: ActionSetNodeBuilder.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/ActionSetNodeBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ActionSetNodeBuilder.java 4 Feb 2002 14:39:53 -0000 1.4
+++ ActionSetNodeBuilder.java 6 Feb 2002 18:22:28 -0000 1.5
@@ -73,7 +73,7 @@
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: ActionSetNodeBuilder.java,v 1.4 2002/02/04 14:39:53 cziegeler
Exp $
+ * @version CVS $Id: ActionSetNodeBuilder.java,v 1.5 2002/02/06 18:22:28 sylvain
Exp $
*/
public class ActionSetNodeBuilder extends AbstractProcessingNodeBuilder implements
ThreadSafe {
@@ -84,9 +84,10 @@
String actionSetName = config.getAttribute("name");
- // Lists of action types and names for each map:act
- List actionTypes = new ArrayList();
- List actionNames = new ArrayList();
+ // Lists of action types, names and sources for each map:act
+ List actionTypes = new ArrayList();
+ List actionNames = new ArrayList();
+ List actionSources = new ArrayList();
Configuration[] childrenConfig = config.getChildren();
for (int i = 0; i < childrenConfig.length; i++) {
@@ -101,6 +102,7 @@
actionTypes.add(type);
actionNames.add(childConfig.getAttribute("action", null));
+
actionSources.add(MapStackResolver.getResolver(childConfig.getAttribute("src", null)));
} else {
// Unknown element
@@ -112,8 +114,10 @@
String[] types = (String[])actionTypes.toArray(new
String[actionTypes.size()]);
String[] actions = (String[])actionNames.toArray(new
String[actionNames.size()]);
+ MapStackResolver[] sources =
+ (MapStackResolver[])actionSources.toArray(new
MapStackResolver[actionSources.size()]);
- ActionSetNode node = new ActionSetNode(actionSetName, types, actions);
+ ActionSetNode node = new ActionSetNode(actionSetName, types, actions,
sources);
this.treeBuilder.setupNode(node, config);
return node;
1.4 +53 -12
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/ComponentsSelector.java
Index: ComponentsSelector.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/ComponentsSelector.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ComponentsSelector.java 4 Feb 2002 14:39:53 -0000 1.3
+++ ComponentsSelector.java 6 Feb 2002 18:22:28 -0000 1.4
@@ -71,6 +71,7 @@
import org.apache.cocoon.reading.Reader;
import org.apache.cocoon.selection.Selector;
import org.apache.cocoon.serialization.Serializer;
+import org.apache.cocoon.sitemap.SitemapComponentSelector;
import org.apache.cocoon.transformation.Transformer;
import java.util.*;
@@ -79,10 +80,10 @@
* Component selector for sitemap components.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: ComponentsSelector.java,v 1.3 2002/02/04 14:39:53 cziegeler
Exp $
+ * @version CVS $Id: ComponentsSelector.java,v 1.4 2002/02/06 18:22:28 sylvain Exp $
*/
-public class ComponentsSelector extends ExtendedComponentSelector implements
OutputComponentSelector {
+public class ComponentsSelector extends ExtendedComponentSelector implements
OutputComponentSelector, SitemapComponentSelector {
public static final int UNKNOWN = -1;
public static final int GENERATOR = 0;
@@ -117,19 +118,22 @@
private int roleId;
/** The mime-type for hints */
- private Map mimeTypes;
+ private Map hintMimeTypes;
+
+ /** The labels for hints */
+ private Map hintLabels;
/** The set of known hints, used to add standard components (see ensureExists)
*/
private Set knownHints = new HashSet();
/** The parent selector, if it's of the current class */
- private ComponentsSelector parentComponentsSelector;
+ private SitemapComponentSelector parentSitemapSelector;
public void setParentSelector(ComponentSelector selector) {
super.setParentSelector(selector);
- if (selector instanceof ComponentsSelector) {
- this.parentComponentsSelector = (ComponentsSelector)selector;
+ if (selector instanceof SitemapComponentSelector) {
+ this.parentSitemapSelector = (SitemapComponentSelector)selector;
}
}
@@ -169,8 +173,10 @@
// Only matchers and serializers can have a MIME type
if (this.roleId == SERIALIZER || this.roleId == READER) {
- this.mimeTypes = new HashMap();
+ this.hintMimeTypes = new HashMap();
}
+
+ this.hintLabels = new HashMap();
super.configure(config);
}
@@ -189,8 +195,20 @@
// Get mime-type
String mimeType = config.getAttribute("mime-type", null);
if (mimeType != null) {
- this.mimeTypes.put(hint, mimeType);
+ this.hintMimeTypes.put(hint, mimeType);
+ }
+ }
+
+ String label = config.getAttribute("label", null);
+ if (label != null) {
+ // Empty '' attribute will result in empty array,
+ // overriding all labels on the component declared in the parent.
+ StringTokenizer st = new StringTokenizer(label, " ,", false);
+ String[] labels = new String[st.countTokens()];
+ for (int i = 0; i < labels.length; i++) {
+ labels[i] = st.nextToken();
}
+ this.hintLabels.put(hint, labels);
}
}
@@ -250,21 +268,44 @@
*/
public String getMimeTypeForHint(Object hint) {
- if (this.mimeTypes == null) {
+ if (this.hintMimeTypes == null) {
return null;
} else {
- String mimeType = (String)this.mimeTypes.get(hint);
+ String mimeType = (String)this.hintMimeTypes.get(hint);
if (mimeType != null) {
return mimeType;
- } else if (this.parentComponentsSelector != null) {
- return this.parentComponentsSelector.getMimeTypeForHint(hint);
+ } else if (this.parentSitemapSelector != null) {
+ return this.parentSitemapSelector.getMimeTypeForHint(hint);
} else {
return null;
}
}
}
+
+ public boolean hasLabel(Object hint, String label) {
+ String[] labels = (String[])this.hintLabels.get(hint);
+ if (labels != null) {
+ for (int i = 0; i < labels.length; i++) {
+ if (labels[i].equals(label))
+ return true;
+ }
+ } else if (parentSitemapSelector != null) {
+ return parentSitemapSelector.hasLabel(hint, label);
+ }
+ return false;
+ }
+
+ public String[] getLabels(Object hint) {
+ String[] labels = (String[])this.hintLabels.get(hint);
+ // Labels can be inherited or completely overrided
+ if (labels == null && parentSitemapSelector != null) {
+ return parentSitemapSelector.getLabels(hint);
+ }
+ return labels;
+ }
+
}
1.6 +2 -1
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/PipelineNode.java
Index: PipelineNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/PipelineNode.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- PipelineNode.java 4 Feb 2002 14:39:53 -0000 1.5
+++ PipelineNode.java 6 Feb 2002 18:22:28 -0000 1.6
@@ -81,7 +81,7 @@
*
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: PipelineNode.java,v 1.5 2002/02/04 14:39:53 cziegeler Exp $
+ * @version CVS $Id: PipelineNode.java,v 1.6 2002/02/06 18:22:28 sylvain Exp $
*/
public class PipelineNode extends AbstractParentProcessingNode implements
Composable {
@@ -198,6 +198,7 @@
// Build a new context
errorContext = new InvokeContext();
+ errorContext.setLogger(getLogger());
errorContext.compose(this.manager);
// Create a Notifying
1.4 +54 -41
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/SitemapLanguage.java
Index: SitemapLanguage.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/treeprocessor/sitemap/SitemapLanguage.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SitemapLanguage.java 4 Feb 2002 14:39:54 -0000 1.3
+++ SitemapLanguage.java 6 Feb 2002 18:22:28 -0000 1.4
@@ -73,6 +73,7 @@
import org.apache.cocoon.generation.Generator;
import org.apache.cocoon.transformation.Transformer;
import org.apache.cocoon.serialization.Serializer;
+import org.apache.cocoon.sitemap.SitemapComponentSelector;
import org.apache.cocoon.treeprocessor.CategoryNode;
import org.apache.cocoon.treeprocessor.CategoryNodeBuilder;
@@ -86,7 +87,7 @@
* The tree builder for the sitemap language.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: SitemapLanguage.java,v 1.3 2002/02/04 14:39:54 cziegeler Exp $
+ * @version CVS $Id: SitemapLanguage.java,v 1.4 2002/02/06 18:22:28 sylvain Exp $
*/
public class SitemapLanguage extends TreeBuilder {
@@ -158,28 +159,28 @@
}
}
- // Parse generators and transformers labels
-
- Configuration[] generators = config.getChild("generators").getChildren();
- // Note : we don't getChildren("generator") because there can be some
- // shortcut declarations that have other names
-
- for (int i = 0; i < generators.length; i++) {
- this.setComponentLabels(
- Generator.ROLE,
- generators[i].getAttribute("name"),
- generators[i].getAttribute("label", null)
- );
- }
-
- Configuration[] transformers =
config.getChild("transformers").getChildren();
- for (int i = 0; i < transformers.length; i++) {
- this.setComponentLabels(
- Transformer.ROLE,
- transformers[i].getAttribute("name"),
- transformers[i].getAttribute("label", null)
- );
- }
+// // Parse generators and transformers labels
+//
+// Configuration[] generators = config.getChild("generators").getChildren();
+// // Note : we don't getChildren("generator") because there can be some
+// // shortcut declarations that have other names
+//
+// for (int i = 0; i < generators.length; i++) {
+// this.setComponentLabels(
+// Generator.ROLE,
+// generators[i].getAttribute("name"),
+// generators[i].getAttribute("label", null)
+// );
+// }
+//
+// Configuration[] transformers =
config.getChild("transformers").getChildren();
+// for (int i = 0; i < transformers.length; i++) {
+// this.setComponentLabels(
+// Transformer.ROLE,
+// transformers[i].getAttribute("name"),
+// transformers[i].getAttribute("label", null)
+// );
+// }
return manager;
}
@@ -189,8 +190,8 @@
/** Collection of view names for each label */
private Map labelViews = new HashMap();
- /** Collection of labels for each component, represented by a 'role':'hint' key
*/
- private Map componentLabels = new HashMap();
+// /** Collection of labels for each component, represented by a 'role':'hint'
key */
+// private Map componentLabels = new HashMap();
/** The views CategoryNode */
private CategoryNode viewsNode;
@@ -222,15 +223,15 @@
return this.isBuildingView;
}
- /**
- * Registers the view labels for a component. They're merged later on with the
- * ones defined on each statement.
- */
- private void setComponentLabels(String role, String hint, String labels) {
- getLogger().debug("views:setComponentLabels(" + role + ", " + hint + ", " +
labels + ")");
- Collection labelColl = splitLabels(labels);
- this.componentLabels.put(role + ":" + hint, labelColl);
- }
+// /**
+// * Registers the view labels for a component. They're merged later on with the
+// * ones defined on each statement.
+// */
+// private void setComponentLabels(String role, String hint, String labels) {
+// getLogger().debug("views:setComponentLabels(" + role + ", " + hint + ", "
+ labels + ")");
+// Collection labelColl = splitLabels(labels);
+// this.componentLabels.put(role + ":" + hint, labelColl);
+// }
/**
* Add a view for a label. This is used to register all views that start from
@@ -282,15 +283,27 @@
Set labels = new HashSet();
// 1 - labels defined on the component
- Collection coll = (Collection)this.componentLabels.get(role + ":" + hint);
- if (coll != null) {
- labels.addAll(coll);
- }
+ try {
+ SitemapComponentSelector selector =
(SitemapComponentSelector)this.manager.lookup(role + "Selector");
+ String[] compLabels = selector.getLabels(hint);
+ if (compLabels != null) {
+ for (int i = 0; i < compLabels.length; i++) {
+ labels.add(compLabels[i]);
+ }
+ }
+ } catch(Exception e) {
+ // Ignore (no selector for this role)
+ getLogger().debug("No selector for role " + role);
+ }
+
+// Collection coll = (Collection)this.componentLabels.get(role + ":" + hint);
+// if (coll != null) {
+// labels.addAll(coll);
+// }
// 2 - labels defined on this statement
if (statementLabels != null) {
- coll = splitLabels(statementLabels);
- labels.addAll(coll);
+ labels.addAll(splitLabels(statementLabels));
}
// 3 - pseudo-label depending on the role
@@ -308,7 +321,7 @@
while(labelIter.hasNext()) {
// Iterate on all views for this labek
- coll = (Collection)this.labelViews.get(labelIter.next());
+ Collection coll = (Collection)this.labelViews.get(labelIter.next());
if (coll != null) {
Iterator viewIter = coll.iterator();
while(viewIter.hasNext()) {
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]