Author: mbenson
Date: Tue Jul 10 22:28:04 2007
New Revision: 555174
URL: http://svn.apache.org/viewvc?view=rev&rev=555174
Log:
add nested delegate ref to PHtask w/ script example
Added:
ant/core/trunk/src/tests/antunit/taskdefs/propertyhelper-test.xml (with
props)
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/PropertyHelperTask.java
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/PropertyHelperTask.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/PropertyHelperTask.java?view=diff&rev=555174&r1=555173&r2=555174
==============================================================================
---
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/PropertyHelperTask.java
(original)
+++
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/PropertyHelperTask.java
Tue Jul 10 22:28:04 2007
@@ -35,6 +35,39 @@
* @since Ant 1.8
*/
public class PropertyHelperTask extends Task {
+ /**
+ * Nested delegate for refid usage.
+ */
+ public class DelegateElement {
+ private String refid;
+
+ private DelegateElement() {
+ }
+
+ /**
+ * Get the refid.
+ * @return String
+ */
+ public String getRefid() {
+ return refid;
+ }
+
+ /**
+ * Set the refid.
+ * @param refid the String to set
+ */
+ public void setRefid(String refid) {
+ this.refid = refid;
+ }
+
+ private PropertyHelper.Delegate resolve() {
+ if (refid == null) {
+ throw new BuildException("refid required for generic
delegate");
+ }
+ return (PropertyHelper.Delegate) getProject().getReference(refid);
+ }
+ }
+
private PropertyHelper propertyHelper;
private List delegates;
@@ -65,10 +98,17 @@
* @param delegate the delegate to add.
*/
public synchronized void addConfigured(PropertyHelper.Delegate delegate) {
- if (delegates == null) {
- delegates = new ArrayList();
- }
- delegates.add(delegate);
+ getAddDelegateList().add(delegate);
+ }
+
+ /**
+ * Add a nested <delegate refid="foo" /> element.
+ * @return DelegateElement
+ */
+ public DelegateElement createDelegate() {
+ DelegateElement result = new DelegateElement();
+ getAddDelegateList().add(result);
+ return result;
}
/**
@@ -89,7 +129,9 @@
synchronized (ph) {
if (delegates != null) {
for (Iterator iter = delegates.iterator(); iter.hasNext();) {
- PropertyHelper.Delegate delegate =
(PropertyHelper.Delegate) iter.next();
+ Object o = iter.next();
+ PropertyHelper.Delegate delegate = o instanceof
DelegateElement
+ ? ((DelegateElement) o).resolve() :
(PropertyHelper.Delegate) o;
log("Adding PropertyHelper delegate " + delegate,
Project.MSG_DEBUG);
ph.add(delegate);
}
@@ -97,9 +139,15 @@
}
if (propertyHelper != null) {
log("Installing PropertyHelper " + propertyHelper,
Project.MSG_DEBUG);
- //TODO copy existing properties to new PH?
+ // TODO copy existing properties to new PH?
getProject().addReference(MagicNames.REFID_PROPERTY_HELPER,
propertyHelper);
}
}
+ private synchronized List getAddDelegateList() {
+ if (delegates == null) {
+ delegates = new ArrayList();
+ }
+ return delegates;
+ }
}
Added: ant/core/trunk/src/tests/antunit/taskdefs/propertyhelper-test.xml
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/propertyhelper-test.xml?view=auto&rev=555174
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/propertyhelper-test.xml (added)
+++ ant/core/trunk/src/tests/antunit/taskdefs/propertyhelper-test.xml Tue Jul
10 22:28:04 2007
@@ -0,0 +1,25 @@
+<project default="antunit" xmlns:au="antlib:org.apache.ant.antunit">
+ <import file="../antunit-base.xml" />
+
+ <target name="testScript">
+ <script language="beanshell" manager="bsf">
+ import org.apache.tools.ant.PropertyHelper;
+ public class FooEvaluator implements PropertyHelper.PropertyEvaluator {
+ public Object evaluate(String property, PropertyHelper propertyHelper)
{
+ return "foo".equals(property) ? "foo.value" : null;
+ }
+ }
+ project.addReference("fooEvaluator", new FooEvaluator());
+ </script>
+ <au:assertFalse>
+ <isset property="foo" />
+ </au:assertFalse>
+ <propertyhelper>
+ <delegate refid="fooEvaluator" />
+ </propertyhelper>
+ <au:assertTrue>
+ <equals arg1="${foo}" arg2="foo.value" />
+ </au:assertTrue>
+ </target>
+
+</project>
Propchange: ant/core/trunk/src/tests/antunit/taskdefs/propertyhelper-test.xml
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]