diff options
author | Adrian Cumiskey <acumiskey@apache.org> | 2009-10-23 11:22:53 +0000 |
---|---|---|
committer | Adrian Cumiskey <acumiskey@apache.org> | 2009-10-23 11:22:53 +0000 |
commit | 435baa8edfb4cf4d6662d63fafc346ef1448c38b (patch) | |
tree | 4b04bf3ebe865695cf67de987e380a6dea7863c0 /src | |
parent | 3d7231bbc784a0b8802e39bb3b38f5787573d80b (diff) | |
download | xmlgraphics-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.xml | 35 | ||||
-rw-r--r-- | src/java/org/apache/fop/tools/anttasks/Fop.java | 138 |
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); + } + } } |