KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > clazzy > CompositeClassLoaderBuilder


1 package org.sapia.clazzy;
2
3 import java.io.File JavaDoc;
4 import java.util.StringTokenizer JavaDoc;
5
6 import org.sapia.clazzy.loader.FileSystemLoader;
7 import org.sapia.clazzy.loader.JarLoader;
8
9 /**
10  * This class is a utility that parses a classpath and returns the corresponding classloader.
11  *
12  * @author Yanick Duchesne
13  *
14  * <dl>
15  * <dt><b>Copyright:</b><dd>Copyright &#169; 2002-2004 <a HREF="http://www.sapia-oss.org">Sapia Open Source Software</a>. All Rights Reserved.</dd></dt>
16  * <dt><b>License:</b><dd>Read the license.txt file of the jar or visit the
17  * <a HREF="http://www.sapia-oss.org/license.html">license page</a> at the Sapia OSS web site</dd></dt>
18  * </dl>
19  */

20 public class CompositeClassLoaderBuilder {
21   
22   /**
23    * Builds a composite classloader, given a classpath (passed in as a string).
24    * The classpath format is as follows:
25    * <pre>
26    * some.jar:path/to/some/directory
27    * </pre>
28    * or as follows:
29    * <pre>
30    * some.jar;path/to/some/directory
31    * </pre>
32    * Both ';' and ':' are properly understood as path delimiters.
33    * <p>
34    * In addition, any backslashes ('\') in file paths are replaced by the
35    * system file separator (<code>System.getProperty("file.separator")</code>).
36    *
37    * @param parent a parent <code>ClassLoader</code>.
38    * @param selector a <code>LoaderSelector</code>.
39    * @param classpath a classpath
40    * @return a <code>CompositeClassLoader</code>.
41    */

42   public static CompositeClassLoader parseClassPath(ClassLoader JavaDoc parent, LoaderSelector selector, String JavaDoc classpath){
43     StringTokenizer JavaDoc tokenizer = new StringTokenizer JavaDoc(classpath, ":;");
44     String JavaDoc path;
45     File JavaDoc f;
46     CompositeClassLoader loader;
47     if(parent != null) loader = new CompositeClassLoader(parent, selector);
48     else loader = new CompositeClassLoader(Thread.currentThread().getContextClassLoader(), selector);
49     while(tokenizer.hasMoreTokens()){
50       path = tokenizer.nextToken();
51       path = path.replace('\\', File.separatorChar);
52       f = new File JavaDoc(path);
53       if(f.isDirectory()){
54         loader.addLoader(new FileSystemLoader(f));
55       }
56       else{
57         loader.addLoader(new JarLoader(f));
58       }
59     }
60     return loader;
61   }
62
63 }
64
Popular Tags