aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdrian Cumiskey <acumiskey@apache.org>2009-10-23 11:22:53 +0000
committerAdrian Cumiskey <acumiskey@apache.org>2009-10-23 11:22:53 +0000
commit435baa8edfb4cf4d6662d63fafc346ef1448c38b (patch)
tree4b04bf3ebe865695cf67de987e380a6dea7863c0 /src
parent3d7231bbc784a0b8802e39bb3b38f5787573d80b (diff)
downloadxmlgraphics-fop-435baa8edfb4cf4d6662d63fafc346ef1448c38b.tar.gz
xmlgraphics-fop-435baa8edfb4cf4d6662d63fafc346ef1448c38b.zip
Added support for xmlfile and xsltfile parameters in FOP's Ant Task.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@828999 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/documentation/content/xdocs/trunk/anttask.xml35
-rw-r--r--src/java/org/apache/fop/tools/anttasks/Fop.java138
2 files changed, 157 insertions, 16 deletions
diff --git a/src/documentation/content/xdocs/trunk/anttask.xml b/src/documentation/content/xdocs/trunk/anttask.xml
index 9dd508ad1..a543a5623 100644
--- a/src/documentation/content/xdocs/trunk/anttask.xml
+++ b/src/documentation/content/xdocs/trunk/anttask.xml
@@ -69,6 +69,16 @@
<td>Yes, if no fileset nested element is used</td>
</tr>
<tr>
+ <td>xmlfile</td>
+ <td>XML input file</td>
+ <td>Yes, if no fofile is specified</td>
+ </tr>
+ <tr>
+ <td>xsltfile</td>
+ <td>XSLT input file</td>
+ <td>Yes, if no fofile is specified</td>
+ </tr>
+ <tr>
<td>outfile</td>
<td>Output filename</td>
<td>Yes, when fofile is used. (This attribute is not valid for filesets.)</td>
@@ -196,6 +206,31 @@
</fop>
</target>
]]></source>
+ <p>
+ The following example transforms and converts a single XML and XSLT file to an AFP document:
+ </p>
+ <source><![CDATA[
+<target name="generate-afp-from-transform" description="Generates a single AFP file from an XSLT stylesheet">
+ <fop format="application/x-afp"
+ xmlfile="c:\working\foDirectory\Document.xml"
+ xsltfile="c:\working\foDirectory\Document.xslt"
+ outfile="c:\working\afpDirectory\Document.afp" />
+</target>
+ ]]></source>
+ <p>
+ This example transforms and converts all XML files within an entire directory to PostScript:
+ </p>
+ <source><![CDATA[
+<target name="generate-multiple-ps-from-transform" description="Generates multiple PostScript files using an XSLT stylesheet">
+ <fop format="application/postscript"
+ xsltfile="c:\working\foDirectory\Document.xslt"
+ outdir="${build.dir}" messagelevel="debug">
+ <fileset dir="${test.dir}">
+ <include name="*.xml"/>
+ </fileset>
+ </fop>
+</target>
+ ]]></source>
</section>
</body>
</document>
diff --git a/src/java/org/apache/fop/tools/anttasks/Fop.java b/src/java/org/apache/fop/tools/anttasks/Fop.java
index da25478c3..cfb8c8ade 100644
--- a/src/java/org/apache/fop/tools/anttasks/Fop.java
+++ b/src/java/org/apache/fop/tools/anttasks/Fop.java
@@ -34,6 +34,7 @@ import java.io.IOException;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.util.List;
+import java.util.Vector;
// FOP
import org.apache.fop.apps.FOPException;
@@ -67,7 +68,10 @@ import org.xml.sax.SAXException;
public class Fop extends Task {
private File foFile;
- private List filesets = new java.util.ArrayList();
+ private File xmlFile;
+ private File xsltFile;
+ private String xsltParams;
+ private List/*<FileSet>*/ filesets = new java.util.ArrayList/*<FileSet>*/();
private File outFile;
private File outDir;
private String format; //MIME type
@@ -112,6 +116,54 @@ public class Fop extends Task {
}
/**
+ * Gets the input XML file.
+ * @return the input XML file.
+ */
+ public File getXmlFile() {
+ return xmlFile;
+ }
+
+ /**
+ * Sets the input XML file.
+ * @param xmlFile the input XML file.
+ */
+ public void setXmlFile(File xmlFile) {
+ this.xmlFile = xmlFile;
+ }
+
+ /**
+ * Gets the input XSLT file.
+ * @return the input XSLT file.
+ */
+ public File getXsltFile() {
+ return xsltFile;
+ }
+
+ /**
+ * Sets the input XSLT file.
+ * @param xsltFile the input XSLT file.
+ */
+ public void setXsltFile(File xsltFile) {
+ this.xsltFile = xsltFile;
+ }
+
+ /**
+ * Gets the XSLT parameters
+ * @return the XSLT parameters
+ */
+ public String getXsltParams() {
+ return xsltParams;
+ }
+
+ /**
+ * Sets the XSLT parameters
+ * @param xsltParams the XSLT parameters
+ */
+ public void setXsltParams(String xsltParams) {
+ this.xsltParams = xsltParams;
+ }
+
+ /**
* Adds a set of XSL-FO files (nested fileset attribute).
* @param set a fileset
*/
@@ -491,10 +543,39 @@ class FOPTaskStarter {
skippedcount++;
}
}
+ } else if (task.getXmlFile() != null && task.getXsltFile() != null) {
+ if (task.getXmlFile().exists() && task.getXsltFile().exists()) {
+ File outf = task.getOutfile();
+ if (outf == null) {
+ throw new BuildException("outfile is required when fofile is used");
+ }
+ if (task.getOutdir() != null) {
+ outf = new File(task.getOutdir(), outf.getName());
+ }
+ // Render if "force" flag is set OR
+ // OR output file doesn't exist OR
+ // output file is older than input file
+ if (task.getForce() || !outf.exists()
+ || (task.getXmlFile().lastModified() > outf.lastModified() ||
+ task.getXsltFile().lastModified() > outf.lastModified())) {
+ render(task.getXmlFile(), task.getXsltFile(), outf, outputFormat);
+ actioncount++;
+ } else if (outf.exists()
+ && (task.getXmlFile().lastModified() <= outf.lastModified() ||
+ task.getXsltFile().lastModified() <= outf.lastModified())) {
+ skippedcount++;
+ }
+ }
}
GlobPatternMapper mapper = new GlobPatternMapper();
- mapper.setFrom("*.fo");
+
+ String inputExtension = ".fo";
+ File xsltFile = task.getXsltFile();
+ if (xsltFile != null) {
+ inputExtension = ".xml";
+ }
+ mapper.setFrom("*" + inputExtension);
mapper.setTo("*" + newExtension);
// deal with the filesets
@@ -507,16 +588,19 @@ class FOPTaskStarter {
File f = new File(fs.getDir(task.getProject()), files[j]);
File outf = null;
- if (task.getOutdir() != null && files[j].endsWith(".fo")) {
+ if (task.getOutdir() != null && files[j].endsWith(inputExtension)) {
String[] sa = mapper.mapFileName(files[j]);
outf = new File(task.getOutdir(), sa[0]);
} else {
- outf = replaceExtension(f, ".fo", newExtension);
+ outf = replaceExtension(f, inputExtension, newExtension);
if (task.getOutdir() != null) {
outf = new File(task.getOutdir(), outf.getName());
}
}
-
+ File dir = outf.getParentFile();
+ if (!dir.exists()) {
+ dir.mkdirs();
+ }
try {
if (task.getRelativebase()) {
this.baseURL = f.getParentFile().toURI().toURL().
@@ -536,7 +620,11 @@ class FOPTaskStarter {
// output file is older than input file
if (task.getForce() || !outf.exists()
|| (f.lastModified() > outf.lastModified() )) {
- render(f, outf, outputFormat);
+ if (xsltFile != null) {
+ render(f, xsltFile, outf, outputFormat);
+ } else {
+ render(f, outf, outputFormat);
+ }
actioncount++;
} else if (outf.exists() && (f.lastModified() <= outf.lastModified() )) {
skippedcount++;
@@ -554,10 +642,7 @@ class FOPTaskStarter {
}
}
- private void render(File foFile, File outFile,
- String outputFormat) throws FOPException {
- InputHandler inputHandler = new InputHandler(foFile);
-
+ private void renderInputHandler(InputHandler inputHandler, File outFile, String outputFormat) throws Exception {
OutputStream out = null;
try {
out = new java.io.FileOutputStream(outFile);
@@ -565,11 +650,6 @@ class FOPTaskStarter {
} catch (Exception ex) {
throw new BuildException("Failed to open " + outFile, ex);
}
-
- if (task.getLogFiles()) {
- task.log(foFile + " -> " + outFile, Project.MSG_INFO);
- }
-
boolean success = false;
try {
FOUserAgent userAgent = fopFactory.newFOUserAgent();
@@ -580,7 +660,7 @@ class FOPTaskStarter {
if (task.getThrowexceptions()) {
throw new BuildException(ex);
}
- logger.error("Error rendering fo file: " + foFile, ex);
+ throw ex;
} finally {
try {
out.close();
@@ -593,5 +673,31 @@ class FOPTaskStarter {
}
}
+ private void render(File foFile, File outFile,
+ String outputFormat) throws FOPException {
+ InputHandler inputHandler = new InputHandler(foFile);
+ try {
+ renderInputHandler(inputHandler, outFile, outputFormat);
+ } catch (Exception ex) {
+ logger.error("Error rendering fo file: " + foFile, ex);
+ }
+ if (task.getLogFiles()) {
+ task.log(foFile + " -> " + outFile, Project.MSG_INFO);
+ }
+ }
+
+ private void render(File xmlFile, File xsltFile, File outFile, String outputFormat) {
+ //TODO: implement support for XSLT params
+ final Vector xsltParams = null;
+ InputHandler inputHandler = new InputHandler(xmlFile, xsltFile, xsltParams);
+ try {
+ renderInputHandler(inputHandler, outFile, outputFormat);
+ } catch (Exception ex) {
+ logger.error("Error rendering xml/xslt files: " + xmlFile + ", " + xsltFile, ex);
+ }
+ if (task.getLogFiles()) {
+ task.log("xml: " + xmlFile + ", xslt: " + xsltFile + " -> " + outFile, Project.MSG_INFO);
+ }
+ }
}