conor 2003/06/18 06:02:12
Modified: src/etc/testcases/taskdefs/optional/script scriptdef.xml
src/main/org/apache/tools/ant DynamicConfigurator.java
src/main/org/apache/tools/ant/taskdefs/optional/script
ScriptDef.java ScriptDefBase.java
src/testcases/org/apache/tools/ant/taskdefs/optional/script
ScriptDefTest.java
Log:
Rework scriptdef to use DynamicConfigurator
Revision Changes Path
1.2 +16 -0
ant/src/etc/testcases/taskdefs/optional/script/scriptdef.xml
Index: scriptdef.xml
===================================================================
RCS file:
/home/cvs/ant/src/etc/testcases/taskdefs/optional/script/scriptdef.xml,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -w -u -r1.1 -r1.2
--- scriptdef.xml 9 Jun 2003 13:38:06 -0000 1.1
+++ scriptdef.xml 18 Jun 2003 13:02:12 -0000 1.2
@@ -109,4 +109,20 @@
<attribute name="attr1"/>
</scriptdef>
</target>
+
+ <target name="property">
+ <scriptdef name="scripttest" language="javascript">
+ <attribute name="attr1"/>
+ <![CDATA[
+
+ project.log("Attribute value = " + attributes.get("attr1"));
+ ]]>
+ </scriptdef>
+
+ <property name="testproperty" value="test"/>
+ <scripttest attr1="${testproperty}">
+ </scripttest>
+ </target>
+
+
</project>
1.5 +2 -2
ant/src/main/org/apache/tools/ant/DynamicConfigurator.java
Index: DynamicConfigurator.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/DynamicConfigurator.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -w -u -r1.4 -r1.5
--- DynamicConfigurator.java 10 Feb 2003 14:13:30 -0000 1.4
+++ DynamicConfigurator.java 18 Jun 2003 13:02:12 -0000 1.5
@@ -69,7 +69,7 @@
* @param value the new value of the attribute
* @throws BuildException when any error occurs
*/
- public void setDynamicAttribute(String name, String value)
+ void setDynamicAttribute(String name, String value)
throws BuildException;
/**
@@ -79,5 +79,5 @@
* @throws BuildException when any error occurs
* @return the element created
*/
- public Object createDynamicElement(String name) throws BuildException;
+ Object createDynamicElement(String name) throws BuildException;
}
1.2 +60 -81
ant/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDef.java
Index: ScriptDef.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDef.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -w -u -r1.1 -r1.2
--- ScriptDef.java 9 Jun 2003 13:38:07 -0000 1.1
+++ ScriptDef.java 18 Jun 2003 13:02:12 -0000 1.2
@@ -110,6 +110,10 @@
this.name = name;
}
+ public boolean isAttributeSupported(String attributeName) {
+ return attributeSet.contains(attributeName);
+ }
+
/**
* Set the scripting language used by this script
*
@@ -276,40 +280,14 @@
project.addTaskDefinition(name, ScriptDefBase.class);
}
- /**
- * Execute the script.
- *
- * @param scriptConfig the RuntimeConfigurable which contains the
attribute
- * definitions for the script task instance.
- *
- * @param elements a list of UnknownElements which contain the
configuration
- * of the nested elements of the script instance.
- */
- public void executeScript(RuntimeConfigurable scriptConfig, List
elements) {
-
- Map configAttributes = scriptConfig.getAttributeMap();
- for (Iterator i = configAttributes.keySet().iterator();
i.hasNext();) {
- String attributeName = (String) i.next();
- if (!attributeSet.contains(attributeName)) {
- throw new BuildException("<" + name + "> does not support "
- + "the \"" + attributeName + "\" attribute");
- }
- }
-
- // handle nested elements
- Map elementInstances = new HashMap();
- for (Iterator i = elements.iterator(); i.hasNext();) {
- UnknownElement element = (UnknownElement) i.next();
- String elementTag = element.getTag().toLowerCase(Locale.US);
-
+ public Object createNestedElement(String elementName) {
NestedElement definition
- = (NestedElement) nestedElementMap.get(elementTag);
+ = (NestedElement) nestedElementMap.get(elementName);
if (definition == null) {
throw new BuildException("<" + name + "> does not support "
- + "the <" + elementTag + "> nested element");
+ + "the <" + elementName + "> nested element");
}
- // what is the type of the object to be created
Object instance = null;
String classname = definition.className;
if (classname == null) {
@@ -332,7 +310,7 @@
} catch (Throwable e2) {
throw new BuildException("scriptdef: Unable to load
"
+ "class " + classname + " for nested element <"
- + elementTag + ">", e2);
+ + elementName + ">", e2);
}
}
@@ -341,34 +319,35 @@
} catch (Throwable e) {
throw new BuildException("scriptdef: Unable to create "
+ "element of class " + classname + " for nested "
- + "element <" + elementTag + ">", e);
+ + "element <" + elementName + ">", e);
}
getProject().setProjectReference(instance);
}
if (instance == null) {
throw new BuildException("<" + name + "> is unable to create
"
- + "the <" + elementTag + "> nested element");
+ + "the <" + elementName + "> nested element");
}
-
- element.configure(instance);
-
- // find the appropriate list
- List instanceList = (List) elementInstances.get(elementTag);
- if (instanceList == null) {
- instanceList = new ArrayList();
- elementInstances.put(elementTag, instanceList);
- }
- instanceList.add(instance);
+ return instance;
}
+ /**
+ * Execute the script.
+ *
+ * @param scriptConfig the RuntimeConfigurable which contains the
attribute
+ * definitions for the script task instance.
+ *
+ * @param elements a list of UnknownElements which contain the
configuration
+ * of the nested elements of the script instance.
+ */
+ public void executeScript(Map attributes, Map elements) {
try {
BSFManager manager = new BSFManager();
// execute the script
- manager.declareBean("attributes", configAttributes,
- configAttributes.getClass());
- manager.declareBean("elements", elementInstances,
- elementInstances.getClass());
+ manager.declareBean("attributes", attributes,
+ attributes.getClass());
+ manager.declareBean("elements", elements,
+ elements.getClass());
manager.declareBean("project", getProject(), Project.class);
manager.exec(language, "scriptdef <" + name + ">", 0, 0, script);
} catch (BSFException e) {
1.2 +31 -19
ant/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDefBase.java
Index: ScriptDefBase.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDefBase.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -w -u -r1.1 -r1.2
--- ScriptDefBase.java 9 Jun 2003 13:38:07 -0000 1.1
+++ ScriptDefBase.java 18 Jun 2003 13:02:12 -0000 1.2
@@ -57,8 +57,9 @@
import org.apache.tools.ant.TaskContainer;
import org.apache.tools.ant.MagicNames;
import org.apache.tools.ant.BuildException;
-
+import org.apache.tools.ant.DynamicConfigurator;
import java.util.Map;
+import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
@@ -71,16 +72,23 @@
* @author Conor MacNeill
* @since Ant 1.6
*/
-public class ScriptDefBase extends Task implements TaskContainer {
+public class ScriptDefBase extends Task implements DynamicConfigurator {
+
+ /** Nested elements */
+ private Map nestedElementMap = new HashMap();
- /** Nested elements - UnknownElements passed by Ant */
- private List nestedElements = new ArrayList();
+ /** Attributes */
+ private Map attributes = new HashMap();
/**
* Locate the script defining task and execute the script by passing
* control to it
*/
public void execute() {
+ getScript().executeScript(attributes, nestedElementMap);
+ }
+
+ private ScriptDef getScript() {
String name = getTaskType();
Map scriptRepository
= (Map) getProject().getReference(MagicNames.SCRIPT_REPOSITORY);
@@ -92,24 +100,28 @@
if (definition == null) {
throw new BuildException("Script definition not found for " +
name);
}
- definition.executeScript(getWrapper(), nestedElements);
+ return definition;
}
- /**
- * Method overridden to prevent configuration of this task by the core
- */
- public void maybeConfigure() {
- // don't configure now - do it at script execute time
+ public Object createDynamicElement(String name) {
+ List nestedElementList = (List) nestedElementMap.get(name);
+ if (nestedElementList == null) {
+ nestedElementList = new ArrayList();
+ nestedElementMap.put(name, nestedElementList);
+ }
+ Object element = getScript().createNestedElement(name);
+ nestedElementList.add(element);
+ return element;
}
- /**
- * TaskContainer method implemented to prevent processing of the task
- * instance by the Ant Core.
- *
- * @param nestedElement the nestedElement as an UnknownElement.
- */
- public void addTask(Task nestedElement) {
- nestedElements.add(nestedElement);
+ public void setDynamicAttribute(String name, String value) {
+ ScriptDef definition = getScript();
+ if (!definition.isAttributeSupported(name)) {
+ throw new BuildException("<" + getTaskType()
+ + "> does not support the \"" + name + "\" attribute");
+ }
+
+ attributes.put(name, value);
}
}
1.3 +11 -0
ant/src/testcases/org/apache/tools/ant/taskdefs/optional/script/ScriptDefTest.java
Index: ScriptDefTest.java
===================================================================
RCS file:
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/optional/script/ScriptDefTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -w -u -r1.2 -r1.3
--- ScriptDefTest.java 9 Jun 2003 14:40:44 -0000 1.2
+++ ScriptDefTest.java 18 Jun 2003 13:02:12 -0000 1.3
@@ -141,4 +141,15 @@
"Should have detected duplicate attribute definition",
"attr1 attribute more than once");
}
+
+ public void testProperty() {
+ executeTarget("property");
+ // get the fileset and its basedir
+ Project project = getProject();
+ String log = getLog();
+ assertTrue("Expecting property in attribute value replaced",
+ log.indexOf("Attribute value = test") != -1);
+ }
+
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]