Team, shall we have a vote on this?

There's no language element that allows setting of sitemap parameters
er, variables. They are usually the result of sitemap components
execution. More in particular, from those components that are used to
determine the actual pipeline from the given fragments (matchers,
actions; selectors return only true / false).

When using <map:resources/> to hold common parts of pipelines, it is
often desirable that they depend on some values determined further up
the pipeline. 

Often, an action or matcher already exists, that has the functionality
required, but additional parameters need to be set for the processing
in a resource. <map:parameter/> is used to do runtime configuration of
components. <map:redirect-to/> is no component but a control statement
and thus doesn't take runtime configuration.

Thus the only solution today is, to modify an existing component to
set additional parameters, or to write a custom action that just sets
some parameters.

<map:redirect-to resource=""/> does have @target which is probably not
as clean as possible. A better solution would be, to introduce some
construct to set those variables without the need of an action, like

  <map:variables>
     <map:parameter name="foo" value="xyz"/>
     <map:parameter name="bar" value="uvw"/>
  </map:variables>

that is translated by the following in sitemap.xsl (not tested!):

<xsl:template match="map:variables">
   Map map = new HashMap(<xsl:value-of select="count(map:parameter)"/>);
   <!-- actually, here we could as well use for-each since only
        map:parameter would be allowed here. OTOH a common advice is
        not to use for-each for performance reasons. See below for
        alternative solution.
   -->
   <xsl:apply-templates/>
   listOfMaps.add(map);
   this.dumpParameters();
</xsl:template>

<xsl:template match="map:variables/map:parameter" priority="2">
   map.put("<xsl:value-of select="@name"/>", substitute(listOfMaps, "<xsl:value-of 
select="@value"/>"));
</xsl:template>

Or

<xsl:template match="map:variables">
   Map map = new HashMap(<xsl:value-of select="count(map:parameter)"/>);
   <xsl:for-each select="map:parameter">
      map.put("<xsl:value-of select="@name"/>", substitute(listOfMaps, "<xsl:value-of 
select="@value"/>"));
   </xsl:for-each>
   listOfMaps.add(map);
   this.dumpParameters();
</xsl:template>

Please voice your opinion on introducing a <map:variables/> construct
as described above.

Obviously, I'm +1

        Chris.

-- 
C h r i s t i a n       H a u l
[EMAIL PROTECTED]
    fingerprint: 99B0 1D9D 7919 644A 4837  7D73 FEF9 6856 335A 9E08

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to