Browse Source

Add nested <mapper>s to <pathconvert>.

PR: 26364
Submitted by:	Peter Reilly


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@276173 13f79535-47bb-0310-9956-ffa450edef68
master
Matthew Jason Benson 21 years ago
parent
commit
6483e38771
3 changed files with 41 additions and 0 deletions
  1. +2
    -0
      WHATSNEW
  2. +8
    -0
      docs/manual/CoreTasks/pathconvert.html
  3. +31
    -0
      src/main/org/apache/tools/ant/taskdefs/PathConvert.java

+ 2
- 0
WHATSNEW View File

@@ -72,6 +72,8 @@ Other changes:

* Docs fixes for xmlvalidate.html. Bugzilla Report 27092.

* <pathconvert> now accepts nested <mapper>s. Bugzilla Report 26364.

Changes from Ant 1.6.0 to Ant 1.6.1
=============================================



+ 8
- 0
docs/manual/CoreTasks/pathconvert.html View File

@@ -19,6 +19,9 @@ of files in a FileList into a path.
</p>
<p>Nested <code>&lt;map&gt;</code> elements can be specified to map Windows
drive letters to Unix paths, and vice-versa.</p>
<p>More complex transformations can be achieved using a nested
<a href="../CoreTypes/mapper.html"><code>&lt;mapper&gt;</code></a>.
</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
@@ -114,6 +117,11 @@ prefixes of other <code>from</code> values.</i>
<p>If the <code>refid</code> attribute is not specified, then a
nested <code>&lt;path&gt;</code> element must be supplied. See
<a href="../using.html#path">Path-like Structures</a> for details.</p>
<h4>mapper</h4>
<p>A single nested <a href="../CoreTypes/mapper.html">
<code>&lt;mapper&gt;</code></a> element can be specified
to perform any of various filename transformations.
</p>

<h3>Examples</h3>
<p>In the examples below, assume that the <code>${wl.home}</code> property


+ 31
- 0
src/main/org/apache/tools/ant/taskdefs/PathConvert.java View File

@@ -19,6 +19,8 @@ package org.apache.tools.ant.taskdefs;
import java.io.File;
import java.util.StringTokenizer;
import java.util.Vector;
import java.util.List;
import java.util.ArrayList;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
@@ -29,6 +31,8 @@ import org.apache.tools.ant.types.FileList;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
import org.apache.tools.ant.types.Mapper;
import org.apache.tools.ant.util.FileNameMapper;

/**
* Converts path and classpath information to a specific target OS
@@ -83,6 +87,9 @@ public class PathConvert extends Task {
*/
private String dirSep = null;

/** Filename mapper */
private Mapper mapper = null;

/**
* constructor
*/
@@ -352,6 +359,18 @@ public class PathConvert extends Task {
// Get the list of path components in canonical form
String[] elems = path.list();

if (mapper != null) {
FileNameMapper impl = mapper.getImplementation();
List ret = new ArrayList();
for (int i = 0; i < elems.length; ++i) {
String[] mapped = impl.mapFileName(elems[i]);
for (int m = 0; mapped != null && m < mapped.length; ++m) {
ret.add(mapped[m]);
}
}
elems = (String[]) ret.toArray(new String[] {});
}

for (int i = 0; i < elems.length; i++) {
String elem = elems[i];

@@ -435,6 +454,18 @@ public class PathConvert extends Task {
return elem;
}

/**
* Add a mapper to convert the file names.
*
* @param mapper a <code>Mapper</code> value
*/
public void addMapper(Mapper mapper) {
if (this.mapper != null) {
throw new BuildException(
"Cannot define more than one mapper");
}
this.mapper = mapper;
}

/**
* Validate that all our parameters have been properly initialized.


Loading…
Cancel
Save