package aimax.osm.reader;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/**
* Adds bz2 extraction functionality to the <code>FilteringOsmReader</code>.
* The implementation uses the Apache Commons Compress library
* (see http://commons.apache.org/compress/). Please add the
* corresponding jar file to your class path, otherwise the
* unpack functionality will not be available.
* @author Ruediger Lunde
*/
public class Bz2OsmReader extends FilteringOsmReader {
private Class<?> compressorClass;
/**
* Tries to find the <code>BZip2CompressorInputStream</code> class using
* reflection and creates the reader.
*/
public Bz2OsmReader() {
try {
compressorClass = Class.forName
("org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream");
} catch (ClassNotFoundException e) {
// ok - just disable bz2 mode.
}
}
@SuppressWarnings("resource")
protected InputStream createFileStream(File file) throws Exception {
InputStream result = new BufferedInputStream(new FileInputStream(file));
try {
if (compressorClass != null && file.getName().endsWith(".bz2")) {
Constructor<?> c = compressorClass.getConstructor
(new Class[] {InputStream.class});
result = (InputStream) c.newInstance(result);
}
} catch (InvocationTargetException e) {
LOG.warning("Failure occured while reading a map. Possibly unpacking problem.");
throw e;
}
return result;
}
public String[] fileFormatDescriptions() {
if (compressorClass != null)
return new String[] {"OSM File (osm)", "OSM BZip2 (osm.bz2)"};
else
return new String[] {"OSM File (osm)"};
}
public String[] fileFormatExtensions() {
if (compressorClass != null)
return new String[] {"osm", "bz2"};
else
return new String[] {"osm"};
}
}