diff --git a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPath.java b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPath.java index 57ba0618f..4bce12593 100644 --- a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPath.java +++ b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPath.java @@ -66,7 +66,7 @@ import org.apache.commons.jxpath.*; // Experimental: need to add code to select the 'root', etc. /** - * Enable JXPath dynamic properties + * Enable JXPath dynamic properties. * * @author Costin Manolache * @author Nicola Ken Barozzi @@ -74,35 +74,24 @@ import org.apache.commons.jxpath.*; public class JXPath extends Task { public static String PREFIX="jxpath:"; - JXPathContext jxpathCtx; + JXPathPropertyHelper helper=new JXPathPropertyHelper(); public JXPath() { } public JXPathContext getJXPathContext() { - return jxpathCtx; - } - - // testing - String foo; - public void setFoo( String s ) { - System.out.println("Set foo " + s ); - foo=s; - } - - public String getFoo() { - return foo; + return helper.jxpathCtx; } public void execute() { JXPathIntrospector.registerDynamicClass(Hashtable.class, JXPathHashtableHandler.class); - jxpathCtx=JXPathContext.newContext( project ); - jxpathCtx.setVariables(new AntVariables()); + helper.jxpathCtx=JXPathContext.newContext( project ); + helper.jxpathCtx.setVariables(new AntVariables()); PropertyHelper phelper=PropertyHelper.getPropertyHelper( project ); - JXPathPropertyHelper hook=new JXPathPropertyHelper(jxpathCtx); - hook.setNext( phelper.getNext() ); - phelper.setNext( hook ); + helper.setProject( project ); + helper.setNext( phelper.getNext() ); + phelper.setNext( helper ); project.addReference( "jxpathTask", this ); @@ -112,15 +101,13 @@ public class JXPath extends Task { static class JXPathPropertyHelper extends PropertyHelper { JXPathContext jxpathCtx; - public JXPathPropertyHelper( JXPathContext jxCtx ) { - this.jxpathCtx=jxCtx; - } - - public boolean setProperty( String ns, String name, Object v, boolean inh, - boolean user, boolean isNew) + public boolean setPropertyHook( String ns, String name, Object v, boolean inh, + boolean user, boolean isNew) { - if( ! name.startsWith(PREFIX) ) - return false; + if( ! name.startsWith(PREFIX) ) { + // pass to next + return super.setPropertyHook(ns, name, v, inh, user, isNew); + } name=name.substring( PREFIX.length() ); jxpathCtx.setValue( name, v ); @@ -128,10 +115,12 @@ public class JXPath extends Task { } public Object getPropertyHook( String ns, String name , boolean user) { - if( ! name.startsWith(PREFIX) ) - return null; - name=name.substring( PREFIX.length() ); + if( ! name.startsWith(PREFIX) ) { + // pass to next + return super.getPropertyHook(ns, name, user); + } + name=name.substring( PREFIX.length() ); //Object o=jxpathCtx.getValue( name ); //System.out.println("JXPath: getProperty " + ns + " " + name + "=" + o + o.getClass()); @@ -148,14 +137,11 @@ public class JXPath extends Task { while (iter.hasNext()) { Object o = iter.next(); - //System.out.println("JXPath: getProperty " + ns + " " + name + "=" + o + o.getClass()); result += ", "+o; } return result; } - - } diff --git a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPathSet.java b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPathSet.java index c50f56713..3c80b813b 100644 --- a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPathSet.java +++ b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPathSet.java @@ -67,6 +67,7 @@ import org.apache.commons.jxpath.*; * Set a JXPath property * * + * @deprecated A generic should be used. * @author Costin Manolache */ public class JXPathSet extends Task { diff --git a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JexlProperties.java b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JexlProperties.java index e42198ad5..29a1e0edc 100644 --- a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JexlProperties.java +++ b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JexlProperties.java @@ -55,6 +55,7 @@ package org.apache.tools.ant.taskdefs.optional; import org.apache.tools.ant.*; +import org.apache.tools.ant.PropertyHelper; import org.apache.tools.ant.types.*; import java.io.*; import java.util.*; @@ -67,43 +68,47 @@ import org.apache.commons.jexl.*; * * @author Costin Manolache */ -public class JexlProperties extends Task implements PropertyInterceptor { - JexlContext jc; +public class JexlProperties extends Task { public static String PREFIX="jexl:"; - + JexlPropertyHelper helper=new JexlPropertyHelper(); + public JexlProperties() { } - - public boolean setProperty( Object ctx, String ns, String name, Object value ) { - return false; - } - public Object getProperty( Object p, String ns, String name ) { - if( ! name.startsWith(PREFIX) ) - return null; - try { - name=name.substring( PREFIX.length() ); - Expression e = ExpressionFactory.createExpression(name); - Object o = e.evaluate(jc); + static class JexlPropertyHelper extends PropertyHelper { + JexlContext jc; + + public Object getPropertyHook( String ns, String name, boolean user ) { + if( ! name.startsWith(PREFIX) ) { + return super.getPropertyHook(ns, name, user); + } + try { + name=name.substring( PREFIX.length() ); + Expression e = ExpressionFactory.createExpression(name); + Object o = e.evaluate(jc); - return o; - } catch( Exception ex ) { - ex.printStackTrace(); - return null; + return o; + } catch( Exception ex ) { + ex.printStackTrace(); + return null; + } } } - public void execute() { - PropertyHelper2 phelper=PropertyHelper2.getPropertyHelper( project ); - phelper.addPropertyInterceptor( this ); - /* * First make a jexlContext and put stuff in it */ - jc = JexlHelper.createContext(); + helper.jc = JexlHelper.createContext(); + helper.jc.getVars().put("ant", project); + + // register it + PropertyHelper phelper=PropertyHelper.getPropertyHelper( project ); + helper.setNext( phelper.getNext() ); + helper.setProject( project ); + phelper.setNext( helper ); + - jc.getVars().put("ant", project); } } diff --git a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/VelocityProperties.java b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/VelocityProperties.java index 213a9a406..38b78574a 100644 --- a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/VelocityProperties.java +++ b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/VelocityProperties.java @@ -55,6 +55,7 @@ package org.apache.tools.ant.taskdefs.optional; import org.apache.tools.ant.*; +import org.apache.tools.ant.PropertyHelper; import org.apache.tools.ant.types.*; import java.io.*; import java.util.*; @@ -69,49 +70,56 @@ import org.apache.velocity.Template; * * @author Costin Manolache */ -public class VelocityProperties extends Task implements PropertyInterceptor { - VelocityEngine engine; - VelocityContext context; +public class VelocityProperties extends Task { public static final String PREFIX="vm:"; - + VelocityPropertyHelper helper=new VelocityPropertyHelper(); + public VelocityProperties() { } - public boolean setProperty( Object c, String ns, String name, Object v ) { - return false; - } - - public Object getProperty( Object p, String ns, String name ) { - if( ! name.startsWith(PREFIX) ) - return null; - try { - name=name.substring( PREFIX.length() ); - StringWriter sw=new StringWriter(); - - engine.evaluate( context, sw, "antVM", name ); - - System.out.println("VM: getProperty " + ns + " " + name + "=" + sw.toString()); - return sw.toString(); - } catch( Exception ex ) { - ex.printStackTrace(); - return null; + static class VelocityPropertyHelper extends PropertyHelper { + VelocityEngine engine; + VelocityContext context; + + public Object getPropertyHook( String ns, String name, boolean user ) { + if( ! name.startsWith(PREFIX) ) { + // pass on to next + return super.getPropertyHook(ns, name, user); + } + try { + name=name.substring( PREFIX.length() ); + StringWriter sw=new StringWriter(); + + engine.evaluate( context, sw, "antVM", name ); + + System.out.println("VM: getProperty " + ns + " " + name + "=" + sw.toString()); + return sw.toString(); + } catch( Exception ex ) { + ex.printStackTrace(); + return null; + } } } public VelocityEngine getVelocityEngine() { - return engine; + return helper.engine; } public void execute() { try { - PropertyHelper2 phelper=PropertyHelper2.getPropertyHelper( project ); - phelper.addPropertyInterceptor( this ); - - engine=new VelocityEngine(); - engine.init(); + // Prepare the engine + helper.engine=new VelocityEngine(); + helper.engine.init(); - context=new VelocityContext(); - context.put( "ant", project ); + helper.context=new VelocityContext(); + helper.context.put( "ant", project ); + + // Register it + PropertyHelper phelper=PropertyHelper.getPropertyHelper( project ); + helper.setNext( phelper.getNext() ); + helper.setProject( project ); + phelper.setNext( helper ); + } catch( Exception ex ) { ex.printStackTrace(); }