home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / misc / URLClassPath$JarLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  7.4 KB  |  326 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.Enumeration;
  15. import java.util.HashMap;
  16. import java.util.HashSet;
  17. import java.util.LinkedList;
  18. import java.util.Set;
  19. import java.util.StringTokenizer;
  20. import java.util.jar.Attributes;
  21. import java.util.jar.JarEntry;
  22. import java.util.jar.JarFile;
  23. import java.util.jar.Manifest;
  24. import java.util.jar.Attributes.Name;
  25. import java.util.zip.ZipEntry;
  26. import sun.net.www.ParseUtil;
  27.  
  28. class URLClassPath$JarLoader extends URLClassPath.Loader {
  29.    private JarFile jar;
  30.    private URL csu;
  31.    private JarIndex index;
  32.    private MetaIndex metaIndex;
  33.    private URLStreamHandler handler;
  34.    private HashMap lmap;
  35.  
  36.    URLClassPath$JarLoader(URL var1, URLStreamHandler var2, HashMap var3) throws IOException {
  37.       super(new URL("jar", "", -1, var1 + "!/", var2));
  38.       this.csu = var1;
  39.       this.handler = var2;
  40.       this.lmap = var3;
  41.       if (!this.isOptimizable(var1)) {
  42.          this.ensureOpen();
  43.       } else {
  44.          String var4 = var1.getFile();
  45.          if (var4 != null) {
  46.             var4 = ParseUtil.decode(var4);
  47.             File var5 = new File(var4);
  48.             this.metaIndex = MetaIndex.forJar(var5);
  49.             if (this.metaIndex != null && !var5.exists()) {
  50.                this.metaIndex = null;
  51.             }
  52.          }
  53.  
  54.          if (this.metaIndex == null) {
  55.             this.ensureOpen();
  56.          }
  57.       }
  58.  
  59.    }
  60.  
  61.    JarFile getJarFile() {
  62.       return this.jar;
  63.    }
  64.  
  65.    private boolean isOptimizable(URL var1) {
  66.       return "file".equals(var1.getProtocol());
  67.    }
  68.  
  69.    private void ensureOpen() throws IOException {
  70.       if (this.jar == null) {
  71.          try {
  72.             AccessController.doPrivileged(new URLClassPath.JarLoader.1(this));
  73.          } catch (PrivilegedActionException var2) {
  74.             throw (IOException)var2.getException();
  75.          }
  76.       }
  77.  
  78.    }
  79.  
  80.    private JarFile getJarFile(URL var1) throws IOException {
  81.       if (this.isOptimizable(var1)) {
  82.          FileURLMapper var3 = new FileURLMapper(var1);
  83.          if (!var3.exists()) {
  84.             throw new FileNotFoundException(var3.getPath());
  85.          } else {
  86.             return new JarFile(var3.getPath());
  87.          }
  88.       } else {
  89.          URLConnection var2 = this.getBaseURL().openConnection();
  90.          var2.setRequestProperty("UA-Java-Version", URLClassPath.JAVA_VERSION);
  91.          return ((JarURLConnection)var2).getJarFile();
  92.       }
  93.    }
  94.  
  95.    JarIndex getIndex() {
  96.       try {
  97.          this.ensureOpen();
  98.       } catch (IOException var2) {
  99.          throw (InternalError)(new InternalError()).initCause(var2);
  100.       }
  101.  
  102.       return this.index;
  103.    }
  104.  
  105.    Resource checkResource(String var1, boolean var2, JarEntry var3) {
  106.       URL var4;
  107.       try {
  108.          var4 = new URL(this.getBaseURL(), ParseUtil.encodePath(var1, false));
  109.          if (var2) {
  110.             URLClassPath.check(var4);
  111.          }
  112.       } catch (MalformedURLException var6) {
  113.          return null;
  114.       } catch (IOException var7) {
  115.          return null;
  116.       } catch (AccessControlException var8) {
  117.          return null;
  118.       }
  119.  
  120.       return new URLClassPath.JarLoader.2(this, var1, var4, var3);
  121.    }
  122.  
  123.    boolean validIndex(String var1) {
  124.       String var2 = var1;
  125.       int var3;
  126.       if ((var3 = var1.lastIndexOf("/")) != -1) {
  127.          var2 = var1.substring(0, var3);
  128.       }
  129.  
  130.       Enumeration var6 = this.jar.entries();
  131.  
  132.       while(var6.hasMoreElements()) {
  133.          ZipEntry var5 = (ZipEntry)var6.nextElement();
  134.          String var4 = var5.getName();
  135.          if ((var3 = var4.lastIndexOf("/")) != -1) {
  136.             var4 = var4.substring(0, var3);
  137.          }
  138.  
  139.          if (var4.equals(var2)) {
  140.             return true;
  141.          }
  142.       }
  143.  
  144.       return false;
  145.    }
  146.  
  147.    URL findResource(String var1, boolean var2) {
  148.       Resource var3 = this.getResource(var1, var2);
  149.       return var3 != null ? var3.getURL() : null;
  150.    }
  151.  
  152.    Resource getResource(String var1, boolean var2) {
  153.       if (this.metaIndex != null && !this.metaIndex.mayContain(var1)) {
  154.          return null;
  155.       } else {
  156.          try {
  157.             this.ensureOpen();
  158.          } catch (IOException var5) {
  159.             throw (InternalError)(new InternalError()).initCause(var5);
  160.          }
  161.  
  162.          JarEntry var3 = this.jar.getJarEntry(var1);
  163.          if (var3 != null) {
  164.             return this.checkResource(var1, var2, var3);
  165.          } else if (this.index == null) {
  166.             return null;
  167.          } else {
  168.             HashSet var4 = new HashSet();
  169.             return this.getResource(var1, var2, var4);
  170.          }
  171.       }
  172.    }
  173.  
  174.    Resource getResource(String var1, boolean var2, Set var3) {
  175.       boolean var6 = false;
  176.       int var7 = 0;
  177.       Object var8 = null;
  178.       LinkedList var18;
  179.       if ((var18 = this.index.get(var1)) == null) {
  180.          return null;
  181.       } else {
  182.          do {
  183.             Object[] var5 = var18.toArray();
  184.             int var9 = var18.size();
  185.  
  186.             while(var7 < var9) {
  187.                String var10 = (String)var5[var7++];
  188.  
  189.                URLClassPath$JarLoader var11;
  190.                URL var12;
  191.                try {
  192.                   var12 = new URL(this.csu, var10);
  193.                   if ((var11 = (URLClassPath$JarLoader)this.lmap.get(var12)) == null) {
  194.                      var11 = (URLClassPath$JarLoader)AccessController.doPrivileged(new URLClassPath.JarLoader.3(this, var12));
  195.                      JarIndex var13 = var11.getIndex();
  196.                      if (var13 != null) {
  197.                         int var14 = var10.lastIndexOf("/");
  198.                         var13.merge(this.index, var14 == -1 ? null : var10.substring(0, var14 + 1));
  199.                      }
  200.  
  201.                      this.lmap.put(var12, var11);
  202.                   }
  203.                } catch (PrivilegedActionException var16) {
  204.                   continue;
  205.                } catch (MalformedURLException var17) {
  206.                   continue;
  207.                }
  208.  
  209.                boolean var19 = !var3.add(var12);
  210.                if (!var19) {
  211.                   try {
  212.                      var11.ensureOpen();
  213.                   } catch (IOException var15) {
  214.                      throw (InternalError)(new InternalError()).initCause(var15);
  215.                   }
  216.  
  217.                   JarEntry var20 = var11.jar.getJarEntry(var1);
  218.                   if (var20 != null) {
  219.                      return var11.checkResource(var1, var2, var20);
  220.                   }
  221.  
  222.                   if (!var11.validIndex(var1)) {
  223.                      throw new InvalidJarIndexException("Invalid index");
  224.                   }
  225.                }
  226.  
  227.                Resource var4;
  228.                if (!var19 && var11 != this && var11.getIndex() != null && (var4 = var11.getResource(var1, var2, var3)) != null) {
  229.                   return var4;
  230.                }
  231.             }
  232.  
  233.             var18 = this.index.get(var1);
  234.          } while(var7 < var18.size());
  235.  
  236.          return null;
  237.       }
  238.    }
  239.  
  240.    URL[] getClassPath() throws IOException {
  241.       if (this.index != null) {
  242.          return null;
  243.       } else if (this.metaIndex != null) {
  244.          return null;
  245.       } else {
  246.          this.ensureOpen();
  247.          this.parseExtensionsDependencies();
  248.          if (SharedSecrets.javaUtilJarAccess().jarFileHasClassPathAttribute(this.jar)) {
  249.             Manifest var1 = this.jar.getManifest();
  250.             if (var1 != null) {
  251.                Attributes var2 = var1.getMainAttributes();
  252.                if (var2 != null) {
  253.                   String var3 = var2.getValue(Name.CLASS_PATH);
  254.                   if (var3 != null) {
  255.                      return this.parseClassPath(this.csu, var3);
  256.                   }
  257.                }
  258.             }
  259.          }
  260.  
  261.          return null;
  262.       }
  263.    }
  264.  
  265.    private void parseExtensionsDependencies() throws IOException {
  266.       ExtensionDependency.checkExtensionsDependencies(this.jar);
  267.    }
  268.  
  269.    private URL[] parseClassPath(URL var1, String var2) throws MalformedURLException {
  270.       StringTokenizer var3 = new StringTokenizer(var2);
  271.       URL[] var4 = new URL[var3.countTokens()];
  272.  
  273.       for(int var5 = 0; var3.hasMoreTokens(); ++var5) {
  274.          String var6 = var3.nextToken();
  275.          var4[var5] = new URL(var1, var6);
  276.       }
  277.  
  278.       return var4;
  279.    }
  280.  
  281.    // $FF: synthetic method
  282.    static URL access$400(URLClassPath$JarLoader var0) {
  283.       return var0.csu;
  284.    }
  285.  
  286.    // $FF: synthetic method
  287.    static JarFile access$502(URLClassPath$JarLoader var0, JarFile var1) {
  288.       return var0.jar = var1;
  289.    }
  290.  
  291.    // $FF: synthetic method
  292.    static JarFile access$600(URLClassPath$JarLoader var0, URL var1) throws IOException {
  293.       return var0.getJarFile(var1);
  294.    }
  295.  
  296.    // $FF: synthetic method
  297.    static JarIndex access$702(URLClassPath$JarLoader var0, JarIndex var1) {
  298.       return var0.index = var1;
  299.    }
  300.  
  301.    // $FF: synthetic method
  302.    static JarFile access$500(URLClassPath$JarLoader var0) {
  303.       return var0.jar;
  304.    }
  305.  
  306.    // $FF: synthetic method
  307.    static MetaIndex access$800(URLClassPath$JarLoader var0) {
  308.       return var0.metaIndex;
  309.    }
  310.  
  311.    // $FF: synthetic method
  312.    static JarIndex access$700(URLClassPath$JarLoader var0) {
  313.       return var0.index;
  314.    }
  315.  
  316.    // $FF: synthetic method
  317.    static HashMap access$900(URLClassPath$JarLoader var0) {
  318.       return var0.lmap;
  319.    }
  320.  
  321.    // $FF: synthetic method
  322.    static URLStreamHandler access$1000(URLClassPath$JarLoader var0) {
  323.       return var0.handler;
  324.    }
  325. }
  326.