/* Copyright (C) 2007 Free Software Foundation This file is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ package gnu.java.net.loader; import gnu.gcj.runtime.SharedLibHelper; import java.io.InputStream; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.net.URLConnection; import java.net.URLStreamHandlerFactory; /** * A Load_gcjlib is a type of URLLoader * that loads classes and resources from a shared library. */ public final class Load_gcjlib extends URLLoader { private SharedLibHelper helper; public Load_gcjlib(URLClassLoader classloader, URLStreamHandlerCache cache, URLStreamHandlerFactory factory, URL url, URL absoluteUrl) { super(classloader, cache, factory, url, absoluteUrl); helper = SharedLibHelper.findHelper(classloader, url.getFile(), noCertCodeSource, true); } public Class getClass(String className) { return helper.findClass(className); } public Resource getResource(String name) { URL url = helper.findResource(name); if (url == null) return null; return new SoResource(this, url); } final static class SoResource extends Resource { private final URL url; SoResource(Load_gcjlib loader, URL url) { super(loader); this.url = url; } public InputStream getInputStream() throws IOException { URLConnection conn = url.openConnection(); return conn.getInputStream(); } public int getLength() { // FIXME we could find this by asking the core object. return -1; } public URL getURL () { return url; } } }