diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java | 334 |
1 files changed, 0 insertions, 334 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java deleted file mode 100644 index 45a427ad..00000000 --- a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java +++ /dev/null @@ -1,334 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.tools.ant.taskdefs.optional.jsp; - -//apache/ant imports -import java.io.File; -import java.util.Date; -import java.util.StringTokenizer; -import java.util.Vector; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.taskdefs.MatchingTask; -import org.apache.tools.ant.types.Path; - -/** - * Precompiles JSP's using WebLogic's JSP compiler (weblogic.jspc). - * - * Tested only on Weblogic 4.5.1 - NT4.0 and Solaris 5.7 - * - * required attributes - * src : root of source tree for JSP, ie, the document root for your weblogic server - * dest : root of destination directory, what you have set as - * WorkingDir in the weblogic properties - * package : start package name under which your JSP's would be compiled - * - * other attributes - * classpath - * - * A classpath should be set which contains the weblogic classes as well as all - * application classes referenced by the JSP. The system classpath is also - * appended when the jspc is called, so you may choose to put everything in - * the classpath while calling Ant. However, since presumably the JSP's will - * reference classes being build by Ant, it would be better to explicitly add - * the classpath in the task - * - * The task checks timestamps on the JSP's and the generated classes, and compiles - * only those files that have changed. - * - * It follows the weblogic naming convention of putting classes in - * <b> _dirName/_fileName.class for dirname/fileName.jsp </b> - * - * Limitation: It compiles the files thru the Classic compiler only. - * Limitation: Since it is my experience that weblogic jspc throws out of - * memory error on being given too many files at one go, it is - * called multiple times with one jsp file each. - * - * <pre> - * example - * <target name="jspcompile" depends="compile"> - * <wljspc src="c:\\weblogic\\myserver\\public_html" - * dest="c:\\weblogic\\myserver\\serverclasses" package="myapp.jsp"> - * <classpath> - * <pathelement location="${weblogic.classpath}" /> - * <pathelement path="${compile.dest}" /> - * </classpath> - * - * </wljspc> - * </target> - * </pre> - * - */ - -public class WLJspc extends MatchingTask { - //TODO Test on other versions of weblogic - //TODO add more attributes to the task, to take care of all jspc options - //TODO Test on Unix - - /** root of compiled files tree */ - private File destinationDirectory; - - /** root of source files tree */ - private File sourceDirectory; - - /** package under which resultant classes will reside */ - private String destinationPackage; - - /** classpath used to compile the jsp files. */ - private Path compileClasspath; - - //private String compilerPath; //fully qualified name for the compiler executable - - private String pathToPackage = ""; - private Vector filesToDo = new Vector(); - - /** - * Run the task. - * @throws BuildException if there is an error. - */ - public void execute() throws BuildException { - if (!destinationDirectory.isDirectory()) { - throw new BuildException("destination directory " - + destinationDirectory.getPath() + " is not valid"); - } - - if (!sourceDirectory.isDirectory()) { - throw new BuildException("src directory " - + sourceDirectory.getPath() + " is not valid"); - } - - if (destinationPackage == null) { - throw new BuildException("package attribute must be present.", - getLocation()); - } - - - pathToPackage - = this.destinationPackage.replace('.', File.separatorChar); - // get all the files in the sourceDirectory - DirectoryScanner ds = super.getDirectoryScanner(sourceDirectory); - - //use the systemclasspath as well, to include the ant jar - if (compileClasspath == null) { - compileClasspath = new Path(getProject()); - } - - compileClasspath = compileClasspath.concatSystemClasspath(); - String[] files = ds.getIncludedFiles(); - - //Weblogic.jspc calls System.exit() ... have to fork - // Therefore, takes loads of time - // Can pass directories at a time (*.jsp) but easily runs out of - // memory on hefty dirs (even on a Sun) - Java helperTask = new Java(this); - helperTask.setFork(true); - helperTask.setClassname("weblogic.jspc"); - helperTask.setTaskName(getTaskName()); - // CheckStyle:MagicNumber OFF - String[] args = new String[12]; - // CheckStyle:MagicNumber ON - - File jspFile = null; - String parents = ""; - int j = 0; - //TODO this array stuff is a remnant of prev trials.. gotta remove. - args[j++] = "-d"; - args[j++] = destinationDirectory.getAbsolutePath().trim(); - args[j++] = "-docroot"; - args[j++] = sourceDirectory.getAbsolutePath().trim(); - args[j++] = "-keepgenerated"; - //Call compiler as class... dont want to fork again - //Use classic compiler -- can be parameterised? - args[j++] = "-compilerclass"; - args[j++] = "sun.tools.javac.Main"; - //Weblogic jspc does not seem to work unless u explicitly set this... - // Does not take the classpath from the env.... - // Am i missing something about the Java task?? - args[j++] = "-classpath"; - args[j++] = compileClasspath.toString(); - - this.scanDir(files); - log("Compiling " + filesToDo.size() + " JSP files"); - - final int size = filesToDo.size(); - for (int i = 0; i < size; i++) { - //TODO - // All this to get package according to weblogic standards - // Can be written better... this is too hacky! - // Careful.. similar code in scanDir , but slightly different!! - String filename = (String) filesToDo.elementAt(i); - jspFile = new File(filename); - args[j] = "-package"; - parents = jspFile.getParent(); - if ((parents != null) && (!("").equals(parents))) { - parents = this.replaceString(parents, File.separator, "_."); - args[j + 1] = destinationPackage + "." + "_" + parents; - } else { - args[j + 1] = destinationPackage; - } - - - args[j + 2] = sourceDirectory + File.separator + filename; - helperTask.clearArgs(); - - // CheckStyle:MagicNumber OFF - for (int x = 0; x < j + 3; x++) { - helperTask.createArg().setValue(args[x]); - } - // CheckStyle:MagicNumber ON - - helperTask.setClasspath(compileClasspath); - if (helperTask.executeJava() != 0) { - log(filename + " failed to compile", Project.MSG_WARN); - } - } - } - - - - /** - * Set the classpath to be used for this compilation. - * @param classpath the classpath to use. - */ - public void setClasspath(Path classpath) { - if (compileClasspath == null) { - compileClasspath = classpath; - } else { - compileClasspath.append(classpath); - } - } - - /** - * Maybe creates a nested classpath element. - * @return a path to be configured. - */ - public Path createClasspath() { - if (compileClasspath == null) { - compileClasspath = new Path(getProject()); - } - return compileClasspath; - } - - /** - * Set the directory containing the source jsp's - * - * - * @param dirName the directory containg the source jsp's - */ - public void setSrc(File dirName) { - - sourceDirectory = dirName; - } - - /** - * Set the directory containing the source jsp's - * - * - * @param dirName the directory containg the source jsp's - */ - public void setDest(File dirName) { - - destinationDirectory = dirName; - } - - /** - * Set the package under which the compiled classes go - * - * @param packageName the package name for the classes - */ - public void setPackage(String packageName) { - - destinationPackage = packageName; - } - - /** - * Scan the array of files and add the jsp - * files that need to be compiled to the filesToDo field. - * @param files the files to scan. - */ - protected void scanDir(String[] files) { - - long now = (new Date()).getTime(); - File jspFile = null; - String parents = null; - String pack = ""; - for (int i = 0; i < files.length; i++) { - File srcFile = new File(this.sourceDirectory, files[i]); - //TODO - // All this to convert source to destination directory according - // to weblogic standards Can be written better... this is too hacky! - jspFile = new File(files[i]); - parents = jspFile.getParent(); - - if ((parents != null) && (!("").equals(parents))) { - parents = this.replaceString(parents, File.separator, "_/"); - pack = pathToPackage + File.separator + "_" + parents; - } else { - pack = pathToPackage; - } - - String filePath = pack + File.separator + "_"; - int startingIndex = files[i].lastIndexOf(File.separator) != -1 - ? files[i].lastIndexOf(File.separator) + 1 : 0; - int endingIndex = files[i].indexOf(".jsp"); - if (endingIndex == -1) { - log("Skipping " + files[i] + ". Not a JSP", - Project.MSG_VERBOSE); - continue; - } - - filePath += files[i].substring(startingIndex, endingIndex); - filePath += ".class"; - File classFile = new File(this.destinationDirectory, filePath); - - if (srcFile.lastModified() > now) { - log("Warning: file modified in the future: " - + files[i], Project.MSG_WARN); - } - if (srcFile.lastModified() > classFile.lastModified()) { - filesToDo.addElement(files[i]); - log("Recompiling File " + files[i], Project.MSG_VERBOSE); - } - } - } - - - /** - * Replace occurrences of a string with a replacement string. - * @param inpString the string to convert. - * @param escapeChars the string to replace. - * @param replaceChars the string to place. - * @return the converted string. - */ - protected String replaceString(String inpString, String escapeChars, - String replaceChars) { - String localString = ""; - int numTokens = 0; - StringTokenizer st = new StringTokenizer(inpString, escapeChars, true); - numTokens = st.countTokens(); - for (int i = 0; i < numTokens; i++) { - String test = st.nextToken(); - test = (test.equals(escapeChars) ? replaceChars : test); - localString += test; - } - return localString; - } -} |