*
* @return a Digester with rules and variable substitutor
*/
private Digester createDigesterThatCanDoAnt()
{
Digester digester = new Digester();
MultiVariableExpander expander = new MultiVariableExpander();
expander.addSource( "$", mutableSource );
digester.setSubstitutor( new VariableSubstitutor( expander ) );
int useRootObj = -1;
Class<?>[] callerArgTypes = new Class[] { String.class, String.class };
CallMethodRule caller = new CallMethodRule( useRootObj, "addProperty", callerArgTypes.length, callerArgTypes );
digester.addRule( "root/property", caller );
digester.addCallParam( "root/property", 0, "name" );
digester.addCallParam( "root/property", 1, "value" );
digester.addObjectCreate( "root/bean", SimpleTestBean.class );
digester.addSetProperties( "root/bean" );
digester.addSetNext( "root/bean", "addSimpleTestBean" );
return digester;
}