home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / misc / URLClassPath$JarLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  5.1 KB  |  183 lines

  1. package sun.misc;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.IOException;
  6. import java.net.JarURLConnection;
  7. import java.net.MalformedURLException;
  8. import java.net.URL;
  9. import java.net.URLConnection;
  10. import java.net.URLStreamHandler;
  11. import java.security.AccessControlException;
  12. import java.security.AccessController;
  13. import java.security.PrivilegedActionException;
  14. import java.util.HashMap;
  15. import java.util.LinkedList;
  16. import java.util.StringTokenizer;
  17. import java.util.jar.Attributes;
  18. import java.util.jar.JarEntry;
  19. import java.util.jar.JarFile;
  20. import java.util.jar.Manifest;
  21. import java.util.jar.Attributes.Name;
  22.  
  23. class URLClassPath$JarLoader extends URLClassPath.Loader {
  24.    private JarFile jar;
  25.    private URL csu;
  26.    private JarIndex index;
  27.    private URLStreamHandler handler;
  28.    private HashMap lmap;
  29.  
  30.    URLClassPath$JarLoader(URL var1, URLStreamHandler var2, HashMap var3) throws IOException {
  31.       super(new URL("jar", "", -1, var1 + "!/", var2));
  32.       this.jar = this.getJarFile(var1);
  33.       this.index = JarIndex.getJarIndex(this.jar);
  34.       this.csu = var1;
  35.       this.handler = var2;
  36.       this.lmap = var3;
  37.       if (this.index != null) {
  38.          String[] var4 = this.index.getJarFiles();
  39.  
  40.          for(int var5 = 0; var5 < var4.length; ++var5) {
  41.             try {
  42.                URL var6 = new URL(this.csu, var4[var5]);
  43.                this.lmap.put(var6, (Object)null);
  44.             } catch (MalformedURLException var7) {
  45.             }
  46.          }
  47.       }
  48.  
  49.    }
  50.  
  51.    private JarFile getJarFile(URL var1) throws IOException {
  52.       if ("file".equals(var1.getProtocol())) {
  53.          String var4 = var1.getFile().replace('/', File.separatorChar);
  54.          File var3 = new File(var4);
  55.          if (!var3.exists()) {
  56.             throw new FileNotFoundException(var4);
  57.          } else {
  58.             return new JarFile(var4);
  59.          }
  60.       } else {
  61.          URLConnection var2 = ((URLClassPath.Loader)this).getBaseURL().openConnection();
  62.          var2.setRequestProperty("UA-Java-Version", URLClassPath.JAVA_VERSION);
  63.          return ((JarURLConnection)var2).getJarFile();
  64.       }
  65.    }
  66.  
  67.    JarIndex getIndex() {
  68.       return this.index;
  69.    }
  70.  
  71.    Resource getResource(String var1, boolean var2) {
  72.       JarEntry var3 = this.jar.getJarEntry(var1);
  73.       if (var3 != null) {
  74.          URL var17;
  75.          try {
  76.             var17 = new URL(((URLClassPath.Loader)this).getBaseURL(), var1);
  77.             if (var2) {
  78.                URLClassPath.check(var17);
  79.             }
  80.          } catch (MalformedURLException var12) {
  81.             return null;
  82.          } catch (IOException var13) {
  83.             return null;
  84.          } catch (AccessControlException var14) {
  85.             return null;
  86.          }
  87.  
  88.          return new URLClassPath.4(this, var1, var17, var3);
  89.       } else if (this.index == null) {
  90.          return null;
  91.       } else {
  92.          LinkedList var5;
  93.          if ((var5 = this.index.get(var1)) == null) {
  94.             return null;
  95.          } else {
  96.             for(String var7 : var5) {
  97.                URLClassPath.Loader var8;
  98.                try {
  99.                   URL var9 = new URL(this.csu, var7);
  100.                   if ((var8 = (URLClassPath.Loader)this.lmap.get(var9)) == null) {
  101.                      var8 = (URLClassPath.Loader)AccessController.doPrivileged(new URLClassPath.5(this, var9));
  102.                      JarIndex var10 = ((URLClassPath$JarLoader)var8).getIndex();
  103.                      if (var10 != null) {
  104.                         int var11 = var7.lastIndexOf("/");
  105.                         var10.merge(this.index, var11 == -1 ? null : var7.substring(0, var11 + 1));
  106.                      }
  107.  
  108.                      this.lmap.put(var9, var8);
  109.                   }
  110.                } catch (PrivilegedActionException var15) {
  111.                   continue;
  112.                } catch (MalformedURLException var16) {
  113.                   continue;
  114.                }
  115.  
  116.                Resource var4;
  117.                if (var8 != this && (var4 = var8.getResource(var1, var2)) != null) {
  118.                   return var4;
  119.                }
  120.             }
  121.  
  122.             throw new InvalidJarIndexException("Invalid index!");
  123.          }
  124.       }
  125.    }
  126.  
  127.    URL[] getClassPath() throws IOException {
  128.       if (this.index != null) {
  129.          return null;
  130.       } else {
  131.          this.parseExtensionsDependencies();
  132.          Manifest var1 = this.jar.getManifest();
  133.          if (var1 != null) {
  134.             Attributes var2 = var1.getMainAttributes();
  135.             if (var2 != null) {
  136.                String var3 = var2.getValue(Name.CLASS_PATH);
  137.                if (var3 != null) {
  138.                   return this.parseClassPath(this.csu, var3);
  139.                }
  140.             }
  141.          }
  142.  
  143.          return null;
  144.       }
  145.    }
  146.  
  147.    private void parseExtensionsDependencies() throws IOException {
  148.       ExtensionDependency.checkExtensionsDependencies(this.jar);
  149.    }
  150.  
  151.    private URL[] parseClassPath(URL var1, String var2) throws MalformedURLException {
  152.       StringTokenizer var3 = new StringTokenizer(var2);
  153.       URL[] var4 = new URL[var3.countTokens()];
  154.  
  155.       for(int var5 = 0; var3.hasMoreTokens(); ++var5) {
  156.          String var6 = var3.nextToken();
  157.          var4[var5] = new URL(var1, var6);
  158.       }
  159.  
  160.       return var4;
  161.    }
  162.  
  163.    // $FF: synthetic method
  164.    static URL access$400(URLClassPath$JarLoader var0) {
  165.       return var0.csu;
  166.    }
  167.  
  168.    // $FF: synthetic method
  169.    static JarFile access$500(URLClassPath$JarLoader var0) {
  170.       return var0.jar;
  171.    }
  172.  
  173.    // $FF: synthetic method
  174.    static URLStreamHandler access$600(URLClassPath$JarLoader var0) {
  175.       return var0.handler;
  176.    }
  177.  
  178.    // $FF: synthetic method
  179.    static HashMap access$700(URLClassPath$JarLoader var0) {
  180.       return var0.lmap;
  181.    }
  182. }
  183.