Dave Emerson
59d58 < import java.util.StringTokenizer; 66a66 > import org.apache.tools.ant.types.FileSet; 120a121,122 > private String dirEncodingStr = "_"; // the string used to encode > directories under the package > private String fileEncodingStr = "_"; //the string used to encode class > file names 121a124,126 > private FileSet aFileSet; // a single fileset element to use for > excludes. > private boolean flagVerbose = false; // verbose jspc and javac. > private String compilerEXE; // executable for a compiler - use for jikes > or others 124,126d128 < private String pathToPackage = ""; < private Vector filesToDo = new Vector(); < 142,144c144,146 < < pathToPackage < = this.destinationPackage.replace('.', File.separatorChar); --- > log("Source directory = " + sourceDirectory.getAbsolutePath().trim()); > log("Destination directory = " + > destinationDirectory.getAbsolutePath().trim()); > String[] filesToDo = scanDir(); 145,146d146 < // get all the files in the sourceDirectory < DirectoryScanner ds = super.getDirectoryScanner(sourceDirectory); 152d151 < 154d152 < String[] files = ds.getIncludedFiles(); 164c162 < String[] args = new String[12]; --- > Vector args = new Vector(); 168c166 < int j = 0; --- > 170,174c168,172 < args[j++] = "-d"; < args[j++] = destinationDirectory.getAbsolutePath().trim(); < args[j++] = "-docroot"; < args[j++] = sourceDirectory.getAbsolutePath().trim(); < args[j++] = "-keepgenerated"; //TODO: Parameterise ?? --- > args.add("-d"); > args.add(destinationDirectory.getAbsolutePath().trim()); > args.add("-docroot"); > args.add(sourceDirectory.getAbsolutePath().trim()); > args.add("-keepgenerated"); //TODO: Parameterise ?? 174a173,177 > > if (flagVerbose){ > args.add("-verbose"); //TODO: Parameterise ?? > args.add("-verboseJavac"); //TODO: Parameterise ?? > } 177,178c180,181 < args[j++] = "-compilerclass"; < args[j++] = "sun.tools.javac.Main"; --- > if (null != compilerEXE) { > args.add("-compiler"); 178a182,188 > args.add(compilerEXE); > } > else { > args.add("-compilerclass"); > args.add("sun.tools.javac.Main"); > } > 182,183c192,193 < args[j++] = "-classpath"; < args[j++] = compileClasspath.toString(); --- > args.add("-classpath"); > args.add(compileClasspath.toString()); 183a194,203 > // args.add("-bootclasspath"); > // args.add(compileClasspath.toString()); > > args.add("-package"); > args.add(destinationPackage); > > for (int i = 0; i < filesToDo.length; i++) { > if (null != filesToDo[i]) { > String filename = sourceDirectory + File.separator + > filesToDo[i]; > log("Compiling " + filename); 185,205d204 < this.scanDir(files); < log("Compiling " + filesToDo.size() + " JSP files"); < < for (int i = 0; i < filesToDo.size(); i++) { < //XXX < // 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; 207,208c206,207 < < for (int x = 0; x < j + 3; x++) { --- > for (int x = 0; x < args.size(); x++) { > helperTask.createArg().setValue((String)args.get(x)); 209d207 < helperTask.createArg().setValue(args[x]); 210a209 > helperTask.createArg().setValue(filename); 218c217 < --- > } 242a242,245 > public void addFileSet(FileSet fileset) { > aFileSet = fileset; > } > 250d252 < 254,256c256,258 < /** < * Set the directory containing the source jsp's < * --- > > /** Getter for property destinationDirectory. > * @return Value of property destinationDirectory. 258d259 < * @param dirName the directory containg the source jsp's 260c261 < public void setDest(File dirName) { --- > public File getDest() { 260a262,263 > return destinationDirectory; > } 262c265 < destinationDirectory = dirName; --- > /** Setter for property destinationDirectory. 262a266,270 > * @param destinationDirectory New value of property destinationDirectory. > * > */ > public void setDest(File destinationDirectory) { > this.destinationDirectory = destinationDirectory; 271d278 < 274a282,340 > /** Get the string used to encode directory names > * under the destination package. > * > */ > public java.lang.String getDirEncodingStr() { > return dirEncodingStr; > } > > /** Set the string used to encode directory names > * under the destination package. > * > */ > public void setDirEncodingStr(String dirEncodingStr) { > this.dirEncodingStr = dirEncodingStr; > } > > /** Get the string used to encode class file names. > */ > public java.lang.String getFileEncodingStr() { > return fileEncodingStr; > } > > /** Set the string used to encode class file names. > * Weblogic varies the string used to encode class file > * names depending on the version and service pack. This > * defaults to "_" and would typically be set to "__" > * if your release of weblogic uses that instead. > */ > public void setFileEncodingStr(String fileEncodingStr) { > this.fileEncodingStr = fileEncodingStr; > } > > /** Get property flagVerbose. > */ > public boolean getVerbose() { > return flagVerbose; > } > > /** Sets both verbose jspc and javac on for weblogic.jspc. > */ > public void setVerbose(boolean flagVerbose) { > this.flagVerbose = flagVerbose; > } > > /** Get name of an external compiler to be called by weblogic.jspc. > * @return compilerEXE External compiler (i.e jikes.exe or others). > * > */ > public String getCompilerEXE() { > return compilerEXE; > } > > /** Set name of an external compiler to be called by weblogic.jspc. > * @param compilerEXE External compiler (i.e jikes.exe or others). > * > */ > public void setCompilerEXE(String compilerEXE) { > this.compilerEXE = compilerEXE; > } 275a342 > protected String[] scanDir() { 277c344 < protected void scanDir(String files[]) { --- > // get all the files to compare 277a345,355 > DirectoryScanner dsSource; > if (null == aFileSet) > dsSource = super.getDirectoryScanner(sourceDirectory); > else > dsSource = aFileSet.getDirectoryScanner(getProject()); > > String[] inclSource = {"**\\*.jsp"}; > dsSource.setIncludes(inclSource); > dsSource.setCaseSensitive(true); > dsSource.scan(); > String[] files = dsSource.getIncludedFiles(); 281,282c359,360 < String parents = null; < String pack = ""; --- > File classFile = null; > String destRelPath = null; 282a361 > 284,296d362 < File srcFile = new File(this.sourceDirectory, files[i]); < //XXX < // 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; < } 298,304c364,370 < 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); --- > int count = countMatches(files[i], File.separator); > if (0 == count){ > destRelPath = getFileEncodingStr() + files[i]; > } > else if (1 == count) { > destRelPath = getDirEncodingStr() + > replace(files[i], File.separator, File.separator + > getFileEncodingStr(), -1); 305d370 < continue; 306a372,374 > else { > destRelPath = getDirEncodingStr() + > replace(files[i], File.separator, File.separator + > getDirEncodingStr(), -1); 308,310c376,378 < filePath += files[i].substring(startingIndex, endingIndex); < filePath += ".class"; < File classFile = new File(this.destinationDirectory, filePath); --- > String strSearch = File.separator + getDirEncodingStr(); > int idxStart = destRelPath.lastIndexOf(strSearch); > int idxEnd = idxStart + strSearch.length(); 310a379,395 > destRelPath = overlayString(destRelPath, > File.separator + getFileEncodingStr(), > idxStart,idxEnd > ); > } > destRelPath = replace(destRelPath, ".jsp", ".class", 1); > classFile = new File(this.destinationDirectory + File.separator + > destinationPackage, destRelPath); > if (classFile.exists()){ > jspFile = new File(this.sourceDirectory, files[i]); > if (jspFile.lastModified() <= classFile.lastModified()) { > log("Class " + classFile + " is up to date, skipping.", > Project.MSG_VERBOSE); > files[i] = null; > } > } > } > return files; > } 312,314c397,399 < if (srcFile.lastModified() > now) { < log("Warning: file modified in the future: " + < files[i], Project.MSG_WARN); --- > // These methods were shamelessly "stolen" from > org.apache.commons.lang.StringUtils > // to avoid a dependancy on the package for just these few methods. > public static String replace(String text, String repl, String with, 314a400,402 > int max) { > if (text == null) { > return null; 316,319c404,407 < if (srcFile.lastModified() > classFile.lastModified()) { < //log("Files are" + srcFile.getAbsolutePath()+" " +classFile.getAbsolutePath()); < filesToDo.addElement(files[i]); < log("Recompiling File " + files[i], Project.MSG_VERBOSE); --- > > StringBuffer buf = new StringBuffer(text.length()); > int start = 0, end = 0; > while ((end = text.indexOf(repl, start)) != -1) { 319a408,412 > buf.append(text.substring(start, end)).append(with); > start = end + repl.length(); > > if (--max == 0) { > break; 321a415,416 > buf.append(text.substring(start)); > return buf.toString(); 323a419,425 > public static String overlayString(String text, String overlay, int > start, int end) { > return new StringBuffer(start + overlay.length() + text.length() - > end + 1) > .append(text.substring(0, start)) > .append(overlay) > .append(text.substring(end)) > .toString(); > } 325,327c427,429 < protected String replaceString(String inpString, String escapeChars, < String replaceChars) { < String localString = ""; --- > public static int countMatches(String str, String sub) { > if (str == null) { > return 0; 328,334d429 < 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; 336c431 < return localString; --- > int count = 0; 336a432,435 > int idx = 0; > while ((idx = str.indexOf(sub, idx)) != -1) { > count++; > idx += sub.length(); 337a437,439 > return count; > } >
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>