Browse Source

add nested delegate ref to PHtask w/ script example

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@555174 13f79535-47bb-0310-9956-ffa450edef68
master
Matthew Jason Benson 18 years ago
parent
commit
5c4a83c51c
2 changed files with 79 additions and 6 deletions
  1. +54
    -6
      src/main/org/apache/tools/ant/taskdefs/PropertyHelperTask.java
  2. +25
    -0
      src/tests/antunit/taskdefs/propertyhelper-test.xml

+ 54
- 6
src/main/org/apache/tools/ant/taskdefs/PropertyHelperTask.java View File

@@ -35,6 +35,39 @@ import org.apache.tools.ant.Task;
* @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 @@ public class PropertyHelperTask extends Task {
* @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 @@ public class PropertyHelperTask extends Task {
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 @@ public class PropertyHelperTask extends Task {
}
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;
}
}

+ 25
- 0
src/tests/antunit/taskdefs/propertyhelper-test.xml View File

@@ -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>

Loading…
Cancel
Save