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