Date: 2004-08-27T00:27:24
   Editor: RalphGoers <[EMAIL PROTECTED]>
   Wiki: Cocoon Wiki
   Page: XPatchTaskUsage
   URL: http://wiki.apache.org/cocoon/XPatchTaskUsage

   no comment

Change Log:

------------------------------------------------------------------------------
@@ -4,13 +4,13 @@
 
 == Task Definition ==
 The Cocoon build declares xpatch in init-tasks:
-{{{<taskdef name="xpatch" classname="XConfToolTask" 
classpath="${tools.tasks.dest}"/>
+{{{<taskdef name="xpatch" classname="XConfToolTask" 
classpath="${tools.tasks.dest}"/>
 }}}
 ;:''The source is found in tools/src/anttasks''
 
 == Xpatch element ==
-{{{<xpatch file="path/to/file.xml"
-            srcdir="base/path" 
+{{{<xpatch file="path/to/file.xml"
+            srcdir="base/path" 
             includes="**/*.patchtype"/> }}}
 ||'''Attribute'''||'''Description'''||||
 ||{{{file}}}||The file to modify||
@@ -25,9 +25,9 @@
  *  All child nodes of the root element of the patch file will be copied to 
the specified location in the target file - including text and whitespace nodes.
 
 === ''Example'' (enable-uploads.xweb) ===
-{{{<xweb 
xpath="/web-app/servlet/init-param[param-name='enable-uploads']/param-value"
-       if-prop="config.enable-uploads"
-       
remove="/web-app/servlet/init-param[param-name='enable-uploads']/param-value/text()"
+{{{<xweb 
xpath="/web-app/servlet/init-param[param-name='enable-uploads']/param-value"
+       if-prop="config.enable-uploads"
+       
remove="/web-app/servlet/init-param[param-name='enable-uploads']/param-value/text()"
 >true</xweb>}}}
 ;:''Note the sensitivity to whitespace necessary in this case.''
 
@@ -39,8 +39,10 @@
 ||{{{remove}}}||(optional) An xpath expression of node(s) to remove before 
inserting this patch.  Can be an alternative method for avoiding multiple 
insertions.  '''This expression can return a node-set of more than one node.  
All matching nodes will be removed'''||
 ||{{{insert-before}}}||(optional) An xpath expression that specifies where in 
the document the patch will be placed.  by default, the expression is evaluated 
relative to the node specified by the {{{xpath}}} attribute. If neither this 
nor {{{insert-after}}} are specified, the node will be the last child node of 
the context specified in the {{{xpath}}} attribute.||
 ||{{{insert-after}}}||(optional) As above.  Ignored if {{{insert-before}}} is 
specified.||
+||{{{add-comments}}}||(optional) If specified, it overrides the ant task 
value||
 ||{{{add-attribute}}}||(optional) The name of an attribute to add to the 
context node specified by {{{xpath}}}.  Only one attribute per patch file is 
supported.||
 ||{{{value}}}||(optional, but required if add-attribute is specified) The 
value to assign to attribute specified in {{{add-attribute}}}||
+||add-attribute-''name''||(optional) Add attribute ''name'' with the specified 
value||
 ||{{{replace-properties}}}||(optional) By default, Ant properties are replaced 
with their values throughout the patch file. If this becomes a problem (e.g. 
with JEXL expressions), set {{{replace-properties}}} to false||
 
 ----
@@ -57,25 +59,33 @@
 
 Here's an example inserting the {{{load-class}}} directive ({{{web.xml}}}) for 
a database driver in case it doesn't exist already. There's a catch with the 
{{{web.xml}}} structure - you have to be rather precise where you insert 
another {{{init-param}}} element, since other elements can appear on the same 
level, and the order is important.
 
-{{{<xweb unless="/web-app/servlet/init-param[param-name = 
'load-class'][contains(param-value,'com.mysql.jdbc.Driver')]"
-      xpath="/web-app/servlet"
-      insert-after="init-param[position()=last()]">
-  <init-param>
-       <param-name>load-class</param-name>
-       <param-value>com.mysql.jdbc.Driver</param-value>
-  </init-param>
+{{{<xweb unless="/web-app/servlet/init-param[param-name = 
'load-class'][contains(param-value,'com.mysql.jdbc.Driver')]"
+      xpath="/web-app/servlet"
+      insert-after="init-param[position()=last()]">
+  <init-param>
+       <param-name>load-class</param-name>
+       <param-value>com.mysql.jdbc.Driver</param-value>
+  </init-param>
 </xweb>}}}
 
 The {{{unless}}} attribute checks whether there exists an {{{init-param}}} 
already referring to the mysql jdbc driver class, the {{{xpath}}} attribute 
points to the context (root) node where the {{{init-param}}} will be inserted, 
and the {{{insert-after}}} contains another XPath expression selecting the last 
already existing {{{init-param}}}, after which the new one will be inserted. - 
StevenNoels
 
 ''This can lead to multiple 'load-class' entries. Does it work though? - 
JoergHeinicke''
 
-{{{
-<xweb xpath="/web-app/servlet/init-param[param-name='load-class']/param-value"
-      
unless="/web-app/servlet/init-param[param-name='load-class'][contains(param-value,'com.mysql.jdbc.Driver')]"
-      insert-after="text()">
-         com.mysql.jdbc.Driver
-</xweb>
+{{{
+<xweb xpath="/web-app/servlet/init-param[param-name='load-class']/param-value"
+      
unless="/web-app/servlet/init-param[param-name='load-class'][contains(param-value,'com.mysql.jdbc.Driver')]"
+      insert-after="text()">
+         com.mysql.jdbc.Driver
+</xweb>
 }}}
 
 ''This won't work if there is not already a 'load-class' entry. - 
JoergHeinicke''
+
+The next example adds the pool-grow attribute and the pool-min attribute, both 
with a vaule of 2, and the pool-max attribute with a value of 50 to the 
encodeURL transformer definition. It will not add comments to the output file.
+
+{{{
+<xmap xpath="/sitemap/components/transformers/[EMAIL PROTECTED]'encodeURL']"
+  add-attribute-pool-grow="2" add-attribute-pool-max="50" 
add-attribute-pool-min="2"
+  add-comments="false"/>
+}}}