package gnu.gcj.protocol.jar;
import java.net.URL;
import java.net.JarURLConnection;
import java.net.URLStreamHandler;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.io.IOException;
import java.util.jar.JarFile;
import java.util.Hashtable;
public class Connection extends JarURLConnection
{
static Hashtable file_cache = new Hashtable();
private JarFile jarfile;
public Connection(URL url)
throws MalformedURLException
{
super(url);
}
public synchronized JarFile getJarFile() throws java.io.IOException
{
if (!connected)
connect();
if (! doInput)
throw new ProtocolException("Can't open JarFile if doInput is false");
if (jarfile != null)
return jarfile;
URL jarFileURL = getJarFileURL ();
if (jarFileURL.getProtocol ().equals ("file")
&& jarFileURL.getHost ().equals (""))
{
if (getUseCaches())
{
jarfile = (JarFile) file_cache.get(jarFileURL);
if (jarfile == null)
{
jarfile = new JarFile (jarFileURL.getFile ());
file_cache.put (jarFileURL, jarfile);
}
}
else
jarfile = new JarFile (jarFileURL.getFile ());
}
else
{
throw new java.io.IOException("cannot create jar file from " +
jarFileURL);
}
return jarfile;
}
}