// **********************************************************************
//
// <copyright>
//
// BBN Technologies
// 10 Moulton Street
// Cambridge, MA 02138
// (617) 873-8000
//
// Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/io/JarInputReader.java,v $
// $RCSfile: JarInputReader.java,v $
// $Revision: 1.3.2.2 $
// $Date: 2007/06/21 21:41:30 $
// $Author: dietrick $
//
// **********************************************************************
package com.bbn.openmap.io;
import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import com.bbn.openmap.util.Debug;
/**
* An InputReader to handle entries in a Jar file.
*/
public class JarInputReader extends StreamInputReader {
/** Where to go to hook up with a resource. */
protected URL inputURL = null;
protected JarFile jarFile = null;
protected String jarFileName = null;
protected String jarEntryName = null;
/**
* Create a JarInputReader win the path to a jar file, and the
* entry name. The entry name should be a path to the entry from
* the internal root of the jar file.
*/
public JarInputReader(String jarFilePath, String jarEntryName)
throws IOException {
if (Debug.debugging("binaryfile")) {
Debug.output("JarInputReader created for " + jarEntryName + " in "
+ jarFilePath);
}
this.jarFileName = jarFilePath;
this.jarEntryName = jarEntryName;
reopen();
name = jarFilePath + "!" + jarEntryName;
}
/**
* Reset the InputStream to the beginning, by closing the current
* connection and reopening it.
*/
public void reopen() throws IOException {
super.reopen();
Debug.message("binaryfile", "JarInputReader: reopening jarFile "
+ jarFileName);
if (jarFile != null)
jarFile.close();
jarFile = null;
jarFile = new JarFile(URLDecoder.decode(jarFileName, "UTF-8"));
JarEntry entry = jarFile.getJarEntry(jarEntryName);
inputStream = jarFile.getInputStream(entry);
if (inputStream == null) {
Debug.error("JarInputReader: Problem getting input stream for "
+ jarEntryName + " in " + jarFileName);
}
}
/**
* Closes the underlying file
*
* @exception IOException Any IO errors encountered in accessing
* the file
*/
public void close() throws IOException {
jarFile.close();
super.close();
}
}