Fields Summary |
---|
public static final String | FRAMESname of the frames format. |
public static final String | NOFRAMESname of the no frames format. |
protected org.apache.tools.ant.Task | taskTask |
protected Document | documentthe xml document to process |
protected File | styleDirthe style directory. XSLs should be read from here if necessary |
protected File | toDirthe destination directory, this is the root from where html should be generated |
private List | paramsThe params that will be sent to the XSL transformation |
private static final org.apache.tools.ant.util.FileUtils | FILE_UTILSInstance of a utility class to use for file operations. |
private static int | counterUsed to ensure the uniqueness of a property |
protected String | formatthe format to use for the report. Must be FRAMES or NOFRAMES |
private static DocumentBuilderFactory | privateDBFactoryXML Parser factory |
protected static DocumentBuilderFactory | dbfactoryXML Parser factory accessible to subclasses |
Methods Summary |
---|
protected void | checkOptions()check for invalid options
// set the destination directory relative from the project if needed.
if (toDir == null) {
toDir = task.getProject().resolveFile(".");
} else if (!toDir.isAbsolute()) {
toDir = task.getProject().resolveFile(toDir.getPath());
}
|
public XSLTProcess.Param | createParam()Create an instance of an XSL parameter for configuration by Ant.
XSLTProcess.Param p = new XSLTProcess.Param();
params.add(p);
return p;
|
protected static javax.xml.parsers.DocumentBuilderFactory | getDocumentBuilderFactory()Get the Document Builder Factory
return privateDBFactory;
|
protected org.apache.tools.ant.types.Resource | getStylesheet()access the stylesheet to be used as a resource.
String xslname = "junit-frames.xsl";
if (NOFRAMES.equals(format)) {
xslname = "junit-noframes.xsl";
}
if (styleDir == null) {
// If style dir is not specified we have to retrieve
// the stylesheet from the classloader
URLResource stylesheet = new URLResource();
URL stylesheetURL = getClass().getClassLoader().getResource(
"org/apache/tools/ant/taskdefs/optional/junit/xsl/" + xslname);
stylesheet.setURL(stylesheetURL);
return stylesheet;
}
// If we are here, then the style dir is here and we
// should read the stylesheet from the filesystem
FileResource stylesheet = new FileResource();
File stylesheetFile = new File(styleDir, xslname);
stylesheet.setFile(stylesheetFile);
return stylesheet;
|
protected java.lang.String | getStylesheetSystemId()Get the systemid of the appropriate stylesheet based on its
name and styledir. If no styledir is defined it will load
it as a java resource in the xsl child package, otherwise it
will get it from the given directory.
String xslname = "junit-frames.xsl";
if (NOFRAMES.equals(format)) {
xslname = "junit-noframes.xsl";
}
if (styleDir == null) {
URL url = getClass().getResource("xsl/" + xslname);
if (url == null) {
throw new FileNotFoundException("Could not find jar resource " + xslname);
}
return url.toExternalForm();
}
File file = new File(styleDir, xslname);
if (!file.exists()) {
throw new FileNotFoundException("Could not find file '" + file + "'");
}
return JAXPUtils.getSystemId(file);
|
public void | setExtension(java.lang.String ext)set the extension of the output files
task.log("extension is not used anymore", Project.MSG_WARN);
|
public void | setFormat(org.apache.tools.ant.taskdefs.optional.junit.AggregateTransformer$Format format)sets the format.
this.format = format.getValue();
|
public void | setStyledir(java.io.File styledir)set the style directory. It is optional and will override the
default xsl used.
this.styleDir = styledir;
|
public void | setTodir(java.io.File todir)set the destination directory.
this.toDir = todir;
|
public void | setXmlDocument(org.w3c.dom.Document doc)sets the input document.
this.document = doc;
|
protected void | setXmlfile(java.io.File xmlfile)Set the xml file to be processed. This is a helper if you want
to set the file directly. Much more for testing purposes.
try {
DocumentBuilder builder = privateDBFactory.newDocumentBuilder();
InputStream in = new FileInputStream(xmlfile);
try {
Document doc = builder.parse(in);
setXmlDocument(doc);
} finally {
in.close();
}
} catch (Exception e) {
throw new BuildException("Error while parsing document: " + xmlfile, e);
}
|
public void | transform()transformation
checkOptions();
Project project = task.getProject();
TempFile tempFileTask = new TempFile();
tempFileTask.bindToOwner(task);
XSLTProcess xsltTask = new XSLTProcess();
xsltTask.bindToOwner(task);
xsltTask.setXslResource(getStylesheet());
// acrobatic cast.
xsltTask.setIn(((XMLResultAggregator) task).getDestinationFile());
File outputFile = null;
if (format.equals(FRAMES)) {
String tempFileProperty = getClass().getName() + String.valueOf(counter++);
File tmp = FILE_UTILS.resolveFile(project.getBaseDir(),
project.getProperty("java.io.tmpdir"));
tempFileTask.setDestDir(tmp);
tempFileTask.setProperty(tempFileProperty);
tempFileTask.execute();
outputFile = new File(project.getProperty(tempFileProperty));
} else {
outputFile = new File(toDir, "junit-noframes.html");
}
xsltTask.setOut(outputFile);
for (Iterator i = params.iterator(); i.hasNext();) {
XSLTProcess.Param param = (XSLTProcess.Param) i.next();
XSLTProcess.Param newParam = xsltTask.createParam();
newParam.setProject(task.getProject());
newParam.setName(param.getName());
newParam.setExpression(param.getExpression());
}
XSLTProcess.Param paramx = xsltTask.createParam();
paramx.setProject(task.getProject());
paramx.setName("output.dir");
paramx.setExpression(toDir.getAbsolutePath());
final long t0 = System.currentTimeMillis();
try {
xsltTask.execute();
} catch (Exception e) {
throw new BuildException("Errors while applying transformations: "
+ e.getMessage(), e);
}
final long dt = System.currentTimeMillis() - t0;
task.log("Transform time: " + dt + "ms");
if (format.equals(FRAMES)) {
Delete delete = new Delete();
delete.bindToOwner(task);
delete.setFile(outputFile);
delete.execute();
}
|