diff options
Diffstat (limited to 'openjdk/sun/net/www/protocol/jar/JarFileFactory.java')
-rw-r--r-- | openjdk/sun/net/www/protocol/jar/JarFileFactory.java | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/openjdk/sun/net/www/protocol/jar/JarFileFactory.java b/openjdk/sun/net/www/protocol/jar/JarFileFactory.java deleted file mode 100644 index af9f676f..00000000 --- a/openjdk/sun/net/www/protocol/jar/JarFileFactory.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/*IKVM*/ -/* - * Modified for IKVM by Jeroen Frijters on May 22, 2007. - * - * This is a merged version of the Windows & Solaris platform specific versions. - * Since the IKVM class library binary can be used both on Windows and on *nix, - * I've merged the platform specific classes into a generic class that at - * runtime determines if it runs on Windows or not. - * -/*IKVM*/ - -package sun.net.www.protocol.jar; - -import java.io.IOException; -import java.io.FileNotFoundException; -import java.net.URL; -import java.net.URLConnection; -import java.util.HashMap; -import java.util.jar.JarFile; -import java.security.Permission; -import sun.net.util.URLUtil; - -/* A factory for cached JAR file. This class is used to both retrieve - * and cache Jar files. - * - * @author Benjamin Renaud - * @since JDK1.2 - */ -class JarFileFactory implements URLJarFile.URLJarFileCloseController { - - /* the url to file cache */ - private static HashMap<String, JarFile> fileCache = new HashMap<String, JarFile>(); - - /* the file to url cache */ - private static HashMap<JarFile, URL> urlCache = new HashMap<JarFile, URL>(); - - URLConnection getConnection(JarFile jarFile) throws IOException { - URL u = urlCache.get(jarFile); - if (u != null) - return u.openConnection(); - - return null; - } - - public JarFile get(URL url) throws IOException { - return get(url, true); - } - - JarFile get(URL url, boolean useCaches) throws IOException { - if (ikvm.internal.Util.WINDOWS && url.getProtocol().equalsIgnoreCase("file")) { - // Deal with UNC pathnames specially. See 4180841 - - String host = url.getHost(); - if (host != null && !host.equals("") && - !host.equalsIgnoreCase("localhost")) { - - url = new URL("file", "", "//" + host + url.getPath()); - } - } - - JarFile result = null; - JarFile local_result = null; - - if (useCaches) { - synchronized (this) { - result = getCachedJarFile(url); - } - if (result == null) { - local_result = URLJarFile.getJarFile(url, this); - synchronized (this) { - result = getCachedJarFile(url); - if (result == null) { - fileCache.put(URLUtil.urlNoFragString(url), local_result); - urlCache.put(local_result, url); - result = local_result; - } else { - if (local_result != null) { - local_result.close(); - } - } - } - } - } else { - result = URLJarFile.getJarFile(url, this); - } - if (result == null) - throw new FileNotFoundException(url.toString()); - - return result; - } - - /** - * Callback method of the URLJarFileCloseController to - * indicate that the JarFile is close. This way we can - * remove the JarFile from the cache - */ - public void close(JarFile jarFile) { - URL urlRemoved = urlCache.remove(jarFile); - if( urlRemoved != null) { - fileCache.remove(URLUtil.urlNoFragString(urlRemoved)); - } - } - - private JarFile getCachedJarFile(URL url) { - JarFile result = fileCache.get(URLUtil.urlNoFragString(url)); - - /* if the JAR file is cached, the permission will always be there */ - if (result != null) { - Permission perm = getPermission(result); - if (perm != null) { - SecurityManager sm = System.getSecurityManager(); - if (sm != null) { - try { - sm.checkPermission(perm); - } catch (SecurityException se) { - // fallback to checkRead/checkConnect for pre 1.2 - // security managers - if ((perm instanceof java.io.FilePermission) && - perm.getActions().indexOf("read") != -1) { - sm.checkRead(perm.getName()); - } else if ((perm instanceof - java.net.SocketPermission) && - perm.getActions().indexOf("connect") != -1) { - sm.checkConnect(url.getHost(), url.getPort()); - } else { - throw se; - } - } - } - } - } - return result; - } - - private Permission getPermission(JarFile jarFile) { - try { - URLConnection uc = (URLConnection)getConnection(jarFile); - if (uc != null) - return uc.getPermission(); - } catch (IOException ioe) { - // gulp - } - - return null; - } -} |