home *** CD-ROM | disk | FTP | other *** search
- package sun.misc;
-
- import java.io.File;
- import java.io.FilePermission;
- import java.io.IOException;
- import java.net.SocketPermission;
- import java.net.URL;
- import java.net.URLStreamHandler;
- import java.net.URLStreamHandlerFactory;
- import java.security.AccessController;
- import java.security.Permission;
- import java.security.PrivilegedActionException;
- import java.util.ArrayList;
- import java.util.EmptyStackException;
- import java.util.Enumeration;
- import java.util.HashMap;
- import java.util.Stack;
- import java.util.StringTokenizer;
- import sun.security.action.GetPropertyAction;
-
- public class URLClassPath {
- static final String USER_AGENT_JAVA_VERSION = "UA-Java-Version";
- static final String JAVA_VERSION = (String)AccessController.doPrivileged(new GetPropertyAction("java.version"));
- private ArrayList path;
- private Stack urls;
- private ArrayList loaders;
- private HashMap lmap;
- private URLStreamHandler jarHandler;
-
- public URLClassPath(URL[] var1, URLStreamHandlerFactory var2) {
- this.path = new ArrayList();
- this.urls = new Stack();
- this.loaders = new ArrayList();
- this.lmap = new HashMap();
-
- for(int var3 = 0; var3 < var1.length; ++var3) {
- this.path.add(var1[var3]);
- }
-
- this.push(var1);
- if (var2 != null) {
- this.jarHandler = var2.createURLStreamHandler("jar");
- }
-
- }
-
- public URLClassPath(URL[] var1) {
- this(var1, (URLStreamHandlerFactory)null);
- }
-
- public void addURL(URL var1) {
- Stack var2 = this.urls;
- synchronized(var2) {
- this.urls.add(0, var1);
- this.path.add(var1);
- }
- }
-
- public URL[] getURLs() {
- Stack var1 = this.urls;
- synchronized(var1) {
- URL[] var2 = (URL[])this.path.toArray(new URL[this.path.size()]);
- return var2;
- }
- }
-
- public Resource getResource(String var1, boolean var2) {
- Loader var3;
- for(int var4 = 0; (var3 = this.getLoader(var4)) != null; ++var4) {
- Resource var5 = var3.getResource(var1, var2);
- if (var5 != null) {
- return var5;
- }
- }
-
- return null;
- }
-
- public Resource getResource(String var1) {
- return this.getResource(var1, true);
- }
-
- public Enumeration getResources(String var1, boolean var2) {
- return new 1(this, var1, var2);
- }
-
- public Enumeration getResources(String var1) {
- return this.getResources(var1, true);
- }
-
- private synchronized Loader getLoader(int var1) {
- while(this.loaders.size() < var1 + 1) {
- URL var2;
- try {
- Stack var3 = this.urls;
- synchronized(var3) {
- var2 = (URL)this.urls.pop();
- }
- } catch (EmptyStackException var6) {
- return null;
- }
-
- if (!this.lmap.containsKey(var2)) {
- Loader var8;
- try {
- var8 = this.getLoader(var2);
- URL[] var4 = var8.getClassPath();
- if (var4 != null) {
- this.push(var4);
- }
- } catch (IOException var7) {
- continue;
- }
-
- this.loaders.add(var8);
- this.lmap.put(var2, var8);
- }
- }
-
- return (Loader)this.loaders.get(var1);
- }
-
- private Loader getLoader(URL var1) throws IOException {
- try {
- return (Loader)AccessController.doPrivileged(new 2(this, var1));
- } catch (PrivilegedActionException var3) {
- throw (IOException)var3.getException();
- }
- }
-
- private void push(URL[] var1) {
- Stack var2 = this.urls;
- synchronized(var2) {
- for(int var3 = var1.length - 1; var3 >= 0; --var3) {
- this.urls.push(var1[var3]);
- }
-
- }
- }
-
- public static URL[] pathToURLs(String var0) {
- StringTokenizer var1 = new StringTokenizer(var0, File.pathSeparator);
- URL[] var2 = new URL[var1.countTokens()];
- int var3 = 0;
-
- while(var1.hasMoreTokens()) {
- try {
- File var4 = new File(var1.nextToken());
- var2[var3++] = var4.toURL();
- var2[var3 - 1] = (new File(var4.getCanonicalPath())).toURL();
- } catch (IOException var5) {
- }
- }
-
- if (var2.length != var3) {
- URL[] var6 = new URL[var3];
- System.arraycopy(var2, 0, var6, 0, var3);
- var2 = var6;
- }
-
- return var2;
- }
-
- public URL checkURL(URL var1) {
- try {
- check(var1);
- return var1;
- } catch (Exception var3) {
- return null;
- }
- }
-
- static void check(URL var0) throws IOException {
- SecurityManager var1 = System.getSecurityManager();
- if (var1 != null) {
- Permission var2 = var0.openConnection().getPermission();
- if (var2 != null) {
- try {
- var1.checkPermission(var2);
- } catch (SecurityException var4) {
- if (var2 instanceof FilePermission && var2.getActions().indexOf("read") != -1) {
- var1.checkRead(var2.getName());
- } else {
- if (!(var2 instanceof SocketPermission) || var2.getActions().indexOf("connect") == -1) {
- throw var4;
- }
-
- var1.checkConnect(var0.getHost(), var0.getPort());
- }
- }
- }
- }
-
- }
-
- // $FF: synthetic method
- static Loader access$000(URLClassPath var0, int var1) {
- return var0.getLoader(var1);
- }
-
- // $FF: synthetic method
- static URLStreamHandler access$100(URLClassPath var0) {
- return var0.jarHandler;
- }
-
- // $FF: synthetic method
- static HashMap access$200(URLClassPath var0) {
- return var0.lmap;
- }
- }
-