home *** CD-ROM | disk | FTP | other *** search
- package sun.misc;
-
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.net.JarURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLConnection;
- import java.net.URLStreamHandler;
- import java.security.AccessControlException;
- import java.security.AccessController;
- import java.security.PrivilegedActionException;
- import java.util.HashMap;
- import java.util.LinkedList;
- import java.util.StringTokenizer;
- import java.util.jar.Attributes;
- import java.util.jar.JarEntry;
- import java.util.jar.JarFile;
- import java.util.jar.Manifest;
- import java.util.jar.Attributes.Name;
-
- class URLClassPath$JarLoader extends URLClassPath.Loader {
- private JarFile jar;
- private URL csu;
- private JarIndex index;
- private URLStreamHandler handler;
- private HashMap lmap;
-
- URLClassPath$JarLoader(URL var1, URLStreamHandler var2, HashMap var3) throws IOException {
- super(new URL("jar", "", -1, var1 + "!/", var2));
- this.jar = this.getJarFile(var1);
- this.index = JarIndex.getJarIndex(this.jar);
- this.csu = var1;
- this.handler = var2;
- this.lmap = var3;
- if (this.index != null) {
- String[] var4 = this.index.getJarFiles();
-
- for(int var5 = 0; var5 < var4.length; ++var5) {
- try {
- URL var6 = new URL(this.csu, var4[var5]);
- this.lmap.put(var6, (Object)null);
- } catch (MalformedURLException var7) {
- }
- }
- }
-
- }
-
- private JarFile getJarFile(URL var1) throws IOException {
- if ("file".equals(var1.getProtocol())) {
- String var4 = var1.getFile().replace('/', File.separatorChar);
- File var3 = new File(var4);
- if (!var3.exists()) {
- throw new FileNotFoundException(var4);
- } else {
- return new JarFile(var4);
- }
- } else {
- URLConnection var2 = ((URLClassPath.Loader)this).getBaseURL().openConnection();
- var2.setRequestProperty("UA-Java-Version", URLClassPath.JAVA_VERSION);
- return ((JarURLConnection)var2).getJarFile();
- }
- }
-
- JarIndex getIndex() {
- return this.index;
- }
-
- Resource getResource(String var1, boolean var2) {
- JarEntry var3 = this.jar.getJarEntry(var1);
- if (var3 != null) {
- URL var17;
- try {
- var17 = new URL(((URLClassPath.Loader)this).getBaseURL(), var1);
- if (var2) {
- URLClassPath.check(var17);
- }
- } catch (MalformedURLException var12) {
- return null;
- } catch (IOException var13) {
- return null;
- } catch (AccessControlException var14) {
- return null;
- }
-
- return new URLClassPath.4(this, var1, var17, var3);
- } else if (this.index == null) {
- return null;
- } else {
- LinkedList var5;
- if ((var5 = this.index.get(var1)) == null) {
- return null;
- } else {
- for(String var7 : var5) {
- URLClassPath.Loader var8;
- try {
- URL var9 = new URL(this.csu, var7);
- if ((var8 = (URLClassPath.Loader)this.lmap.get(var9)) == null) {
- var8 = (URLClassPath.Loader)AccessController.doPrivileged(new URLClassPath.5(this, var9));
- JarIndex var10 = ((URLClassPath$JarLoader)var8).getIndex();
- if (var10 != null) {
- int var11 = var7.lastIndexOf("/");
- var10.merge(this.index, var11 == -1 ? null : var7.substring(0, var11 + 1));
- }
-
- this.lmap.put(var9, var8);
- }
- } catch (PrivilegedActionException var15) {
- continue;
- } catch (MalformedURLException var16) {
- continue;
- }
-
- Resource var4;
- if (var8 != this && (var4 = var8.getResource(var1, var2)) != null) {
- return var4;
- }
- }
-
- throw new InvalidJarIndexException("Invalid index!");
- }
- }
- }
-
- URL[] getClassPath() throws IOException {
- if (this.index != null) {
- return null;
- } else {
- this.parseExtensionsDependencies();
- Manifest var1 = this.jar.getManifest();
- if (var1 != null) {
- Attributes var2 = var1.getMainAttributes();
- if (var2 != null) {
- String var3 = var2.getValue(Name.CLASS_PATH);
- if (var3 != null) {
- return this.parseClassPath(this.csu, var3);
- }
- }
- }
-
- return null;
- }
- }
-
- private void parseExtensionsDependencies() throws IOException {
- ExtensionDependency.checkExtensionsDependencies(this.jar);
- }
-
- private URL[] parseClassPath(URL var1, String var2) throws MalformedURLException {
- StringTokenizer var3 = new StringTokenizer(var2);
- URL[] var4 = new URL[var3.countTokens()];
-
- for(int var5 = 0; var3.hasMoreTokens(); ++var5) {
- String var6 = var3.nextToken();
- var4[var5] = new URL(var1, var6);
- }
-
- return var4;
- }
-
- // $FF: synthetic method
- static URL access$400(URLClassPath$JarLoader var0) {
- return var0.csu;
- }
-
- // $FF: synthetic method
- static JarFile access$500(URLClassPath$JarLoader var0) {
- return var0.jar;
- }
-
- // $FF: synthetic method
- static URLStreamHandler access$600(URLClassPath$JarLoader var0) {
- return var0.handler;
- }
-
- // $FF: synthetic method
- static HashMap access$700(URLClassPath$JarLoader var0) {
- return var0.lmap;
- }
- }
-