| @@ -28,7 +28,8 @@ | |||||
| <h3>Description</h3> | <h3>Description</h3> | ||||
| <p>Converts nested <a href="../Types/resources.html#collection">resource collections</a>, or a | <p>Converts nested <a href="../Types/resources.html#collection">resource collections</a>, or a | ||||
| reference to just one, into a path form for a particular platform, optionally storing the result | reference to just one, into a path form for a particular platform, optionally storing the result | ||||
| into a given property. It can also be used when you need to convert a resource collection into a | |||||
| into a property or writing to an Ant <a href="../Types/resources.html">resource</a>. | |||||
| It can also be used when you need to convert a resource collection into a | |||||
| list, separated by a given character, such as a comma or space, or, conversely, e.g. to convert a | list, separated by a given character, such as a comma or space, or, conversely, e.g. to convert a | ||||
| list of files in a FileList into a path.</p> | list of files in a FileList into a path.</p> | ||||
| <p>Nested <code><map></code> elements can be specified to map Windows drive letters to Unix | <p>Nested <code><map></code> elements can be specified to map Windows drive letters to Unix | ||||
| @@ -65,7 +66,14 @@ nested <a href="../Types/mapper.html"><code><mapper></code></a> (<em>since | |||||
| <tr> | <tr> | ||||
| <td>property</td> | <td>property</td> | ||||
| <td>The name of the property in which to place the converted path.</td> | <td>The name of the property in which to place the converted path.</td> | ||||
| <td>No, result will be logged if unset</td> | |||||
| <td>No, result will be logged if neither <code>@property</code> nor <code>@dest</code> is set</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td>dest</td> | |||||
| <td>A destination resource into which to write the converted path (Ant interprets this as a | |||||
| <code>File</code> by default). | |||||
| </td> | |||||
| <td>No, result will be logged if neither <code>@property</code> nor <code>@dest</code> is set</td> | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td>refid</td> | <td>refid</td> | ||||
| @@ -102,6 +102,9 @@ public class PathConvert extends Task { | |||||
| private boolean preserveDuplicates; | private boolean preserveDuplicates; | ||||
| /** Destination {@link Resource} */ | |||||
| private Resource dest; | |||||
| /** | /** | ||||
| * Helper class, holds the nested <map> values. Elements will look like | * Helper class, holds the nested <map> values. Elements will look like | ||||
| * this: <map from="d:" to="/foo"/> | * this: <map from="d:" to="/foo"/> | ||||
| @@ -328,6 +331,19 @@ public class PathConvert extends Task { | |||||
| return refid != null; | return refid != null; | ||||
| } | } | ||||
| /** | |||||
| * Set destination resource. | |||||
| * @param dest | |||||
| */ | |||||
| public void setDest(Resource dest) { | |||||
| if (dest != null) { | |||||
| if (this.dest != null) { | |||||
| throw new BuildException("@dest already set"); | |||||
| } | |||||
| } | |||||
| this.dest = dest; | |||||
| } | |||||
| /** | /** | ||||
| * Do the execution. | * Do the execution. | ||||
| * @throws BuildException if something is invalid. | * @throws BuildException if something is invalid. | ||||
| @@ -371,7 +387,10 @@ public class PathConvert extends Task { | |||||
| } | } | ||||
| } | } | ||||
| private OutputStream createOutputStream() { | |||||
| private OutputStream createOutputStream() throws IOException { | |||||
| if (dest != null) { | |||||
| return dest.getOutputStream(); | |||||
| } | |||||
| if (property == null) { | if (property == null) { | ||||
| return new LogOutputStream(this); | return new LogOutputStream(this); | ||||
| } | } | ||||
| @@ -452,10 +471,12 @@ public class PathConvert extends Task { | |||||
| * @throws BuildException if something is not set up properly. | * @throws BuildException if something is not set up properly. | ||||
| */ | */ | ||||
| private void validateSetup() throws BuildException { | private void validateSetup() throws BuildException { | ||||
| if (path == null) { | if (path == null) { | ||||
| throw new BuildException("You must specify a path to convert"); | throw new BuildException("You must specify a path to convert"); | ||||
| } | } | ||||
| if (property != null && dest != null) { | |||||
| throw new BuildException("@property and @dest are mutually exclusive"); | |||||
| } | |||||
| // Determine the separator strings. The dirsep and pathsep attributes | // Determine the separator strings. The dirsep and pathsep attributes | ||||
| // override the targetOS settings. | // override the targetOS settings. | ||||
| String dsep = File.separator; | String dsep = File.separator; | ||||
| @@ -109,4 +109,24 @@ | |||||
| <isset property="result" /> | <isset property="result" /> | ||||
| </au:assertFalse> | </au:assertFalse> | ||||
| </target> | </target> | ||||
| <target name="testDest"> | |||||
| <au:assertFileDoesntExist file="${output}/destfile" /> | |||||
| <pathconvert dest="${output}/destfile"> | |||||
| <file file="foo/bar/baz" /> | |||||
| </pathconvert> | |||||
| <au:assertFileExists file="${output}/destfile" /> | |||||
| <au:assertTrue> | |||||
| <resourcesmatch> | |||||
| <file file="${output}/destfile" /> | |||||
| <string value="${basedir}/foo/bar/baz" /> | |||||
| </resourcesmatch> | |||||
| </au:assertTrue> | |||||
| </target> | |||||
| <target name="testDestPropertyMutex"> | |||||
| <au:expectfailure message="@property and @dest are mutually exclusive"> | |||||
| <pathconvert property="someprop" dest="somefile" refid="testpath" /> | |||||
| </au:expectfailure> | |||||
| </target> | |||||
| </project> | </project> | ||||