sylvain     2002/09/29 13:24:23

  Modified:    .        changes.xml
               src/java/org/apache/cocoon/components/pipeline/impl
                        CachingPointProcessingPipeline.java
               src/java/org/apache/cocoon/components/treeprocessor
                        DefaultTreeBuilder.java
               src/java/org/apache/cocoon/components/treeprocessor/sitemap
                        ComponentsSelector.java GenerateNodeBuilder.java
                        SerializeNodeBuilder.java SitemapLanguage.java
                        TransformNodeBuilder.java
               src/java/org/apache/cocoon/components/treeprocessor/variables
                        NOPVariableResolver.java
                        PreparedVariableResolver.java VariableResolver.java
               src/java/org/apache/cocoon/sitemap
                        DefaultSitemapComponentSelector.java
                        SitemapComponentSelector.java
  Log:
  Apply patch #12780 : new pipeline hints to allow pipeline-specific parameters
  on sitemap statements.
  Submitted by: Michael Melhem <[EMAIL PROTECTED]>
  
  Revision  Changes    Path
  1.263     +6 -1      xml-cocoon2/changes.xml
  
  Index: changes.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/changes.xml,v
  retrieving revision 1.262
  retrieving revision 1.263
  diff -u -r1.262 -r1.263
  --- changes.xml       27 Sep 2002 16:29:58 -0000      1.262
  +++ changes.xml       29 Sep 2002 20:24:22 -0000      1.263
  @@ -40,6 +40,11 @@
    </devs>
   
    <release version="@version@" date="@date@">
  +  <action dev="SW" type="add" fixes-bug="12780" due-to="Michael Melhem" 
due-to-email="[EMAIL PROTECTED]">
  +   New pipeline hint attribute to allow pipeline components (i.e. map:generate, 
map:transform
  +   and map:serialize) to hold some pipeline-specific parameters. The first usage of 
this feature
  +   is to drive manual cache points for the CachingPointProcessingPipeline.
  +  </action>
     <action dev="GP" type="update">
      Removed all references to Loggable in favor of LogEnabled (this includes
      references to common abstract classes as AbstractLoggable and 
  
  
  
  1.5       +28 -19    
xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/impl/CachingPointProcessingPipeline.java
  
  Index: CachingPointProcessingPipeline.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/impl/CachingPointProcessingPipeline.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- CachingPointProcessingPipeline.java       9 Sep 2002 12:00:41 -0000       1.4
  +++ CachingPointProcessingPipeline.java       29 Sep 2002 20:24:22 -0000      1.5
  @@ -130,23 +130,27 @@
       throws ProcessingException {
           super.setGenerator(role, source, param, hintParam);
           
  -     // check the hint param for a "caching-point" hint
  +        // check the hint param for a "caching-point" hint
           String pipelinehint = null;
           try {
  -            pipelinehint = hintParam.getParameter("hint");
  -            getLogger().debug("pipeline-hint is: " + pipelinehint);
  +            pipelinehint = hintParam.getParameter("caching-point", null);
  +
  +            if (this.getLogger().isDebugEnabled()) {
  +                getLogger().debug("generator caching-point pipeline-hint is set to: 
" + pipelinehint);
  +            }
           }
           catch (Exception ex)
           {
  -         getLogger().warn("pipeline-hint Exception, pipeline-hint ignored: " + ex);
  +            if (this.getLogger().isWarnEnabled()) {
  +                getLogger().warn("caching-point hint Exception, pipeline-hint 
ignored: " + ex);
  +            }
           }
  -     
  -     // if this generator is manually set to "caching-point" (via pipeline-hint)
  -     // then ensure the next component is caching.
  -        if ((pipelinehint != null) && pipelinehint.equals("caching-point")) {
  -            this.nextIsCachePoint=true;
  -      }
   
  +        // if this generator is manually set to "caching-point" (via pipeline-hint)
  +        // then ensure the next component is caching.
  +        if ( "true".equals(pipelinehint)) {
  +            this.nextIsCachePoint=true;
  +        }
       }
   
   
  @@ -157,15 +161,20 @@
       throws ProcessingException {
           super.addTransformer(role, source, param, hintParam);
   
  -     // check the hint param for a "caching-point" hint
  +        // check the hint param for a "caching-point" hint
           String pipelinehint = null;
           try {
  -            pipelinehint = hintParam.getParameter("hint");
  -            getLogger().debug("pipeline-hint is: " + pipelinehint);
  +            pipelinehint = hintParam.getParameter("caching-point", null);
  +
  +            if (this.getLogger().isDebugEnabled()) {
  +                getLogger().debug("transformer caching-point pipeline-hint is set 
to: " + pipelinehint);
  +            }
           }
           catch (Exception ex)
           {
  -         getLogger().warn("pipeline-hint Exception, pipeline-hint ignored: " + ex);
  +            if (this.getLogger().isWarnEnabled()) {
  +                getLogger().warn("caching-point hint Exception, pipeline-hint 
ignored: " + ex);
  +            }
           }
        
           // add caching point flag
  @@ -173,11 +182,11 @@
           this.isCachePoint.add(new Boolean(this.nextIsCachePoint));
           this.nextIsCachePoint = false;
   
  -     // if this transformer is manually set to "caching-point" (via pipeline-hint)
  -     // then ensure the next component is caching.
  -        if ((pipelinehint != null) && pipelinehint.equals("caching-point")) {
  +        // if this transformer is manually set to "caching-point" (via 
pipeline-hint)
  +        // then ensure the next component is caching.
  +        if ( "true".equals(pipelinehint)) {
               this.nextIsCachePoint=true;
  -      }
  +        }
       }
   
   
  
  
  
  1.15      +1 -46     
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/DefaultTreeBuilder.java
  
  Index: DefaultTreeBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/DefaultTreeBuilder.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- DefaultTreeBuilder.java   16 Sep 2002 16:20:53 -0000      1.14
  +++ DefaultTreeBuilder.java   29 Sep 2002 20:24:22 -0000      1.15
  @@ -472,12 +472,6 @@
               ((ParameterizableProcessingNode)node).setParameters(params);
           }
   
  -        if (node instanceof PipelineEventComponentProcessingNode) {
  -            Map params = getHintParameters(config);
  -            ((PipelineEventComponentProcessingNode)node).setPipelineHints(params);
  -        }    
  -     
  -
           if (node instanceof Initializable) {
               this.initializableNodes.add(node);
           }
  @@ -488,45 +482,6 @@
   
           return node;
       }
  -
  -    /**
  -     * Method to extract pieline-hint parameters from the hint attribute 
  -     */
  -    protected Map getHintParameters(Configuration config) throws 
ConfigurationException {
  -        String expression = config.getAttribute("hint",null);
  -                
  -        if (expression == null)
  -            return null;
  -
  -        Map params = new HashMap();
  -
  -        try {
  -            // REVIST: hint needs to be parsed into name value pairs. 
  -         // At the moment hint value is simply passed through 
  -         // as a whole and not parsed!
  -         //
  -         // Syntax for pipeline hints (as Proposed by Sylvain Wallez):
  -         // A hints attribute has one or more comma separated hints
  -         // hints-attr :: hint [ ',' hint ]*
  -         // A hint is a name and an optional value
  -         //  If there is no value, it is considered as a boolean "true"
  -         // hint :: litteral [ '=' litteral ]
  -         // litteral :: <a character string where ',' and '=' must be escaped with 
'\'>
  -         //
  -         // This allows the following :
  -         // pipeline-hint="caching-point, connector=profiling"
  -            params.put( VariableResolverFactory.getResolver("hint", this.manager),
  -                        VariableResolverFactory.getResolver(expression, 
this.manager));
  -        }
  -        catch(PatternException pe) {
  -            String msg = "Invalid pattern '" + expression + "' at " + 
config.getLocation();
  -            throw new ConfigurationException(msg, pe);
  -        }
  -
  -        return params;
  -
  -    }
  -
   
       /**
        * Get &lt;xxx:parameter&gt; elements as a <code>Map</code> of 
</code>ListOfMapResolver</code>s,
  
  
  
  1.5       +17 -1     
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ComponentsSelector.java
  
  Index: ComponentsSelector.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ComponentsSelector.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ComponentsSelector.java   18 Aug 2002 07:58:15 -0000      1.4
  +++ ComponentsSelector.java   29 Sep 2002 20:24:22 -0000      1.5
  @@ -123,6 +123,9 @@
       /** The labels for hints */
       private Map hintLabels;
   
  +    /** The pipeline-hint Map */
  +    private Map pipelineHints;
  +
       /** The set of known hints, used to add standard components (see ensureExists) 
*/
       private Set knownHints = new HashSet();
   
  @@ -177,6 +180,7 @@
           }
   
           this.hintLabels = new HashMap();
  +        this.pipelineHints = new HashMap();
   
           super.configure(config);
       }
  @@ -210,6 +214,9 @@
               }
               this.hintLabels.put(hint, labels);
           }
  +
  +        String pipelineHint = config.getAttribute("hint", null);
  +        this.pipelineHints.put(hint, pipelineHint);
       }
   
       /**
  @@ -313,6 +320,15 @@
               return parentSitemapSelector.getLabels(hint);
           }
           return labels;
  +    }
  +
  +    public String getPipelineHint(Object hint) {
  +        String pipelineHint = (String)this.pipelineHints.get(hint);
  +        // Pipeline-hints can be inherited or completely overrided
  +        if (pipelineHint == null && parentSitemapSelector != null) {
  +            return parentSitemapSelector.getPipelineHint(hint);
  +        }
  +        return pipelineHint;
       }
   
   }
  
  
  
  1.3       +4 -1      
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/GenerateNodeBuilder.java
  
  Index: GenerateNodeBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/GenerateNodeBuilder.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- GenerateNodeBuilder.java  24 Jun 2002 20:32:19 -0000      1.2
  +++ GenerateNodeBuilder.java  29 Sep 2002 20:24:22 -0000      1.3
  @@ -74,17 +74,20 @@
       private GenerateNode node;
   
       private Collection views;
  +    private Map  pipelineHints;
   
       public ProcessingNode buildNode(Configuration config) throws Exception {
   
           String type = this.treeBuilder.getTypeForStatement(config, Generator.ROLE + 
"Selector");
   
           this.views = 
((SitemapLanguage)this.treeBuilder).getViewsForStatement(Generator.ROLE, type, config);
  +        this.pipelineHints = 
((SitemapLanguage)this.treeBuilder).getHintsForStatement(Generator.ROLE, type, config);
   
           this.node = new GenerateNode(
               type,
               VariableResolverFactory.getResolver(config.getAttribute("src", null), 
this.manager)
           );
  +        this.node.setPipelineHints(this.pipelineHints);
           return this.treeBuilder.setupNode(this.node, config);
       }
   
  
  
  
  1.2       +4 -1      
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SerializeNodeBuilder.java
  
  Index: SerializeNodeBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SerializeNodeBuilder.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SerializeNodeBuilder.java 5 Mar 2002 08:26:23 -0000       1.1
  +++ SerializeNodeBuilder.java 29 Sep 2002 20:24:22 -0000      1.2
  @@ -74,6 +74,7 @@
       private SerializeNode node;
   
       private Collection views;
  +    private Map  pipelineHints;
   
       /** This builder has no parameters -- return <code>false</code> */
       protected boolean hasParameters() {
  @@ -85,12 +86,14 @@
           String type = this.treeBuilder.getTypeForStatement(config, Serializer.ROLE 
+ "Selector");
   
           this.views = 
((SitemapLanguage)this.treeBuilder).getViewsForStatement(Serializer.ROLE, type, 
config);
  +        this.pipelineHints = 
((SitemapLanguage)this.treeBuilder).getHintsForStatement(Serializer.ROLE, type, 
config);
   
           this.node = new SerializeNode(
               type,
               config.getAttribute("mime-type", null),
               config.getAttributeAsInteger("status-code", -1)
           );
  +        this.node.setPipelineHints(this.pipelineHints);
           return this.treeBuilder.setupNode(node, config);
       }
   
  
  
  
  1.10      +113 -2    
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java
  
  Index: SitemapLanguage.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SitemapLanguage.java      11 Sep 2002 10:08:35 -0000      1.9
  +++ SitemapLanguage.java      29 Sep 2002 20:24:22 -0000      1.10
  @@ -74,8 +74,15 @@
   import org.apache.cocoon.components.treeprocessor.CategoryNodeBuilder;
   import org.apache.cocoon.components.treeprocessor.DefaultTreeBuilder;
   
  +
  +import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
  +import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
  +
  +import org.apache.cocoon.sitemap.PatternException;
   import org.apache.cocoon.util.StringUtils;
   
  +import org.apache.regexp.RE;
  +
   import java.util.*;
   
   /**
  @@ -89,6 +96,10 @@
   
       private static final String ATTR_PREFIX = 
"org.apache.cocoon.components.treeprocessor.ViewNodeBuilder";
   
  +    // Regexp's for splitting expressions
  +    private static final String COMMA_SPLIT_REGEXP = "[\\s]*,[\\s]*";
  +    private static final String EQUALS_SPLIT_REGEXP = "[\\s]*=[\\s]*";
  +
       /**
        * Build a component manager with the contents of the &lt;map:components&gt; 
element of
        * the tree.
  @@ -359,6 +370,106 @@
   
           return result;
       }
  +    
  +    /**
  +     * Extract pipeline-hints from the given statement (if any exist) 
  +     *
  +     * @param role the component role (e.g. <code>Generator.ROLE</code>)
  +     * @param hint the component hint, i.e. the 'type' attribute
  +     * @param statement the sitemap statement
  +     * @return the hint params <code>Map</code> for this statement, or null
  +     *         if none exist
  +     */
  +    public Map getHintsForStatement(String role, String hint, Configuration 
statement) throws Exception {
  +        // This method implemets the hintParam Syntax as follows:
  +        //     A hints attribute has one or more comma separated hints
  +        //     hints-attr :: hint [ ',' hint ]*
  +        //     A hint is a name and an optional (string) value
  +        //     If there is no value, it is considered as boolean string "true"
  +        //     hint :: literal [ '=' litteral ]
  +        //     literal :: <a character string where the chars ',' and '=' are not 
permitted>
  +        //
  +        //  A ConfigurationException is thrown if there is a problem "parsing"
  +        //  the hint.
  +
  +        String statementHintParams = statement.getAttribute("hint", null);
  +        String componentHintParams = null;
  +        String hintParams = null;
  +
  +        // firstly, determine if any pipeline-hints are defined at the component 
level
  +        // if so, inherit these pipeline-hints (these hints can be overriden by 
local pipeline-hints)
  +        try {
  +            SitemapComponentSelector  selector = 
(SitemapComponentSelector)this.manager.lookup(role + "Selector");
  +            componentHintParams = (String) selector.getPipelineHint(hint);
  +        }
  +        catch (Exception ex) {
  +            if (this.getLogger().isWarnEnabled()) {
  +                getLogger().warn("pipeline-hints: Component Exception: could not " 
+ 
  +                             "check for component level hints " + ex);
  +            }
  +        }
  +
  +        if (componentHintParams != null) {
  +            hintParams = componentHintParams;
  +
  +            if (statementHintParams != null) {
  +                hintParams = hintParams + "," + statementHintParams; 
  +            }
  +        }
  +        else {
  +            hintParams = statementHintParams;
  +        }
  +
  +        // if there are no pipeline-hints defined then
  +        // it makes no sense to continue so, return null
  +        if (hintParams == null) {
  +            return null;
  +        }
  +
  +        Map params = new HashMap();
  +
  +        RE commaSplit = new RE(COMMA_SPLIT_REGEXP);
  +        RE equalsSplit = new RE(EQUALS_SPLIT_REGEXP);
  +
  +        String[]  expressions = commaSplit.split(hintParams.trim());
  +
  +        if (this.getLogger().isDebugEnabled()) {
  +            getLogger().debug("pipeline-hints: (aggregate-hint) " + hintParams); 
  +        }
  +
  +        for (int i=0; i<expressions.length;i++) {
  +            String [] nameValuePair = equalsSplit.split(expressions[i]); 
  +
  +            try {
  +                if (nameValuePair.length < 2) {
  +                    if (this.getLogger().isDebugEnabled()) {
  +                        getLogger().debug("pipeline-hints: (name) " + 
nameValuePair[0] 
  +                                       + "\npipeline-hints: (value) [implicit] 
true");
  +                    }
  +  
  +                    params.put( 
VariableResolverFactory.getResolver(nameValuePair[0], this.manager),
  +                                VariableResolverFactory.getResolver("true", 
this.manager));
  +                }
  +                else
  +                {
  +                    if (this.getLogger().isDebugEnabled()) {
  +                        getLogger().debug("pipeline-hints: (name) " + 
nameValuePair[0]
  +                                          + "\npipeline-hints: (value) " + 
nameValuePair[1]);
  +                    }
  +  
  +                    params.put( 
VariableResolverFactory.getResolver(nameValuePair[0], this.manager),
  +                                
VariableResolverFactory.getResolver(nameValuePair[1], this.manager));
  +                }
  +            }
  +            catch(PatternException pe) {
  +                String msg = "Invalid pattern '" + hintParams + "' at " + 
statement.getLocation();
  +                getLogger().error(msg, pe);
  +                throw new ConfigurationException(msg, pe);
  +             }
  +        }
  +
  +        return params;
  +    }
   
       /**
        * Split a list of space/comma separated labels into a Collection
  @@ -371,5 +482,5 @@
           } else {
               return Arrays.asList(StringUtils.split(labels, ", \t\n\r"));
           }
  -    }
  +    }   
   }
  
  
  
  1.3       +5 -1      
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/TransformNodeBuilder.java
  
  Index: TransformNodeBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/TransformNodeBuilder.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TransformNodeBuilder.java 24 Jun 2002 20:32:19 -0000      1.2
  +++ TransformNodeBuilder.java 29 Sep 2002 20:24:22 -0000      1.3
  @@ -74,17 +74,21 @@
       private TransformNode node;
   
       private Collection views;
  +    private Map  pipelineHints;
   
       public ProcessingNode buildNode(Configuration config) throws Exception {
   
           String type = this.treeBuilder.getTypeForStatement(config, Transformer.ROLE 
+ "Selector");
   
           this.views = 
((SitemapLanguage)this.treeBuilder).getViewsForStatement(Transformer.ROLE, type, 
config);
  +        this.pipelineHints = 
((SitemapLanguage)this.treeBuilder).getHintsForStatement(Transformer.ROLE, type, 
config);
   
           this.node = new TransformNode(
               type,
               VariableResolverFactory.getResolver(config.getAttribute("src", null), 
this.manager)
           );
  +
  +        this.node.setPipelineHints(this.pipelineHints);
           return this.treeBuilder.setupNode(node, config);
       }
   
  
  
  
  1.2       +1 -2      
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/NOPVariableResolver.java
  
  Index: NOPVariableResolver.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/NOPVariableResolver.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- NOPVariableResolver.java  24 Jun 2002 20:32:20 -0000      1.1
  +++ NOPVariableResolver.java  29 Sep 2002 20:24:22 -0000      1.2
  @@ -59,7 +59,6 @@
   
   public class NOPVariableResolver extends VariableResolver {
   
  -    private String originalExpr = null;
       private String expression = null;
   
       public NOPVariableResolver(String expression) {
  @@ -81,4 +80,4 @@
       public final void release() {
           // Nothing to do
       }
  -}
  \ No newline at end of file
  +}
  
  
  
  1.3       +0 -1      
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolver.java
  
  Index: PreparedVariableResolver.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/PreparedVariableResolver.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PreparedVariableResolver.java     25 Jun 2002 07:55:13 -0000      1.2
  +++ PreparedVariableResolver.java     29 Sep 2002 20:24:22 -0000      1.3
  @@ -70,7 +70,6 @@
   
   public class PreparedVariableResolver extends VariableResolver implements 
Disposable {
       
  -    private String originalExpr;
       private ComponentManager manager;
       private ComponentSelector selector;
       
  
  
  
  1.2       +29 -2     
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolver.java
  
  Index: VariableResolver.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/variables/VariableResolver.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- VariableResolver.java     24 Jun 2002 20:32:20 -0000      1.1
  +++ VariableResolver.java     29 Sep 2002 20:24:22 -0000      1.2
  @@ -52,6 +52,7 @@
   
   import org.apache.avalon.framework.parameters.Parameters;
   import org.apache.cocoon.sitemap.PatternException;
  +import org.apache.cocoon.util.HashUtil;
   
   import java.util.Collections;
   import java.util.Iterator;
  @@ -70,6 +71,32 @@
       
       public static final Map EMPTY_MAP = Collections.unmodifiableMap(new 
java.util.HashMap(0));
   
  +    protected String originalExpr = null;
  +
  +    public String getKey() {
  +        return this.originalExpr;
  +    }
  +
  +    /**
  +     * Compare two VariableResolvers
  +     */
  +    public boolean equals(Object object) {
  +        if (object instanceof VariableResolver) {
  +            if (((VariableResolver)object).getKey().equals(this.getKey())) {
  +                return true;
  +            }
  +        }
  +        return false;
  +    }
  +
  +    /**
  +     * generate HashCode
  +     * needed to determine uniqueness within hashtables
  +     */
  +    public int hashCode() {
  +        return  (int) HashUtil.hash(this.getKey());
  +    }
  +
       /**
        * Resolve all {...} patterns using the values given in the list of maps and 
the object model.
        */
  @@ -137,4 +164,4 @@
   //            ((VariableResolver)entry.getValue()).release();
   //        }
   //    }
  -}
  \ No newline at end of file
  +}
  
  
  
  1.5       +16 -2     
xml-cocoon2/src/java/org/apache/cocoon/sitemap/DefaultSitemapComponentSelector.java
  
  Index: DefaultSitemapComponentSelector.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/sitemap/DefaultSitemapComponentSelector.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DefaultSitemapComponentSelector.java      26 Apr 2002 07:19:13 -0000      1.4
  +++ DefaultSitemapComponentSelector.java      29 Sep 2002 20:24:23 -0000      1.5
  @@ -73,6 +73,7 @@
     implements SitemapComponentSelector {
   
       private Map hintLabels;
  +    private Map pipelineHints;
       private Map mime_types;
       private SitemapComponentSelector parentSelector;
   
  @@ -85,6 +86,7 @@
           super();
           this.hintLabels = new HashMap();
           this.mime_types = new HashMap();
  +        this.pipelineHints = new HashMap();
           componentMapping = Collections.synchronizedMap(new HashMap());
       }
   
  @@ -175,6 +177,15 @@
           return labels;
       }
   
  +    public String getPipelineHint(Object hint) {
  +        String pipelineHint = (String)this.pipelineHints.get(hint);
  +        // Pipeline-hints can be inherited or completely overrided
  +        if (pipelineHint == null && parentSelector != null) {
  +            return parentSelector.getPipelineHint(hint);
  +        }
  +        return pipelineHint;
  +    }
  +
       public void addComponent(Object hint, Class component, Configuration conf)
               throws ComponentException {
   
  @@ -194,6 +205,9 @@
               this.hintLabels.put(hint, labels);
           }
   
  +        String pipelineHint = conf.getAttribute("hint", null);
  +        this.pipelineHints.put(hint, pipelineHint);
  +
           super.addComponent(hint, component, conf);
       }
   
  @@ -204,4 +218,4 @@
           this.addComponent(hint, component, conf);
           this.mime_types.put(hint, mimeType);
       }
  -}
  \ No newline at end of file
  +}
  
  
  
  1.9       +3 -2      
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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- SitemapComponentSelector.java     22 Feb 2002 07:03:55 -0000      1.8
  +++ SitemapComponentSelector.java     29 Sep 2002 20:24:23 -0000      1.9
  @@ -64,4 +64,5 @@
       boolean hasLabel(Object hint, String label);
   
       String[] getLabels(Object hint);
  -}
  \ No newline at end of file
  +    String getPipelineHint(Object hint);
  +}
  
  
  

----------------------------------------------------------------------
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