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 &lt;map:act type="..."&gt; (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]

Reply via email to