Author: bodewig
Date: Wed Sep 28 11:46:40 2005
New Revision: 292249
URL: http://svn.apache.org/viewcvs?rev=292249&view=rev
Log:
resource collection support for xslt
Modified:
ant/core/trunk/docs/manual/CoreTasks/style.html
ant/core/trunk/src/etc/testcases/taskdefs/style/build.xml
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/StyleTest.java
Modified: ant/core/trunk/docs/manual/CoreTasks/style.html
URL:
http://svn.apache.org/viewcvs/ant/core/trunk/docs/manual/CoreTasks/style.html?rev=292249&r1=292248&r2=292249&view=diff
==============================================================================
--- ant/core/trunk/docs/manual/CoreTasks/style.html (original)
+++ ant/core/trunk/docs/manual/CoreTasks/style.html Wed Sep 28 11:46:40 2005
@@ -42,6 +42,11 @@
been matched. If this behavior is not what you want, set the
scanincludedirectories attribute to false.</p>
+<p>Starting with Ant 1.7 this task supports nested <a
+href="../CoreTypes/resources.html#collection">resource collection</a>s
+in addition to (or instead of, depending on the useImplicitFileset
+attribute) the implicit fileset formed by this task.</p>
+
<p>This task supports the use of a nested <code><param></code> element
which is used to pass values
to an <code><xsl:param></code> declaration.</p>
<p>This task supports the use of a nested <a
href="../CoreTypes/xmlcatalog.html">xmlcatalog</a>
@@ -176,8 +181,27 @@
Default is <code>false</code>. <em>Since Ant 1.5.2</em>.</td>
<td valign="top" align="center">No</td>
</tr>
+ <tr>
+ <td valign="top">useImplicitFileset</td>
+ <td valign="top">Whether the implicit fileset formed by this task
+ shall be used. If you set this to false you must use nested
+ resource collections - or the in attribute, in which case this
+ attribute has no impact anyway. Default is <code>true</code>.
+ <em>Since Ant 1.7</em>.</td>
+ <td valign="top" align="center">No</td>
+ </tr>
</table>
<h3>Parameters specified as nested elements</h3>
+
+<h4>any <a href="../CoreTypes/resources.html#collection">resource
+collection</a></h4>
+
+<p><em>since Ant 1.7</em></p>
+
+<p>Use resource collections to specify resources that the stylesheet
+should be applied to. Use a nested mapper and the task's destdir
+attribute to specify the output files.</p>
+
<h4>classpath</h4>
<p>The classpath to load the processor from can be specified via a
nested <code><classpath></code>, as well - that is, a
Modified: ant/core/trunk/src/etc/testcases/taskdefs/style/build.xml
URL:
http://svn.apache.org/viewcvs/ant/core/trunk/src/etc/testcases/taskdefs/style/build.xml?rev=292249&r1=292248&r2=292249&view=diff
==============================================================================
--- ant/core/trunk/src/etc/testcases/taskdefs/style/build.xml (original)
+++ ant/core/trunk/src/etc/testcases/taskdefs/style/build.xml Wed Sep 28
11:46:40 2005
@@ -57,6 +57,15 @@
</xslt>
</target>
+ <target name="testExplicitFileset">
+ <property name="value" value="myvalue"/>
+ <xslt style="printParams.xsl" destDir="${out.dir}"
+ useImplicitFileset="false" basedir="..">
+ <param name="set" expression="${value}"/>
+ <fileset dir="."/>
+ </xslt>
+ </target>
+
<target name="testNewerStylesheet">
<antcall target="copyXsl">
<param name="xsl.value" value="old-value"/>
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
URL:
http://svn.apache.org/viewcvs/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java?rev=292249&r1=292248&r2=292249&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java Wed
Sep 28 11:46:40 2005
@@ -19,6 +19,7 @@
import java.io.File;
import java.util.Enumeration;
+import java.util.Iterator;
import java.util.Vector;
import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.BuildException;
@@ -28,7 +29,11 @@
import org.apache.tools.ant.types.Mapper;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.ResourceCollection;
import org.apache.tools.ant.types.XMLCatalog;
+import org.apache.tools.ant.types.resources.FileResource;
+import org.apache.tools.ant.types.resources.Union;
import org.apache.tools.ant.util.FileNameMapper;
import org.apache.tools.ant.util.FileUtils;
@@ -141,6 +146,20 @@
private Mapper mapperElement = null;
/**
+ * Additional resource collections to process.
+ *
+ * @since Ant 1.7
+ */
+ private Union resources = new Union();
+
+ /**
+ * Whether to use the implicit fileset.
+ *
+ * @since Ant 1.7
+ */
+ private boolean useImplicitFileset = true;
+
+ /**
* Creates a new XSLTProcess Task.
*/
public XSLTProcess() {
@@ -184,6 +203,17 @@
}
/**
+ * Adds a collection of resources to style in addition to the
+ * given file or the implicit fileset.
+ *
+ * @param rc the collection of resources to style
+ * @since Ant 1.7
+ */
+ public void add(ResourceCollection rc) {
+ resources.add(rc);
+ }
+
+ /**
* Executes the task.
*
* @exception BuildException if there is an execution problem.
@@ -248,11 +278,10 @@
* in batch processing mode.
*/
- //-- make sure Source directory exists...
- if (destDir == null) {
- String msg = "destdir attributes must be set!";
- throw new BuildException(msg);
- }
+ //-- make sure destination directory exists...
+ checkDest();
+
+ if (useImplicitFileset) {
scanner = getDirectoryScanner(baseDir);
log("Transforming into " + destDir, Project.MSG_INFO);
@@ -272,6 +301,12 @@
}
}
}
+ } else { // only resource collections, there better be some
+ if (resources.size() == 0) {
+ throw new BuildException("no resources specified");
+ }
+ }
+ processResources(stylesheet);
} finally {
if (loader != null) {
loader.resetThreadContextLoader();
@@ -283,7 +318,7 @@
baseDir = savedBaseDir;
}
}
-
+
/**
* Set whether to check dependencies, or always generate;
* optional, default is false.
@@ -377,6 +412,18 @@
}
/**
+ * Whether to use the implicit fileset.
+ *
+ * <p>Set this to false if you want explicit control with nested
+ * resource collections.</p>
+ *
+ * @since Ant 1.7
+ */
+ public void setUseImplicitFileset(boolean b) {
+ useImplicitFileset = b;
+ }
+
+ /**
* Add the catalog to our internal catalog
*
* @param xmlCatalog the XMLCatalog instance to use to look up DTDs
@@ -449,6 +496,43 @@
*/
public void setIn(File inFile) {
this.inFile = inFile;
+ }
+
+ /**
+ * Throws a BuildException if the destination directory hasn't
+ * been specified.
+ * @since Ant 1.7
+ */
+ private void checkDest() {
+ if (destDir == null) {
+ String msg = "destdir attributes must be set!";
+ throw new BuildException(msg);
+ }
+ }
+
+ /**
+ * Styles all existing resources.
+ *
+ * @since Ant 1.7
+ */
+ private void processResources(File stylesheet) {
+ Iterator iter = resources.iterator();
+ while (iter.hasNext()) {
+ Resource r = (Resource) iter.next();
+ if (!r.isExists()) {
+ continue;
+ }
+ File base = baseDir;
+ String name = r.getName();
+ if (r instanceof FileResource) {
+ FileResource f = (FileResource) r;
+ base = f.getBaseDir();
+ if (base == null) {
+ name = f.getFile().getAbsolutePath();
+ }
+ }
+ process(base, name, destDir, stylesheet);
+ }
}
/**
Modified:
ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/StyleTest.java
URL:
http://svn.apache.org/viewcvs/ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/StyleTest.java?rev=292249&r1=292248&r2=292249&view=diff
==============================================================================
--- ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/StyleTest.java
(original)
+++ ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/StyleTest.java
Wed Sep 28 11:46:40 2005
@@ -84,8 +84,16 @@
public void testDefaultMapper() throws Exception {
+ testDefaultMapper("testDefaultMapper");
+ }
+
+ public void testExplicitFileset() throws Exception {
+ testDefaultMapper("testExplicitFileset");
+ }
+
+ public void testDefaultMapper(String target) throws Exception {
assertTrue(!getProject().resolveFile("out/data.html").exists());
- expectFileContains("testDefaultMapper",
+ expectFileContains(target,
"out/data.html",
"set='myvalue'");
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]