Yesterday I needed to uncomment multiple lines in the applicationcontext of a Prana XML. After some searching I found the Ant Task I needed: replaceregexp.

Threre were four blocks that I needed to uncomment:

XML:
  1. ...
  2. </value>
  3. <value>
  4.     <object class="edumatic.backoffice.view.modules.NavigationModuleInfo">
  5.         <property name="url"
  6.             value="edumatic/backoffice/view/modules/support/ManagementNavigationModule.swf" />
  7.         <property name="icon"
  8.             value="edumatic/backoffice/view/modules/support/assets/management.png" />
  9.         <property name="title" value="Management" />
  10.         <property name="pluginID" value="MANAGEMENT" />
  11.     </object>
  12. </value>
  13. <value>
  14.     <object
  15.         class="edumatic.backoffice.view.modules.ContentModuleInfo">
  16.         <property name="url"
  17.             value="edumatic/backoffice/view/modules/support/ManagementContentModule.swf" />
  18.         <property name="pluginID" value="MANAGEMENT" />
  19.     </object>
  20. </value>
  21. <value>
  22.     <object
  23.         class="edumatic.backoffice.view.modules.NavigationModuleInfo">
  24.         <property name="url"
  25.             value="edumatic/backoffice/view/modules/support/MetaDataNavigationModule.swf" />
  26.         <property name="icon"
  27.             value="edumatic/backoffice/view/modules/support/assets/metadata.png" />
  28.         <property name="title" value="Metadata" />
  29.         <property name="pluginID" value="METADATA" />
  30.     </object>
  31. </value>
  32. <value>
  33.     <object
  34.         class="edumatic.backoffice.view.modules.ContentModuleInfo">
  35.         <property name="url"
  36.             value="edumatic/backoffice/view/modules/support/MetaDataContentModule.swf" />
  37.         <property name="pluginID" value="METADATA" />
  38.     </object>
  39. </value>
  40. <value>
  41. ...

I couldn't just search for and replace it by because there were childnodes that had to stay uncommented.

So here are the replaceregexp tasks that made it work:

XML:
  1. <replaceregexp file="${selor-salto-test-deploy-folder.dir}/backend/application-context-backoffice.xml"
  2.     byline="false" flags="s">
  3.     <regexp pattern="&lt;value&gt;.{1,250}ManagementNavigationModule"/>
  4.     <substitution expression="&lt;!--value&gt;
  5.                 &lt;object  class=&quot;edumatic.backoffice.view.modules.NavigationModuleInfo&quot;&gt;
  6.                     &lt;property name=&quot;url&quot;
  7.                         value=&quot;edumatic/backoffice/view/modules/support/ManagementNavigationModule"/>
  8. </replaceregexp>
  9. <replaceregexp file="${selor-salto-test-deploy-folder.dir}/backend/application-context-backoffice.xml"
  10.     byline="false" flags="s">
  11.     <regexp pattern="ManagementContentModule.swf.{1,150}&lt;/value&gt;"/>
  12.     <substitution expression="ManagementContentModule.swf&quot; /&gt;
  13.                     &lt;property name=&quot;pluginID&quot; value=&quot;MANAGEMENT&quot; /&gt;
  14.                 &lt;/object&gt;
  15.             &lt;/value--&gt;"/>
  16. </replaceregexp>
  17. <replaceregexp file="${selor-salto-test-deploy-folder.dir}/backend/application-context-backoffice.xml"
  18.     byline="false" flags="s">
  19.     <regexp pattern="&lt;value&gt;.{1,250}MetaDataNavigationModule"/>
  20.     <substitution expression="&lt;!--value&gt;
  21.                 &lt;object  class=&quot;edumatic.backoffice.view.modules.NavigationModuleInfo&quot;&gt;
  22.                     &lt;property name=&quot;url&quot;
  23.                         value=&quot;edumatic/backoffice/view/modules/support/ManagementNavigationModule"/>
  24. </replaceregexp>
  25. <replaceregexp file="${selor-salto-test-deploy-folder.dir}/backend/application-context-backoffice.xml"
  26.     byline="false" flags="s">
  27.     <regexp pattern="MetaDataContentModule.swf.{1,150}&lt;/value&gt;"/>
  28.     <substitution expression="MetaDataContentModule.swf&quot; /&gt;
  29.                     &lt;property name=&quot;pluginID&quot; value=&quot;METADATA&quot; /&gt;
  30.                 &lt;/object&gt;
  31.             &lt;/value--&gt;"/>
  32. </replaceregexp>

The thing me and a colleague searched on for a while was the s flag that was needed to make it work. I will try the other flags because I'm really not sure what this s flag means... (trial and error yeah!). I've seen that after the task ran the layout was messed up (no newlines anymore in the replaced text).

The .{1,150} means that a maximum of 150 characters may occur between for example MetaDataContentModule.swf and </value>.

Ciao!