vgritsenko 02/02/08 19:43:01 Modified: src/java/org/apache/cocoon/components/language/markup/xsp/java XSLTExtension.java src/java/org/apache/cocoon/components/language/programming/java AbstractJavaCompiler.java JavaLanguage.java Log: Add static escapeString method to XSLTExtension Remove duplicated method escapeString from JavaCompiler Reformat Revision Changes Path 1.2 +10 -2 xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/java/XSLTExtension.java Index: XSLTExtension.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/java/XSLTExtension.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- XSLTExtension.java 6 Feb 2002 04:40:28 -0000 1.1 +++ XSLTExtension.java 9 Feb 2002 03:43:01 -0000 1.2 @@ -60,7 +60,7 @@ * generation stylesheet to escape XML characters to make a valid Java strings. * * @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a> - * @version CVS $Id: XSLTExtension.java,v 1.1 2002/02/06 04:40:28 vgritsenko Exp $ + * @version CVS $Id: XSLTExtension.java,v 1.2 2002/02/09 03:43:01 vgritsenko Exp $ */ public class XSLTExtension { @@ -68,7 +68,7 @@ * Escapes '"' and '\' characters in a String (add a '\' before them) so that it can * be inserted in java source. */ - public String escape(String string) { + public static String escapeString(String string) { char chr[] = string.toCharArray(); StringBuffer buffer = new StringBuffer(); @@ -94,5 +94,13 @@ } return buffer.toString(); + } + + /** + * Escapes '"' and '\' characters in a String (add a '\' before them) so that it can + * be inserted in java source. + */ + public String escape(String string) { + return escapeString(string); } } 1.5 +164 -164 xml-cocoon2/src/java/org/apache/cocoon/components/language/programming/java/AbstractJavaCompiler.java Index: AbstractJavaCompiler.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/programming/java/AbstractJavaCompiler.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- AbstractJavaCompiler.java 4 Feb 2002 12:22:24 -0000 1.4 +++ AbstractJavaCompiler.java 9 Feb 2002 03:43:01 -0000 1.5 @@ -56,8 +56,8 @@ package org.apache.cocoon.components.language.programming.java; -import org.apache.avalon.excalibur.pool.Recyclable; import org.apache.avalon.framework.logger.AbstractLoggable; +import org.apache.avalon.excalibur.pool.Recyclable; import org.apache.cocoon.components.language.programming.LanguageCompiler; import java.io.BufferedReader; @@ -69,171 +69,171 @@ /** * This class implements the functionality common to all Java compilers. * @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a> - * @version CVS $Id: AbstractJavaCompiler.java,v 1.4 2002/02/04 12:22:24 cziegeler Exp $ + * @version CVS $Id: AbstractJavaCompiler.java,v 1.5 2002/02/09 03:43:01 vgritsenko Exp $ * @since 2.0 */ public abstract class AbstractJavaCompiler extends AbstractLoggable implements LanguageCompiler, Recyclable { - /** - * The source program filename - */ - protected String file; - - /** - * The name of the directory containing the source program file - */ - protected String srcDir; - - /** - * The name of the directory to contain the resulting object program file - */ - protected String destDir; - - /** - * The classpath to be used for compilation - */ - protected String classpath; - - /** - * The encoding of the source program or <code>null</code> to use the - * platform's default encoding - */ - protected String encoding = null; - - /** - * The input stream to output compilation errors - */ - protected InputStream errors; - - /** - * Set the name of the file containing the source program - * - * @param file The name of the file containing the source program - */ - public void setFile(String file) { - this.file = file; - } - - /** - * Set the name of the directory containing the source program file - * - * @param srcDir The name of the directory containing the source program file - */ - public void setSource(String srcDir) { - this.srcDir = srcDir; - } - - /** - * Set the name of the directory to contain the resulting object program file - * - * @param destDir The name of the directory to contain the resulting object - * program file - */ - public void setDestination(String destDir) { - this.destDir = destDir; - } - - /** - * Set the classpath to be used for this compilation - * - * @param classpath The classpath to be used for this compilation - */ - public void setClasspath(String classpath) { - this.classpath = classpath; - } - - /** - * Set the encoding of the input source file or <code>null</code> to use the - * platform's default encoding - * - * @param encoding The encoding of the input source file or <code>null</code> - * to use the platform's default encoding - */ - public void setEncoding(String encoding) { - this.encoding = encoding; - } - - /** - * Return the list of errors generated by this compilation - * - * @return The list of errors generated by this compilation - * @exception IOException If an error occurs during message collection - */ - public List getErrors() throws IOException { - return parseStream(new BufferedReader(new InputStreamReader(errors))); - } - - /** - * Parse the compiler error stream to produce a list of - * <code>CompilerError</code>s - * - * @param errors The error stream - * @return The list of compiler error messages - * @exception IOException If an error occurs during message collection - */ - protected abstract List parseStream(BufferedReader errors) - throws IOException; - - /** - * Fill the arguments taken by the Java compiler - * - * @param argument The list of compilation arguments - * @return The prepared list of compilation arguments - */ - protected List fillArguments(List arguments) { - // destination directory - arguments.add("-d"); - arguments.add(destDir); - - // classpath - arguments.add("-classpath"); - arguments.add(classpath); - - // sourcepath - arguments.add("-sourcepath"); - arguments.add(srcDir); - - // add optimization (for what is worth) - arguments.add("-O"); - - // add encoding if set - if (encoding != null) { - arguments.add("-encoding"); - arguments.add(encoding); - } - - return arguments; - } - - /** - * Copy arguments to a string array - * - * @param arguments The compiler arguments - * @return A string array containing compilation arguments - */ - protected String[] toStringArray(List arguments) { - int i; - String[] args = new String[arguments.size() + 1]; - - for (i = 0; i < arguments.size(); i++) { - args[i] = (String) arguments.get(i); - } - - args[i] = file; - - return args; - } - - /** Reset all internal state. - * This method is called by the component manager before this - * component is return to its pool. - */ - public void recycle() { - file = null; - srcDir = null; - destDir = null; - classpath = null; - encoding = null; - errors = null; - } + /** + * The source program filename + */ + protected String file; + + /** + * The name of the directory containing the source program file + */ + protected String srcDir; + + /** + * The name of the directory to contain the resulting object program file + */ + protected String destDir; + + /** + * The classpath to be used for compilation + */ + protected String classpath; + + /** + * The encoding of the source program or <code>null</code> to use the + * platform's default encoding + */ + protected String encoding = null; + + /** + * The input stream to output compilation errors + */ + protected InputStream errors; + + /** + * Set the name of the file containing the source program + * + * @param file The name of the file containing the source program + */ + public void setFile(String file) { + this.file = file; + } + + /** + * Set the name of the directory containing the source program file + * + * @param srcDir The name of the directory containing the source program file + */ + public void setSource(String srcDir) { + this.srcDir = srcDir; + } + + /** + * Set the name of the directory to contain the resulting object program file + * + * @param destDir The name of the directory to contain the resulting object + * program file + */ + public void setDestination(String destDir) { + this.destDir = destDir; + } + + /** + * Set the classpath to be used for this compilation + * + * @param classpath The classpath to be used for this compilation + */ + public void setClasspath(String classpath) { + this.classpath = classpath; + } + + /** + * Set the encoding of the input source file or <code>null</code> to use the + * platform's default encoding + * + * @param encoding The encoding of the input source file or <code>null</code> + * to use the platform's default encoding + */ + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + /** + * Return the list of errors generated by this compilation + * + * @return The list of errors generated by this compilation + * @exception IOException If an error occurs during message collection + */ + public List getErrors() throws IOException { + return parseStream(new BufferedReader(new InputStreamReader(errors))); + } + + /** + * Parse the compiler error stream to produce a list of + * <code>CompilerError</code>s + * + * @param errors The error stream + * @return The list of compiler error messages + * @exception IOException If an error occurs during message collection + */ + protected abstract List parseStream(BufferedReader errors) + throws IOException; + + /** + * Fill the arguments taken by the Java compiler + * + * @param argument The list of compilation arguments + * @return The prepared list of compilation arguments + */ + protected List fillArguments(List arguments) { + // destination directory + arguments.add("-d"); + arguments.add(destDir); + + // classpath + arguments.add("-classpath"); + arguments.add(classpath); + + // sourcepath + arguments.add("-sourcepath"); + arguments.add(srcDir); + + // add optimization (for what is worth) + arguments.add("-O"); + + // add encoding if set + if (encoding != null) { + arguments.add("-encoding"); + arguments.add(encoding); + } + + return arguments; + } + + /** + * Copy arguments to a string array + * + * @param arguments The compiler arguments + * @return A string array containing compilation arguments + */ + protected String[] toStringArray(List arguments) { + int i; + String[] args = new String[arguments.size() + 1]; + + for (i = 0; i < arguments.size(); i++) { + args[i] = (String) arguments.get(i); + } + + args[i] = file; + + return args; + } + + /** Reset all internal state. + * This method is called by the component manager before this + * component is return to its pool. + */ + public void recycle() { + file = null; + srcDir = null; + destDir = null; + classpath = null; + encoding = null; + errors = null; + } } 1.7 +222 -256 xml-cocoon2/src/java/org/apache/cocoon/components/language/programming/java/JavaLanguage.java Index: JavaLanguage.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/programming/java/JavaLanguage.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- JavaLanguage.java 7 Feb 2002 04:07:28 -0000 1.6 +++ JavaLanguage.java 9 Feb 2002 03:43:01 -0000 1.7 @@ -56,18 +56,17 @@ package org.apache.cocoon.components.language.programming.java; import org.apache.avalon.framework.activity.Disposable; -import org.apache.avalon.framework.component.Component; import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.component.Composable; -import org.apache.avalon.framework.parameters.Parameters; import org.apache.avalon.framework.parameters.ParameterException; +import org.apache.avalon.framework.parameters.Parameters; import org.apache.avalon.framework.thread.ThreadSafe; + import org.apache.cocoon.components.classloader.ClassLoaderManager; import org.apache.cocoon.components.language.LanguageException; -import org.apache.cocoon.components.language.generator.CompiledComponent; +import org.apache.cocoon.components.language.markup.xsp.java.XSLTExtension; import org.apache.cocoon.components.language.programming.CompiledProgrammingLanguage; import org.apache.cocoon.components.language.programming.CompilerError; -import org.apache.cocoon.components.language.programming.Program; import org.apache.cocoon.util.ClassUtils; import org.apache.cocoon.util.JavaArchiveFilter; @@ -80,278 +79,245 @@ * The Java programming language processor * * @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a> - * @version CVS $Id: JavaLanguage.java,v 1.6 2002/02/07 04:07:28 vgritsenko Exp $ + * @version CVS $Id: JavaLanguage.java,v 1.7 2002/02/09 03:43:01 vgritsenko Exp $ */ -public class JavaLanguage extends CompiledProgrammingLanguage implements ThreadSafe, Composable, Disposable { +public class JavaLanguage extends CompiledProgrammingLanguage + implements ThreadSafe, Composable, Disposable { - /** The class loader */ - private ClassLoaderManager classLoaderManager; + /** The class loader */ + private ClassLoaderManager classLoaderManager; - /** The component manager */ - protected ComponentManager manager = null; + /** The component manager */ + protected ComponentManager manager = null; - /** - * Return the language name - * - * @return The language name - */ - public String getName() { - return "java"; - } - - /** - * Return the language's canonical source file extension. - * - * @return The source file extension - */ - public String getSourceExtension() { - return "java"; - } - - /** - * Return the language's canonical object file extension. - * - * @return The object file extension - */ - public String getObjectExtension() { - return "class"; - } - - /** - * Set the configuration parameters. This method instantiates the - * sitemap-specified <code>ClassLoaderManager</code> - * - * @param params The configuration parameters - * @exception Exception If the class loader manager cannot be instantiated - */ - public void parameterize(Parameters params) throws ParameterException { - super.parameterize(params); - - String compilerClass = params.getParameter("class-loader", - "org.apache.cocoon.components.classloader.ClassLoaderManagerImpl"); - if (compilerClass != null) { - try { - this.classLoaderManager = (ClassLoaderManager) ClassUtils.newInstance(compilerClass); - } catch (Exception e) { - throw new ParameterException("Unable to load compiler: " + compilerClass, e); - } + /** + * Return the language's canonical source file extension. + * + * @return The source file extension + */ + public String getSourceExtension() { + return "java"; } - } - /** - * Set the global component manager. This methods initializes the class - * loader manager if it was not (successfully) specified in the language - * parameters - * - * @param manager The global component manager - */ - public void compose(ComponentManager manager) { - this.manager = manager; - if (this.classLoaderManager == null) { - try { - getLogger().debug("Looking up " + ClassLoaderManager.ROLE); - this.classLoaderManager = - (ClassLoaderManager) manager.lookup(ClassLoaderManager.ROLE); - } catch (Exception e) { - getLogger().error("Could not find component", e); - } + /** + * Return the language's canonical object file extension. + * + * @return The object file extension + */ + public String getObjectExtension() { + return "class"; } - } - /** - * Actually load an object program from a class file. - * - * @param filename The object program base file name - * @param baseDirectory The directory containing the object program file - * @return The loaded object program - * @exception LanguageException If an error occurs during loading - */ - protected Class loadProgram(String name, File baseDirectory) - throws LanguageException - { - try { - this.classLoaderManager.addDirectory(baseDirectory); - return - this.classLoaderManager.loadClass(name.replace(File.separatorChar, '.')); - } catch (Exception e) { - getLogger().warn("Could not load class for program '" + name + "'", e); - throw new LanguageException("Could not load class for program '" + name + "' due to a " + e.getClass().getName() + ": " + e.getMessage()); + /** + * Set the configuration parameters. This method instantiates the + * sitemap-specified <code>ClassLoaderManager</code> + * + * @param params The configuration parameters + * @exception Exception If the class loader manager cannot be instantiated + */ + public void parameterize(Parameters params) throws ParameterException { + super.parameterize(params); + + String classLoaderClass = params.getParameter("class-loader", + "org.apache.cocoon.components.classloader.ClassLoaderManagerImpl"); + if (classLoaderClass != null) { + try { + this.classLoaderManager = (ClassLoaderManager) ClassUtils.newInstance(classLoaderClass); + } catch (Exception e) { + throw new ParameterException("Unable to load class loader: " + classLoaderClass, e); + } + } } - } - /** - * Compile a source file yielding a loadable class file. - * - * @param filename The object program base file name - * @param baseDirectory The directory containing the object program file - * @param encoding The encoding expected in the source file or - * <code>null</code> if it is the platform's default encoding - * @exception LanguageException If an error occurs during compilation - */ - protected void compile( - String name, File baseDirectory, String encoding - ) throws LanguageException { - - try { - - AbstractJavaCompiler compiler = (AbstractJavaCompiler) this.compilerClass.newInstance(); - // AbstractJavaCompiler is Loggable - compiler.setLogger(getLogger()); - - int pos = name.lastIndexOf(File.separatorChar); - String filename = name.substring(pos + 1); - String pathname = - baseDirectory.getCanonicalPath() + File.separator + - name.substring(0, pos).replace(File.separatorChar, '/'); - String filename_abs = - new StringBuffer(pathname).append(File.separator).append(filename) - .append(".").append(this.getSourceExtension()).toString(); - - compiler.setFile(filename_abs); - - compiler.setSource(pathname); - - compiler.setDestination(baseDirectory.getCanonicalPath()); - - String systemBootClasspath = System.getProperty("sun.boot.class.path"); - String systemClasspath = System.getProperty("java.class.path"); - String systemExtDirs = System.getProperty("java.ext.dirs"); - String systemExtClasspath = null; - - try { - systemExtClasspath = expandDirs(systemExtDirs); - } catch (Exception e) { - getLogger().warn("Could not expand Directory:" + systemExtDirs, e); - } - - compiler.setClasspath( - baseDirectory.getCanonicalPath() + - ((classpath != null) ? File.pathSeparator + classpath : "") + - ((systemBootClasspath != null) ? File.pathSeparator + systemBootClasspath : "") + - ((systemClasspath != null) ? File.pathSeparator + systemClasspath : "") + - ((systemExtClasspath != null) ? File.pathSeparator + systemExtClasspath : "") - ); - - if (encoding != null) { - compiler.setEncoding(encoding); - } - - getLogger().debug("Compiling " + filename_abs); - - if (!compiler.compile()) { - StringBuffer message = new StringBuffer("Error compiling "); - message.append(filename); - message.append(":\n"); - - List errors = compiler.getErrors(); - int count = errors.size(); - for (int i = 0; i < count; i++) { - CompilerError error = (CompilerError) errors.get(i); - if (i > 0) message.append("\n"); - message.append("Line "); - message.append(error.getStartLine()); - message.append(", column "); - message.append(error.getStartColumn()); - message.append(": "); - message.append(error.getMessage()); + /** + * Set the global component manager. This methods initializes the class + * loader manager if it was not (successfully) specified in the language + * parameters + * + * @param manager The global component manager + */ + public void compose(ComponentManager manager) { + this.manager = manager; + if (this.classLoaderManager == null) { + try { + getLogger().debug("Looking up " + ClassLoaderManager.ROLE); + this.classLoaderManager = + (ClassLoaderManager) manager.lookup(ClassLoaderManager.ROLE); + } catch (Exception e) { + getLogger().error("Could not find component", e); + } } + } + + /** + * Actually load an object program from a class file. + * + * @param filename The object program base file name + * @param baseDirectory The directory containing the object program file + * @return The loaded object program + * @exception LanguageException If an error occurs during loading + */ + protected Class loadProgram(String name, File baseDirectory) + throws LanguageException { + try { + this.classLoaderManager.addDirectory(baseDirectory); + return + this.classLoaderManager.loadClass(name.replace(File.separatorChar, '.')); + } catch (Exception e) { + getLogger().warn("Could not load class for program '" + name + "'", e); + throw new LanguageException("Could not load class for program '" + name + "' due to a " + e.getClass().getName() + ": " + e.getMessage()); + } + } - throw new LanguageException(message.toString()); - } + /** + * Compile a source file yielding a loadable class file. + * + * @param filename The object program base file name + * @param baseDirectory The directory containing the object program file + * @param encoding The encoding expected in the source file or + * <code>null</code> if it is the platform's default encoding + * @exception LanguageException If an error occurs during compilation + */ + protected void compile( + String name, File baseDirectory, String encoding + ) throws LanguageException { - } catch (InstantiationException e) { - getLogger().warn("Could not instantiate the compiler", e); - throw new LanguageException("Could not instantiate the compiler: " + e.getMessage()); - } catch (IllegalAccessException e) { - getLogger().warn("Could not access the compiler class", e); - throw new LanguageException("Could not access the compiler class: " + e.getMessage()); - } catch (IOException e) { - getLogger().warn("Error during compilation", e); - throw new LanguageException("Error during compilation: " + e.getMessage()); + try { + + AbstractJavaCompiler compiler = (AbstractJavaCompiler) this.compilerClass.newInstance(); + // AbstractJavaCompiler is Loggable + compiler.setLogger(getLogger()); + + int pos = name.lastIndexOf(File.separatorChar); + String filename = name.substring(pos + 1); + String pathname = + baseDirectory.getCanonicalPath() + File.separator + + name.substring(0, pos).replace(File.separatorChar, '/'); + String filename_abs = + new StringBuffer(pathname).append(File.separator).append(filename) + .append(".").append(this.getSourceExtension()).toString(); + + compiler.setFile(filename_abs); + + compiler.setSource(pathname); + + compiler.setDestination(baseDirectory.getCanonicalPath()); + + String systemBootClasspath = System.getProperty("sun.boot.class.path"); + String systemClasspath = System.getProperty("java.class.path"); + String systemExtDirs = System.getProperty("java.ext.dirs"); + String systemExtClasspath = null; + + try { + systemExtClasspath = expandDirs(systemExtDirs); + } catch (Exception e) { + getLogger().warn("Could not expand Directory:" + systemExtDirs, e); + } + + compiler.setClasspath( + baseDirectory.getCanonicalPath() + + ((classpath != null) ? File.pathSeparator + classpath : "") + + ((systemBootClasspath != null) ? File.pathSeparator + systemBootClasspath : "") + + ((systemClasspath != null) ? File.pathSeparator + systemClasspath : "") + + ((systemExtClasspath != null) ? File.pathSeparator + systemExtClasspath : "") + ); + + if (encoding != null) { + compiler.setEncoding(encoding); + } + + getLogger().debug("Compiling " + filename_abs); + + if (!compiler.compile()) { + StringBuffer message = new StringBuffer("Error compiling "); + message.append(filename); + message.append(":\n"); + + List errors = compiler.getErrors(); + int count = errors.size(); + for (int i = 0; i < count; i++) { + CompilerError error = (CompilerError) errors.get(i); + if (i > 0) message.append("\n"); + message.append("Line "); + message.append(error.getStartLine()); + message.append(", column "); + message.append(error.getStartColumn()); + message.append(": "); + message.append(error.getMessage()); + } + + throw new LanguageException(message.toString()); + } + + } catch (InstantiationException e) { + getLogger().warn("Could not instantiate the compiler", e); + throw new LanguageException("Could not instantiate the compiler: " + e.getMessage()); + } catch (IllegalAccessException e) { + getLogger().warn("Could not access the compiler class", e); + throw new LanguageException("Could not access the compiler class: " + e.getMessage()); + } catch (IOException e) { + getLogger().warn("Error during compilation", e); + throw new LanguageException("Error during compilation: " + e.getMessage()); + } } - } - /** - * Unload a previously loaded class. This method simply reinstantiates the - * class loader to ensure that a new version of the same class will be - * correctly loaded in a future loading operation - * - * @param program A previously loaded class - * @exception LanguageException If an error occurs during unloading - */ - public void doUnload(Object program) throws LanguageException { - this.classLoaderManager.reinstantiate(); - } - - /** - * Escape a <code>String</code> according to the Java string constant - * encoding rules. - * - * @param constant The string to be escaped - * @return The escaped string - */ - public String quoteString(String constant) { - char chr[] = constant.toCharArray(); - StringBuffer buffer = new StringBuffer(); - - for (int i = 0; i < chr.length; i++) { - switch (chr[i]) { - case '\t': - buffer.append("\\t"); - break; - case '\r': - buffer.append("\\r"); - break; - case '\n': - buffer.append("\\n"); - break; - case '"': - case '\\': - buffer.append('\\'); - // Fall through - default: - buffer.append(chr[i]); - break; - } + /** + * Unload a previously loaded class. This method simply reinstantiates the + * class loader to ensure that a new version of the same class will be + * correctly loaded in a future loading operation + * + * @param program A previously loaded class + * @exception LanguageException If an error occurs during unloading + */ + public void doUnload(Object program) throws LanguageException { + this.classLoaderManager.reinstantiate(); } - return buffer.toString(); - } + /** + * Escape a <code>String</code> according to the Java string constant + * encoding rules. + * + * @param constant The string to be escaped + * @return The escaped string + */ + public String quoteString(String constant) { + return XSLTExtension.escapeString(constant); + } - /** - * Expand a directory path or list of directory paths (File.pathSeparator - * delimited) into a list of file paths of all the jar files in those - * directories. - * - * @param dirPaths The string containing the directory path or list of - * directory paths. - * @return The file paths of the jar files in the directories. This is an - * empty string if no files were found, and is terminated by an - * additional pathSeparator in all other cases. - */ - private String expandDirs(String dirPaths) throws LanguageException { - StringTokenizer st = new StringTokenizer(dirPaths, File.pathSeparator); - StringBuffer buffer = new StringBuffer(); - while (st.hasMoreTokens()) { - String d = st.nextToken(); - File dir = new File(d); - if ( ! dir.isDirectory() ) { - // The absence of a listed directory may not be an error. - if (getLogger().isWarnEnabled()) getLogger().warn("Attempted to retrieve directory listing of non-directory " + dir.toString()); - } else { - File[] files = dir.listFiles(new JavaArchiveFilter()); - for (int i = 0; i < files.length; i++) { - buffer.append(files[i]).append(File.pathSeparator); + /** + * Expand a directory path or list of directory paths (File.pathSeparator + * delimited) into a list of file paths of all the jar files in those + * directories. + * + * @param dirPaths The string containing the directory path or list of + * directory paths. + * @return The file paths of the jar files in the directories. This is an + * empty string if no files were found, and is terminated by an + * additional pathSeparator in all other cases. + */ + private String expandDirs(String dirPaths) throws LanguageException { + StringTokenizer st = new StringTokenizer(dirPaths, File.pathSeparator); + StringBuffer buffer = new StringBuffer(); + while (st.hasMoreTokens()) { + String d = st.nextToken(); + File dir = new File(d); + if (!dir.isDirectory()) { + // The absence of a listed directory may not be an error. + if (getLogger().isWarnEnabled()) getLogger().warn("Attempted to retrieve directory listing of non-directory " + dir.toString()); + } else { + File[] files = dir.listFiles(new JavaArchiveFilter()); + for (int i = 0; i < files.length; i++) { + buffer.append(files[i]).append(File.pathSeparator); + } } } + return buffer.toString(); } - return buffer.toString(); - } - /** - * dispose - */ - public void dispose() { - manager.release(this.classLoaderManager); - } + /** + * dispose + */ + public void dispose() { + manager.release(this.classLoaderManager); + } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]