Hi Simone,

This sounds useful. But it's not really clear to me as to how this differs from 
the Stringtemplate generator which is also part of C3.

Robby

-----Original Message-----
From: simone.trip...@gmail.com [mailto:simone.trip...@gmail.com] On Behalf Of 
Simone Tripodi
Sent: Thursday, December 15, 2011 5:25 PM
To: dev@cocoon.apache.org
Subject: [C3] new pipeline component: variabelExpander

Hi all guys,
I just committed r1214835 a new component I need for work, so I
thought it would have been a good idea contributing back to OSS since
C3 is the foundation of the XML processor I am writing.

Basically, I needed to put variables inside our XML document that can
be replaced depending by the context the pipeline works, so the idea
came from Ant/Maven and some code I already did in Commons-Digester,
using the ${} marker for variables have to be expanded.

Using that new component is very simple: given the XML

<project>
  <target>
    <delete dir="${build.home}" />
    <delete dir="${dist.home}" />
    <echo>A property '${text.property}' inside the text</echo>
  </target>
</project>

users can define their variables (in form of Properties/Map<String,String>):

        Properties variables = new Properties();
        variables.setProperty( "build.base", "/Users/cocoon" );
        variables.setProperty( "build.home", "${build.base}/workspace" );
        variables.setProperty( "dist.home", "${build.base}/downloads" );
        variables.setProperty( "text.property", "Cocoon3 rocks!" );

then creating and run their pipeline adding the VariableExpander:

        newNonCachingPipeline().setURLGenerator(
getClass().getResource( "/variables-expander.xml" ) )
                               .addVariableExpander( variables )
                               .addSerializer()
                               .withEmptyConfiguration()
                               .setup( System.out )
                               .execute();

the XML document will be processed by the next component in the
pipeline will look like:

<project>
  <target>
    <delete dir="Users/cocoon/workspace" />
    <delete dir="Users/cocoon/download" />
    <echo>A property 'Cocoon3 rocks!' inside the text</echo>
  </target>
</project>

WDYT? I hope it will be useful for you as well it is for me :P
Have a nice day, all the best!
-Simo

http://people.apache.org/~simonetripodi/
http://simonetripodi.livejournal.com/
http://twitter.com/simonetripodi
http://www.99soft.org/

Reply via email to