AbsModuleClassLoader.java

00001 
00027 package org.objectweb.jonas_lib.loader;
00028 
00029 import java.io.File;
00030 import java.io.IOException;
00031 import java.net.URL;
00032 import java.net.URLClassLoader;
00033 import java.util.List;
00034 import java.util.Iterator;
00035 
00036 import org.objectweb.jonas_lib.loader.factory.URLFactory;
00037 import org.objectweb.jonas_lib.loader.locator.Locator;
00038 
00045 public abstract class AbsModuleClassLoader extends URLClassLoader {
00046 
00048     private URLFactory[] factories;
00049 
00051     private Locator[] locators;
00052 
00054     private URL[] bases;
00055 
00063     public AbsModuleClassLoader(URL[] modules) throws IOException {
00064         super(new URL[0]);
00065         bases = modules;
00066         init();
00067     }
00068 
00077     public AbsModuleClassLoader(URL[] modules, ClassLoader parent) throws IOException {
00078         super(new URL[0], parent);
00079         bases = modules;
00080         init();
00081     }
00082 
00088     protected void init() throws IOException {
00089         factories = new URLFactory[bases.length];
00090         locators = new Locator[bases.length];
00091 
00092         // Create factories and locator for each URL
00093         for (int i = 0; i < bases.length; i++) {
00094 
00095             factories[i] = URLFactory.getFactory(bases[i]);
00096             locators[i] = Locator.getLocator(bases[i]);
00097         }
00098     }
00099 
00109     protected void addInRepository(String location) throws IOException {
00110         // test existence in each base URL
00111         for (int i = 0; i < bases.length; i++) {
00112             if (locators[i].hasDirectory(location)
00113                 || locators[i].hasFile(location)) {
00114                 addURL(factories[i].getURL(location));
00115             }
00116         }
00117     }
00118 
00129     protected void addContentInRepository(String location) throws IOException {
00130         // test existence in each base URL
00131         for (int i = 0; i < bases.length; i++) {
00132             List list = locators[i].listContent(location);
00133             for (Iterator l = list.iterator(); l.hasNext();) {
00134                 addURL(factories[i].getURL((String) l.next()));
00135             }
00136         }
00137     }
00138 
00142     public String toString() {
00143         StringBuffer sb = new StringBuffer();
00144 
00145         sb.append("classloader : " + getClass().getName() + "\n");
00146         sb.append("\tmodules bases (not in loader!) : \n");
00147         for (int i = 0; i < bases.length; i++) {
00148             sb.append("\t\t -" + bases[i] + "\n");
00149         }
00150         sb.append("\trepositories :\n");
00151         URL[] rep = getURLs();
00152         for (int i = 0; i < rep.length; i++) {
00153             sb.append("\t\t -" + rep[i] + "\n");
00154         }
00155         sb.append("\tparent : " + getParent() + "\n");
00156 
00157         return sb.toString();
00158     }
00159 
00163     public URL[] getBases() {
00164         return bases;
00165     }
00166 
00170     public String getClasspath() {
00171         URL[] urls = getURLs();
00172         StringBuffer cp = new StringBuffer();
00173         for (int i = 0; i < urls.length; i++) {
00174             String url = urls[i].getFile();
00175             // do not add URL with !/ inside
00176             if (url.indexOf("!/") == -1) {
00177                 cp.append(File.pathSeparator + url);
00178             }
00179         }
00180         return  cp.toString();
00181     }
00182 }

Generated on Tue Feb 15 15:05:55 2005 for JOnAS by  doxygen 1.3.9.1