peterreilly 2004/01/27 09:58:05
Modified: src/main/org/apache/tools/ant/taskdefs Tag: ANT_16_BRANCH
MacroDef.java MacroInstance.java
src/etc/testcases/taskdefs Tag: ANT_16_BRANCH macrodef.xml
src/testcases/org/apache/tools/ant/taskdefs Tag:
ANT_16_BRANCH MacroDefTest.java
docs/manual/CoreTasks Tag: ANT_16_BRANCH macrodef.html
Log:
sync with head
Revision Changes Path
No revision
No revision
1.7.2.13 +147 -12 ant/src/main/org/apache/tools/ant/taskdefs/MacroDef.java
Index: MacroDef.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/MacroDef.java,v
retrieving revision 1.7.2.12
retrieving revision 1.7.2.13
diff -u -r1.7.2.12 -r1.7.2.13
--- MacroDef.java 22 Jan 2004 16:40:12 -0000 1.7.2.12
+++ MacroDef.java 27 Jan 2004 17:58:04 -0000 1.7.2.13
@@ -59,6 +59,7 @@
import java.util.Map;
import java.util.Locale;
import java.util.HashMap;
+import java.util.Iterator;
import org.apache.tools.ant.AntTypeDefinition;
import org.apache.tools.ant.BuildException;
@@ -82,6 +83,7 @@
private List attributes = new ArrayList();
private Map elements = new HashMap();
private String textName = null;
+ private Text text = null;
/**
* Name of the definition
@@ -92,22 +94,39 @@
}
/**
- * Name of the text attribute.
- * @param textName the name of the attribute to use for the
- * text content of the macro.
+ * Add the text element.
+ * @param text the nested text element to add
* @since ant 1.6.1
*/
- public void setTextName(String textName) {
- this.textName = textName;
+ public void addConfiguredText(Text text) {
+ if (this.text != null) {
+ throw new BuildException(
+ "Only one nested text element allowed");
+ }
+ if (text.getName() == null) {
+ throw new BuildException(
+ "the text nested element needed a \"name\" attribute");
+ }
+ // Check if used by attributes
+ for (Iterator i = attributes.iterator(); i.hasNext();) {
+ Attribute attribute = (Attribute) i.next();
+ if (text.getName().equals(attribute.getName())) {
+ throw new BuildException(
+ "the name \"" + text.getName()
+ + "\" is already used as an attribute");
+ }
+ }
+ this.text = text;
+ this.textName = text.getName();
}
/**
- * @return the name of the text content attribute
+ * @return the nested text element
* @since ant 1.6.1
*/
- public String getTextName() {
- return textName;
+ public Text getText() {
+ return text;
}
/**
@@ -245,7 +264,7 @@
if (attribute.getName().equals(textName)) {
throw new BuildException(
"the attribute name \"" + attribute.getName()
- + "\" has already been used by the textname attribute");
+ + "\" has already been used by the text element");
}
for (int i = 0; i < attributes.size(); ++i) {
if (((Attribute) attributes.get(i)).getName().equals(
@@ -404,6 +423,122 @@
}
/**
+ * A nested text element for the MacroDef task.
+ * @since ant 1.6.1
+ */
+ public static class Text {
+ private String name;
+ private boolean optional;
+ private boolean trim;
+ private String description;
+
+ /**
+ * The name of the attribute.
+ *
+ * @param name the name of the attribute
+ */
+ public void setName(String name) {
+ if (!isValidName(name)) {
+ throw new BuildException(
+ "Illegal name [" + name + "] for attribute");
+ }
+ this.name = name.toLowerCase(Locale.US);
+ }
+
+ /**
+ * @return the name of the attribute
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * The optional attribute of the text element.
+ *
+ * @param optional if true this is optional
+ */
+ public void setOptional(boolean optional) {
+ this.optional = optional;
+ }
+
+ /**
+ * @return true if the text is optional
+ */
+ public boolean getOptional() {
+ return optional;
+ }
+
+ /**
+ * The trim attribute of the text element.
+ *
+ * @param trim if true this String.trim() is called on
+ * the contents of the text element.
+ */
+ public void setTrim(boolean trim) {
+ this.trim = trim;
+ }
+
+ /**
+ * @return true if the text is trim
+ */
+ public boolean getTrim() {
+ return trim;
+ }
+
+ /**
+ * @param desc Description of the text.
+ */
+ public void setDescription(String desc) {
+ description = desc;
+ }
+
+ /**
+ * @return the description of the text, or <code>null</code> if
+ * no description is available.
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * equality method
+ *
+ * @param obj an <code>Object</code> value
+ * @return a <code>boolean</code> value
+ */
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (obj.getClass() != getClass()) {
+ return false;
+ }
+ Text other = (Text) obj;
+ if (name == null) {
+ if (other.name != null) {
+ return false;
+ }
+ } else if (!name.equals(other.name)) {
+ return false;
+ }
+ if (optional != other.optional) {
+ return false;
+ }
+ if (trim != other.trim) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * @return a hash code value for this object.
+ */
+ public int hashCode() {
+ return objectHashCode(name);
+ }
+ }
+
+ /**
* A nested element for the MacroDef task.
*
*/
@@ -519,12 +654,12 @@
if (!name.equals(other.name)) {
return false;
}
- if (textName == null) {
- if (other.textName != null) {
+ if (text == null) {
+ if (other.text != null) {
return false;
}
} else {
- if (!textName.equals(other.textName)) {
+ if (!text.equals(other.text)) {
return false;
}
}
1.5.2.12 +20 -4 ant/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java
Index: MacroInstance.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java,v
retrieving revision 1.5.2.11
retrieving revision 1.5.2.12
diff -u -r1.5.2.11 -r1.5.2.12
--- MacroInstance.java 22 Jan 2004 16:40:12 -0000 1.5.2.11
+++ MacroInstance.java 27 Jan 2004 17:58:04 -0000 1.5.2.12
@@ -88,7 +88,7 @@
private Map nsElements = null;
private Map presentElements = new HashMap();
private Hashtable localProperties = new Hashtable();
- private String text = "";
+ private String text = null;
/**
* Called from MacroDef.MyAntTypeDefinition#create()
@@ -251,6 +251,7 @@
* Set the text contents for the macro.
* @param text the text to be added to the macro.
*/
+
public void addText(String text) {
this.text = text;
}
@@ -340,10 +341,25 @@
if (copyKeys.contains("id")) {
copyKeys.remove("id");
}
- if (macroDef.getTextName() != null) {
- localProperties.put(macroDef.getTextName(), text);
+ if (macroDef.getText() != null) {
+ if (text == null) {
+ if (!macroDef.getText().getOptional()) {
+ throw new BuildException(
+ "required text missing");
+ }
+ text = "";
+ }
+ if (macroDef.getText().getTrim()) {
+ text = text.trim();
+ }
+ localProperties.put(macroDef.getText().getName(), text);
+ } else {
+ if (text != null && !text.trim().equals("")) {
+ throw new BuildException(
+ "The \"" + getTaskName() + "\" macro does not support"
+ + " nested text data.");
+ }
}
-
if (copyKeys.size() != 0) {
throw new BuildException(
"Unknown attribute" + (copyKeys.size() > 1 ? "s " : " ")
No revision
No revision
1.2.2.7 +27 -3 ant/src/etc/testcases/taskdefs/macrodef.xml
Index: macrodef.xml
===================================================================
RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/macrodef.xml,v
retrieving revision 1.2.2.6
retrieving revision 1.2.2.7
diff -u -r1.2.2.6 -r1.2.2.7
--- macrodef.xml 22 Jan 2004 16:40:12 -0000 1.2.2.6
+++ macrodef.xml 27 Jan 2004 17:58:05 -0000 1.2.2.7
@@ -102,8 +102,9 @@
</ignore>
</target>
- <target name="textname">
- <macrodef name="echotest" textname="text">
+ <target name="textelement">
+ <macrodef name="echotest">
+ <text name="text" optional="yes"/>
<sequential>
<echo>@{text}</echo>
</sequential>
@@ -113,8 +114,31 @@
</echotest>
</target>
+ <target name="text.trim">
+ <macrodef name="echotest">
+ <text name="text" trim="yes"/>
+ <sequential>
+ <echo>[@{text}]</echo>
+ </sequential>
+ </macrodef>
+ <echotest>
+ Hello world
+ </echotest>
+ </target>
+
<target name="duplicatetextname">
- <macrodef name="echotest" textname="text">
+ <macrodef name="echotest">
+ <attribute name="text"/>
+ <text name="text"/>
+ <sequential>
+ <echo>@{text}</echo>
+ </sequential>
+ </macrodef>
+ </target>
+
+ <target name="duplicatetextname2">
+ <macrodef name="echotest">
+ <text name="text"/>
<attribute name="text"/>
<sequential>
<echo>@{text}</echo>
No revision
No revision
1.2.2.7 +13 -3 ant/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java
Index: MacroDefTest.java
===================================================================
RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java,v
retrieving revision 1.2.2.6
retrieving revision 1.2.2.7
diff -u -r1.2.2.6 -r1.2.2.7
--- MacroDefTest.java 22 Jan 2004 16:40:13 -0000 1.2.2.6
+++ MacroDefTest.java 27 Jan 2004 17:58:05 -0000 1.2.2.7
@@ -116,15 +116,25 @@
"nested elementnested element");
}
- public void testTextName() {
+ public void testTextElement() {
expectLogContaining(
- "textname", "Hello world");
+ "textelement", "Hello world");
+ }
+
+ public void testTextTrim() {
+ expectLogContaining(
+ "text.trim", "[Hello world]");
}
public void testDuplicateTextName() {
expectBuildException(
"duplicatetextname",
- "the attribute text has already been specified");
+ "the name \"text\" is already used as an attribute");
+ }
+ public void testDuplicateTextName2() {
+ expectBuildException(
+ "duplicatetextname2",
+ "the attribute name \"text\" has already been used by the text element");
}
}
No revision
No revision
1.2.2.11 +51 -12 ant/docs/manual/CoreTasks/macrodef.html
Index: macrodef.html
===================================================================
RCS file: /home/cvs/ant/docs/manual/CoreTasks/macrodef.html,v
retrieving revision 1.2.2.10
retrieving revision 1.2.2.11
diff -u -r1.2.2.10 -r1.2.2.11
--- macrodef.html 22 Jan 2004 16:40:12 -0000 1.2.2.10
+++ macrodef.html 27 Jan 2004 17:58:05 -0000 1.2.2.11
@@ -44,16 +44,6 @@
</td>
<td valign="top" align="center">No</td>
</tr>
- <tr>
- <td valign="top">textname</td>
- <td valign="top">
- The textname attribute value becomes a macrodef
- attribute that
- gets set to the value of the text contents of the macro.
- <em>since ant 1.6.1</em>
- </td>
- <td valign="top" align="center">No</td>
- </tr>
</table>
<h3>Parameters specified as nested elements</h3>
<h4>attribute</h4>
@@ -144,6 +134,54 @@
<td valign="top" align="center">No</td>
</tr>
</table>
+ <h4>text</h4>
+ <p>
+ This is used to specify the treatment of text contents of the macrodef.
+ If this element is not present, then any nested text in the macro
+ will be an error. If the text element is present, then the name
+ becomes an attribute that gets set to the nested text of the macro.
+ <em>Since ant 1.6.1.</em>
+ </p>
+ <p>
+ The case of the text name is ignored.
+ </p>
+ <h3>Parameters</h3>
+ <table border="1" cellpadding="2" cellspacing="0">
+ <tr>
+ <td valign="top"><b>Attribute</b></td>
+ <td valign="top"><b>Description</b></td>
+ <td align="center" valign="top"><b>Required</b></td>
+ </tr>
+ <tr>
+ <td valign="top">name</td>
+ <td valign="top">The name of the text attribute</td>
+ <td valign="top" align="center">Yes</td>
+ </tr>
+ <tr>
+ <td valign="top">optional</td>
+ <td valign="top">
+ If true nested text in the macro is optional, default is "false".
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">trim</td>
+ <td valign="top">
+ If true, the nested text is trimmed of white space,
+ default is "false".
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">description</td>
+ <td valign="top">
+ This contains a description
+ informing the user what the nested text of the macro is expected
+ to be.
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ </table>
<h3>Examples</h3>
<p>
@@ -212,11 +250,12 @@
</pre>
</blockquote>
<p>
- The following shows the use of the <code>textname</code> attribute.
+ The following shows the use of the <code>text</code> element.
</p>
<blockquote>
<pre class="code">
-<macrodef name="echotest" textname="text">
+<macrodef name="echotest">
+ <text name="text"/text>
<sequential>
<echo>@{text}</echo>
</sequential>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org
|