/* Wotonomy: OpenStep design patterns for pure Java applications. Copyright (C) 2000 Michael Powers This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, see http://www.gnu.org */ package net.wotonomy.ui.swing.util; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.InputStream; import java.util.Hashtable; /** * ClassGrabber is a class loader used by WindowGrabber. It simply loads classes * by filename and nothing more. It exists mainly because the java 1.1 class * loading framework doesn't easily allow the creation of class loaders nor the * loading of arbitrary classes. * * @author michael@mpowers.net * @version $Revision: 904 $ $Date: 2006-02-18 18:19:05 -0500 (Sat, 18 Feb 2006) * $ */ public class ClassGrabber extends ClassLoader { Hashtable classMap = new Hashtable(); public ClassGrabber() { super(); } protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { Class c = (Class) classMap.get(name); if (c != null) return c; try { c = findSystemClass(name); } catch (Exception exc1) { // System.err.print( "findSystemClass: " + name + ": " ); // System.err.println( exc1 ); } if (c != null) return c; try { c = findLoadedClass(name); } catch (Exception exc1) { // System.err.print( "findLoadedClass: " + name + ": " ); // System.err.println( exc1 ); } if (c != null) return c; try { InputStream input = new BufferedInputStream(new FileInputStream(name)); ByteArrayOutputStream output = new ByteArrayOutputStream(200); int ch; while ((ch = input.read()) != -1) { output.write(ch); } byte[] data = output.toByteArray(); c = defineClass(null, data, 0, data.length); } catch (Exception exc) { System.err.print("getResource: " + name + ": "); System.err.println(exc); c = null; } if (c != null) { classMap.put(name, c); if (resolve) resolveClass(c); } return c; } } /* * $Log$ Revision 1.2 2006/02/18 23:19:05 cgruber Update imports and maven * dependencies. * * Revision 1.1 2006/02/16 13:22:22 cgruber Check in all sources in * eclipse-friendly maven-enabled packages. * * Revision 1.2 2003/08/06 23:07:53 chochos general code cleanup (mostly, * removing unused imports) * * Revision 1.1.1.1 2000/12/21 15:51:18 mpowers Contributing wotonomy. * * Revision 1.2 2000/12/20 16:25:45 michael Added log to all files. * * */