01: // The contents of this file are subject to the Mozilla Public License Version
02: // 1.1
03: //(the "License"); you may not use this file except in compliance with the
04: //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
05: //
06: //Software distributed under the License is distributed on an "AS IS" basis,
07: //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
08: //for the specific language governing rights and
09: //limitations under the License.
10: //
11: //The Original Code is "The Columba Project"
12: //
13: //The Initial Developers of the Original Code are Frederik Dietz and Timo
14: // Stich.
15: //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16: //
17: //All Rights Reserved.
18: package org.columba.core.main;
19:
20: import java.lang.reflect.Field;
21: import java.net.URL;
22: import java.net.URLClassLoader;
23: import java.util.Vector;
24:
25: import sun.misc.URLClassPath;
26:
27: /**
28: * Main entry point classloader.
29: *
30: * @author fdietz
31: */
32: public class MainClassLoader extends URLClassLoader {
33:
34: private Vector<URL> vector = new Vector<URL>();
35:
36: public MainClassLoader(ClassLoader parent) {
37: super (new URL[] {}, parent);
38:
39: // through reflection
40: URLClassLoader sysloader = (URLClassLoader) ClassLoader
41: .getSystemClassLoader();
42:
43: // kids - don't do this at home
44: try {
45: Field ucp = URLClassLoader.class.getDeclaredField("ucp");
46: ucp.setAccessible(true);
47: URLClassPath currentCP = (URLClassPath) ucp.get(sysloader);
48: URL[] currentURLs = currentCP.getURLs();
49:
50: // memorize all URLs
51: for (int i = 0; i < currentURLs.length; i++) {
52: vector.add(currentURLs[i]);
53: }
54:
55: } catch (Exception e) {
56: e.printStackTrace();
57: }
58: }
59:
60: public void addURL(URL url) {
61: super .addURL(url);
62: }
63:
64: public void addURLs(URL[] urls) {
65: for (int i = 0; i < urls.length; i++) {
66: super.addURL(urls[i]);
67: }
68: }
69: }
|