KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > bsh > classpath > DiscreteFilesClassLoader


1 /*****************************************************************************
2  * *
3  * This file is part of the BeanShell Java Scripting distribution. *
4  * Documentation and updates may be found at http://www.beanshell.org/ *
5  * *
6  * Sun Public License Notice: *
7  * *
8  * The contents of this file are subject to the Sun Public License Version *
9  * 1.0 (the "License"); you may not use this file except in compliance with *
10  * the License. A copy of the License is available at http://www.sun.com *
11  * *
12  * The Original Code is BeanShell. The Initial Developer of the Original *
13  * Code is Pat Niemeyer. Portions created by Pat Niemeyer are Copyright *
14  * (C) 2000. All Rights Reserved. *
15  * *
16  * GNU Public License Notice: *
17  * *
18  * Alternatively, the contents of this file may be used under the terms of *
19  * the GNU Lesser General Public License (the "LGPL"), in which case the *
20  * provisions of LGPL are applicable instead of those above. If you wish to *
21  * allow use of your version of this file only under the terms of the LGPL *
22  * and not to allow others to use your version of this file under the SPL, *
23  * indicate your decision by deleting the provisions above and replace *
24  * them with the notice and other provisions required by the LGPL. If you *
25  * do not delete the provisions above, a recipient may use your version of *
26  * this file under either the SPL or the LGPL. *
27  * *
28  * Patrick Niemeyer (pat@pat.net) *
29  * Author of Learning Java, O'Reilly & Associates *
30  * http://www.pat.net/~pat/ *
31  * *
32  *****************************************************************************/

33
34 package bsh.classpath;
35
36 import java.io.*;
37 import java.io.File JavaDoc;
38 import java.util.*;
39 import java.awt.*;
40 import bsh.BshClassManager;
41 import bsh.classpath.BshClassPath.ClassSource;
42 import bsh.classpath.BshClassPath.DirClassSource;
43 import bsh.classpath.BshClassPath.GeneratedClassSource;
44
45 /**
46     A classloader which can load one or more classes from specified sources.
47     Because the classes are loaded via a single classloader they change as a
48     group and any versioning cross dependencies can be managed.
49 */

50 public class DiscreteFilesClassLoader extends BshClassLoader
51 {
52     /**
53         Map of class sources which also implies our coverage space.
54     */

55     ClassSourceMap map;
56
57     public static class ClassSourceMap extends HashMap
58     {
59         public void put( String JavaDoc name, ClassSource source ) {
60             super.put( name, source );
61         }
62         public ClassSource get( String JavaDoc name ) {
63             return (ClassSource)super.get( name );
64         }
65     }
66     
67     public DiscreteFilesClassLoader(
68         BshClassManager classManager, ClassSourceMap map )
69     {
70         super( classManager );
71         this.map = map;
72     }
73
74     /**
75     */

76     public Class JavaDoc findClass( String JavaDoc name ) throws ClassNotFoundException JavaDoc
77     {
78         // Load it if it's one of our classes
79
ClassSource source = map.get( name );
80
81         if ( source != null )
82         {
83             byte [] code = source.getCode( name );
84             return defineClass( name, code, 0, code.length );
85         } else
86             // Let superclass BshClassLoader (URLClassLoader) findClass try
87
// to find the class...
88
return super.findClass( name );
89     }
90
91     public String JavaDoc toString() {
92         return super.toString() + "for files: "+map;
93     }
94
95 }
96
Popular Tags