| @@ -28,7 +28,8 @@ | |||
| <h3>Description</h3> | |||
| <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 | |||
| 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 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 | |||
| @@ -65,7 +66,14 @@ nested <a href="../Types/mapper.html"><code><mapper></code></a> (<em>since | |||
| <tr> | |||
| <td>property</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> | |||
| <td>refid</td> | |||
| @@ -102,6 +102,9 @@ public class PathConvert extends Task { | |||
| private boolean preserveDuplicates; | |||
| /** Destination {@link Resource} */ | |||
| private Resource dest; | |||
| /** | |||
| * Helper class, holds the nested <map> values. Elements will look like | |||
| * this: <map from="d:" to="/foo"/> | |||
| @@ -328,6 +331,19 @@ public class PathConvert extends Task { | |||
| 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. | |||
| * @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) { | |||
| return new LogOutputStream(this); | |||
| } | |||
| @@ -452,10 +471,12 @@ public class PathConvert extends Task { | |||
| * @throws BuildException if something is not set up properly. | |||
| */ | |||
| private void validateSetup() throws BuildException { | |||
| if (path == null) { | |||
| 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 | |||
| // override the targetOS settings. | |||
| String dsep = File.separator; | |||
| @@ -109,4 +109,24 @@ | |||
| <isset property="result" /> | |||
| </au:assertFalse> | |||
| </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> | |||