summaryrefslogtreecommitdiffstats
path: root/lib/jython/Lib/jxxload_help/PackageManager.java
blob: 18775debf3a5df14bce35c6bfecabecb08869d09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// Copyright 2000 Samuele Pedroni

package jxxload_help;

public class PackageManager extends org.python.core.PathPackageManager {
    
    private JavaLoaderFactory factory;
    private ClassLoader loader;
    
    public synchronized ClassLoader getLoader() {
        if (loader == null) loader = factory.makeLoader();
        return loader;
    }
    
    public synchronized  ClassLoader checkLoader() {
        return loader;
    }
    
    public synchronized void resetLoader() {
        loader = null;
    }
    
    // ??pending add cache support?
    public PackageManager(org.python.core.PyList path,JavaLoaderFactory factory) { 
        this.factory = factory;
        
        for (int i = 0; i < path.__len__(); i++) {
            String entry = path.__finditem__(i).toString();
            if (entry.endsWith(".jar") || entry.endsWith(".zip")) {
                addJarToPackages(new java.io.File(entry),false);
            } else {
                java.io.File dir = new java.io.File(entry);
                if (entry.length() == 0 || dir.isDirectory()) addDirectory(dir);
            }
        }
    }

    public Class findClass(String pkg,String name,String reason) {
        if (pkg != null && pkg.length()>0) name = pkg + '.' + name;
        try {
            return getLoader().loadClass(name);
        } 
        catch(ClassNotFoundException e) {
            return null;
        }
        catch (LinkageError e) {
            throw org.python.core.Py.JavaError(e);
        }
    }

    public void addJarDir(String jdir, boolean cache) {
        throw new RuntimeException("addJarDir not supported for reloadable packages");
    }  

    public void addJar(String jdir, boolean cache) {
        throw new RuntimeException("addDir not supported for reloadable packages");
    }  
}