You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2001/04/03 14:37:32 UTC
cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs XSLTProcess.java
bodewig 01/04/03 05:37:32
Modified: src/main/org/apache/tools/ant/taskdefs XSLTProcess.java
Log:
Don't parse the XSLT stylesheet unless we know a file is going to be
transformed. This should improve performance in cases where the
generated files are up to date significantly.
Revision Changes Path
1.20 +51 -36 jakarta-ant/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
Index: XSLTProcess.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- XSLTProcess.java 2001/03/19 12:27:23 1.19
+++ XSLTProcess.java 2001/04/03 12:37:31 1.20
@@ -84,7 +84,8 @@
* @author <a href="mailto:kvisco@exoffice.com">Keith Visco</a>
* @author <a href="mailto:rubys@us.ibm.com">Sam Ruby</a>
* @author <a href="mailto:russgold@acm.org">Russell Gold</a>
- * @version $Revision: 1.19 $ $Date: 2001/03/19 12:27:23 $
+ * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
+ * @version $Revision: 1.20 $ $Date: 2001/04/03 12:37:31 $
*/
public class XSLTProcess extends MatchingTask {
@@ -102,6 +103,7 @@
private File outFile = null;
private XSLTLiaison liaison;
+ private boolean stylesheetLoaded = false;
/**
* Creates a new XSLTProcess Task.
@@ -118,47 +120,33 @@
String[] list;
String[] dirs;
+ if (xslFile == null) {
+ throw new BuildException("no stylesheet specified", location);
+ }
+
if (baseDir == null) {
baseDir = project.resolveFile(".");
}
liaison = getLiaison();
log("Using "+liaison.getClass().toString(), Project.MSG_VERBOSE);
-
- long styleSheetLastModified = 0;
- if (xslFile != null) {
- try {
- File file = project.resolveFile(xslFile, project.getBaseDir());
- if (!file.exists()) {
- file = project.resolveFile(xslFile, baseDir);
- /*
- * shouldn't throw out deprectaion warnings before we know,
- * the wrong version has been used.
- */
- if (file.exists()) {
- log("DEPRECATED - the style attribute should be relative to the project\'s");
- log(" basedir, not the tasks\'s basedir.");
- }
- }
-
- // Create a new XSL processor with the specified stylesheet
- styleSheetLastModified = file.lastModified();
- log( "Loading stylesheet " + file, Project.MSG_INFO);
- liaison.setStylesheet( file.toString() );
- for(Enumeration e = params.elements();e.hasMoreElements();) {
- Param p = (Param)e.nextElement();
- liaison.addParam( p.getName(), p.getExpression() );
- }
- } catch (Exception ex) {
- log("Failed to read stylesheet " + xslFile, Project.MSG_INFO);
- throw new BuildException(ex);
+ File stylesheet = project.resolveFile(xslFile, project.getBaseDir());
+ if (!stylesheet.exists()) {
+ stylesheet = project.resolveFile(xslFile, baseDir);
+ /*
+ * shouldn't throw out deprecation warnings before we know,
+ * the wrong version has been used.
+ */
+ if (stylesheet.exists()) {
+ log("DEPRECATED - the style attribute should be relative to the project\'s");
+ log(" basedir, not the tasks\'s basedir.");
}
}
// if we have an in file and out then process them
if (inFile != null && outFile != null) {
- process(inFile, outFile, styleSheetLastModified);
+ process(inFile, outFile, stylesheet);
return;
}
@@ -178,7 +166,7 @@
// Process all the files marked for styling
list = scanner.getIncludedFiles();
for (int i = 0;i < list.length; ++i) {
- process( baseDir, list[i], destDir, styleSheetLastModified );
+ process( baseDir, list[i], destDir, stylesheet );
}
// Process all the directoried marked for styling
@@ -186,7 +174,7 @@
for (int j = 0;j < dirs.length;++j){
list=new File(baseDir,dirs[j]).list();
for (int i = 0;i < list.length;++i)
- process( baseDir, list[i], destDir, styleSheetLastModified );
+ process( baseDir, list[i], destDir, stylesheet );
}
} //-- execute
@@ -211,7 +199,7 @@
* @param name the extension to use
**/
public void setExtension(String name) {
- targetExtension = name;
+ targetExtension = name;
} //-- setDestDir
/**
@@ -261,14 +249,15 @@
* in the given resultFile.
**/
private void process(File baseDir, String xmlFile, File destDir,
- long styleSheetLastModified)
+ File stylesheet)
throws BuildException {
String fileExt=targetExtension;
File outFile=null;
File inFile=null;
-
+
try {
+ long styleSheetLastModified = stylesheet.lastModified();
inFile = new File(baseDir,xmlFile);
int dotPos = xmlFile.lastIndexOf('.');
if(dotPos>0){
@@ -281,6 +270,7 @@
ensureDirectoryFor( outFile );
log("Transforming into "+destDir);
+ configureLiaison(stylesheet);
liaison.transform(inFile.toString(), outFile.toString());
}
}
@@ -297,8 +287,9 @@
} //-- processXML
- private void process(File inFile, File outFile, long styleSheetLastModified) throws BuildException {
+ private void process(File inFile, File outFile, File stylesheet) throws BuildException {
try{
+ long styleSheetLastModified = stylesheet.lastModified();
log("In file "+inFile+" time: " + inFile.lastModified() , Project.MSG_DEBUG);
log("Out file "+outFile+" time: " + outFile.lastModified() , Project.MSG_DEBUG);
log("Style file "+xslFile+" time: " + styleSheetLastModified , Project.MSG_DEBUG);
@@ -306,6 +297,7 @@
styleSheetLastModified > outFile.lastModified()) {
ensureDirectoryFor( outFile );
log("Processing " + inFile + " to " + outFile, Project.MSG_INFO);
+ configureLiaison(stylesheet);
liaison.transform(inFile.toString(), outFile.toString());
}
}catch (Exception ex) {
@@ -374,4 +366,27 @@
return expression;
}
}
+
+ /**
+ * Loads the stylesheet and set xsl:param parameters.
+ */
+ protected void configureLiaison(File stylesheet) throws BuildException {
+ if (stylesheetLoaded) {
+ return;
+ }
+ stylesheetLoaded = true;
+
+ try {
+ log( "Loading stylesheet " + stylesheet, Project.MSG_INFO);
+ liaison.setStylesheet( stylesheet.toString() );
+ for(Enumeration e = params.elements();e.hasMoreElements();) {
+ Param p = (Param)e.nextElement();
+ liaison.addParam( p.getName(), p.getExpression() );
+ }
+ } catch (Exception ex) {
+ log("Failed to read stylesheet " + stylesheet, Project.MSG_INFO);
+ throw new BuildException(ex);
+ }
+ }
+
} //-- XSLTProcess