home *** CD-ROM | disk | FTP | other *** search
- package com.zerog.lax;
-
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.InputStream;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.Vector;
- import java.util.zip.ZipFile;
-
- public class DynamicClassLoader extends ClassLoader {
- private Hashtable classes = new Hashtable();
- private Vector dynamicPathAsText = new Vector();
- private Vector dynamicPathAsObjects = new Vector();
- private static Vector loaders = new Vector();
-
- public DynamicClassLoader() {
- new Integer(4);
- new StringBuffer();
- loaders.addElement(this);
-
- try {
- this.dynamicPathAsText.addElement("lax.jar");
- this.dynamicPathAsObjects.addElement(new ZipFile("lax.jar"));
- System.out.println(" >>>> Create new loader");
- } catch (Exception var2) {
- ((Throwable)var2).printStackTrace();
- }
-
- }
-
- public static void addDynamicPath(Class var0, String var1) {
- new Integer(4);
- new StringBuffer();
- DynamicClassLoader var2 = findLoader(var0);
- if (var2 == null) {
- throw new IllegalArgumentException("The Class passed as namespace wasn't loaded with a DynamicClassLoader");
- } else {
- File var3 = new File(var1);
-
- try {
- if (!var3.isFile() || !var1.endsWith(".zip") && !var1.endsWith(".jar")) {
- var2.dynamicPathAsObjects.addElement(var3);
- } else {
- var2.dynamicPathAsObjects.addElement(new ZipFile(var1));
- }
-
- var2.dynamicPathAsText.addElement(var1);
- } catch (Exception var5) {
- ((Throwable)var5).printStackTrace();
- }
-
- }
- }
-
- public static DynamicClassLoader findLoader(Class var0) {
- new Integer(4);
- new StringBuffer();
- Enumeration var1 = loaders.elements();
-
- while(var1.hasMoreElements()) {
- DynamicClassLoader var2 = (DynamicClassLoader)var1.nextElement();
- System.out.println(" >>>>> findLoader searching " + var2);
- System.out.println(" >>>>> findLoader class " + var0.getClassLoader());
- System.out.println(" >>>>> findLoader 1st " + ((Class)var2.classes.get("com.zerog.lax.LAX")).getClassLoader());
- System.out.println(" >>>>> findLoader comp " + var2.classes.get("com.zerog.lax.LAX").equals(var0));
- if (var2.classes.contains(var0)) {
- System.out.println(" >>>>> findLoader found " + var2);
- return var2;
- }
- }
-
- System.out.println(" >>>>> findLoader not found");
- return null;
- }
-
- private byte[] getClassCode(String var1) {
- new Integer(4);
- new StringBuffer();
- var1 = var1.replace('.', '/') + ".class";
- System.out.println(" >>>>>> Fetching the implementation of " + var1);
- byte[] var2 = null;
-
- try {
- Enumeration var3 = this.dynamicPathAsObjects.elements();
-
- while(var3.hasMoreElements()) {
- Object var4 = var3.nextElement();
- System.out.println(" >>>>>> Object " + var4);
- Object var5;
- if (var4 instanceof File) {
- File var6 = (File)var4;
- var5 = new FileInputStream(new File(var6, var1));
- } else {
- ZipFile var9 = (ZipFile)var4;
- var5 = var9.getInputStream(var9.getEntry(var1));
- }
-
- var2 = new byte[((InputStream)var5).available()];
- ((InputStream)var5).read(var2);
- ((InputStream)var5).close();
- }
-
- return var2;
- } catch (Exception var7) {
- ((Throwable)var7).printStackTrace();
- return null;
- }
- }
-
- public synchronized Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
- new Integer(4);
- new StringBuffer();
- System.out.println(" >>>>>> Load class : " + var1);
- Class var3 = (Class)this.classes.get(var1);
- if (var3 != null) {
- System.out.println(" >>>>>> returning cached result.");
- return var3;
- } else {
- if (!var1.equals("com.zerog.lax.LAX")) {
- try {
- var3 = super.findSystemClass(var1);
- System.out.println(" >>>>>> returning system class (in CLASSPATH).");
- return var3;
- } catch (ClassNotFoundException var5) {
- System.out.println(" >>>>>> Not a system class.");
- }
- }
-
- byte[] var4 = this.getClassCode(var1);
- if (var4 == null) {
- throw new ClassNotFoundException();
- } else {
- var3 = ((ClassLoader)this).defineClass(var4, 0, var4.length);
- if (var3 == null) {
- throw new ClassFormatError();
- } else {
- if (var2) {
- ((ClassLoader)this).resolveClass(var3);
- }
-
- this.classes.put(var1, var3);
- System.out.println(" >>>>>> Returning newly loaded class.");
- return var3;
- }
- }
- }
- }
- }
-