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.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  5.1 KB  |  211 lines

  1. package sun.misc;
  2.  
  3. import java.io.File;
  4. import java.io.FilePermission;
  5. import java.io.IOException;
  6. import java.net.SocketPermission;
  7. import java.net.URL;
  8. import java.net.URLStreamHandler;
  9. import java.net.URLStreamHandlerFactory;
  10. import java.security.AccessController;
  11. import java.security.Permission;
  12. import java.security.PrivilegedActionException;
  13. import java.util.ArrayList;
  14. import java.util.EmptyStackException;
  15. import java.util.Enumeration;
  16. import java.util.HashMap;
  17. import java.util.Stack;
  18. import java.util.StringTokenizer;
  19. import sun.security.action.GetPropertyAction;
  20.  
  21. public class URLClassPath {
  22.    static final String USER_AGENT_JAVA_VERSION = "UA-Java-Version";
  23.    static final String JAVA_VERSION = (String)AccessController.doPrivileged(new GetPropertyAction("java.version"));
  24.    private ArrayList path;
  25.    private Stack urls;
  26.    private ArrayList loaders;
  27.    private HashMap lmap;
  28.    private URLStreamHandler jarHandler;
  29.  
  30.    public URLClassPath(URL[] var1, URLStreamHandlerFactory var2) {
  31.       this.path = new ArrayList();
  32.       this.urls = new Stack();
  33.       this.loaders = new ArrayList();
  34.       this.lmap = new HashMap();
  35.  
  36.       for(int var3 = 0; var3 < var1.length; ++var3) {
  37.          this.path.add(var1[var3]);
  38.       }
  39.  
  40.       this.push(var1);
  41.       if (var2 != null) {
  42.          this.jarHandler = var2.createURLStreamHandler("jar");
  43.       }
  44.  
  45.    }
  46.  
  47.    public URLClassPath(URL[] var1) {
  48.       this(var1, (URLStreamHandlerFactory)null);
  49.    }
  50.  
  51.    public void addURL(URL var1) {
  52.       Stack var2 = this.urls;
  53.       synchronized(var2) {
  54.          this.urls.add(0, var1);
  55.          this.path.add(var1);
  56.       }
  57.    }
  58.  
  59.    public URL[] getURLs() {
  60.       Stack var1 = this.urls;
  61.       synchronized(var1) {
  62.          URL[] var2 = (URL[])this.path.toArray(new URL[this.path.size()]);
  63.          return var2;
  64.       }
  65.    }
  66.  
  67.    public Resource getResource(String var1, boolean var2) {
  68.       Loader var3;
  69.       for(int var4 = 0; (var3 = this.getLoader(var4)) != null; ++var4) {
  70.          Resource var5 = var3.getResource(var1, var2);
  71.          if (var5 != null) {
  72.             return var5;
  73.          }
  74.       }
  75.  
  76.       return null;
  77.    }
  78.  
  79.    public Resource getResource(String var1) {
  80.       return this.getResource(var1, true);
  81.    }
  82.  
  83.    public Enumeration getResources(String var1, boolean var2) {
  84.       return new 1(this, var1, var2);
  85.    }
  86.  
  87.    public Enumeration getResources(String var1) {
  88.       return this.getResources(var1, true);
  89.    }
  90.  
  91.    private synchronized Loader getLoader(int var1) {
  92.       while(this.loaders.size() < var1 + 1) {
  93.          URL var2;
  94.          try {
  95.             Stack var3 = this.urls;
  96.             synchronized(var3) {
  97.                var2 = (URL)this.urls.pop();
  98.             }
  99.          } catch (EmptyStackException var6) {
  100.             return null;
  101.          }
  102.  
  103.          if (!this.lmap.containsKey(var2)) {
  104.             Loader var8;
  105.             try {
  106.                var8 = this.getLoader(var2);
  107.                URL[] var4 = var8.getClassPath();
  108.                if (var4 != null) {
  109.                   this.push(var4);
  110.                }
  111.             } catch (IOException var7) {
  112.                continue;
  113.             }
  114.  
  115.             this.loaders.add(var8);
  116.             this.lmap.put(var2, var8);
  117.          }
  118.       }
  119.  
  120.       return (Loader)this.loaders.get(var1);
  121.    }
  122.  
  123.    private Loader getLoader(URL var1) throws IOException {
  124.       try {
  125.          return (Loader)AccessController.doPrivileged(new 2(this, var1));
  126.       } catch (PrivilegedActionException var3) {
  127.          throw (IOException)var3.getException();
  128.       }
  129.    }
  130.  
  131.    private void push(URL[] var1) {
  132.       Stack var2 = this.urls;
  133.       synchronized(var2) {
  134.          for(int var3 = var1.length - 1; var3 >= 0; --var3) {
  135.             this.urls.push(var1[var3]);
  136.          }
  137.  
  138.       }
  139.    }
  140.  
  141.    public static URL[] pathToURLs(String var0) {
  142.       StringTokenizer var1 = new StringTokenizer(var0, File.pathSeparator);
  143.       URL[] var2 = new URL[var1.countTokens()];
  144.       int var3 = 0;
  145.  
  146.       while(var1.hasMoreTokens()) {
  147.          try {
  148.             File var4 = new File(var1.nextToken());
  149.             var2[var3++] = var4.toURL();
  150.             var2[var3 - 1] = (new File(var4.getCanonicalPath())).toURL();
  151.          } catch (IOException var5) {
  152.          }
  153.       }
  154.  
  155.       if (var2.length != var3) {
  156.          URL[] var6 = new URL[var3];
  157.          System.arraycopy(var2, 0, var6, 0, var3);
  158.          var2 = var6;
  159.       }
  160.  
  161.       return var2;
  162.    }
  163.  
  164.    public URL checkURL(URL var1) {
  165.       try {
  166.          check(var1);
  167.          return var1;
  168.       } catch (Exception var3) {
  169.          return null;
  170.       }
  171.    }
  172.  
  173.    static void check(URL var0) throws IOException {
  174.       SecurityManager var1 = System.getSecurityManager();
  175.       if (var1 != null) {
  176.          Permission var2 = var0.openConnection().getPermission();
  177.          if (var2 != null) {
  178.             try {
  179.                var1.checkPermission(var2);
  180.             } catch (SecurityException var4) {
  181.                if (var2 instanceof FilePermission && var2.getActions().indexOf("read") != -1) {
  182.                   var1.checkRead(var2.getName());
  183.                } else {
  184.                   if (!(var2 instanceof SocketPermission) || var2.getActions().indexOf("connect") == -1) {
  185.                      throw var4;
  186.                   }
  187.  
  188.                   var1.checkConnect(var0.getHost(), var0.getPort());
  189.                }
  190.             }
  191.          }
  192.       }
  193.  
  194.    }
  195.  
  196.    // $FF: synthetic method
  197.    static Loader access$000(URLClassPath var0, int var1) {
  198.       return var0.getLoader(var1);
  199.    }
  200.  
  201.    // $FF: synthetic method
  202.    static URLStreamHandler access$100(URLClassPath var0) {
  203.       return var0.jarHandler;
  204.    }
  205.  
  206.    // $FF: synthetic method
  207.    static HashMap access$200(URLClassPath var0) {
  208.       return var0.lmap;
  209.    }
  210. }
  211.