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]