Revision: 5244 http://sourceforge.net/p/jump-pilot/code/5244 Author: edso Date: 2016-12-04 18:18:46 +0000 (Sun, 04 Dec 2016) Log Message: ----------- handle compressed image files properly eg. tif.gz
Modified Paths: -------------- core/trunk/src/com/vividsolutions/jump/io/CompressedFile.java core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoRaster.java core/trunk/src/com/vividsolutions/jump/workbench/imagery/graphic/WorldFile.java Modified: core/trunk/src/com/vividsolutions/jump/io/CompressedFile.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/io/CompressedFile.java 2016-12-04 18:17:55 UTC (rev 5243) +++ core/trunk/src/com/vividsolutions/jump/io/CompressedFile.java 2016-12-04 18:18:46 UTC (rev 5244) @@ -337,6 +337,23 @@ return new String[]{ "gz", "bz", "bz2", "xz" }; } + /** + * returns + * second level extension for compressed files eg. "tif" for "file.tif.gz" + * all others the first extension eg. "tif" for "file.tif" + * + * @param path + * @return + */ + public static String getExtension( String path ){ + // strip compressed ext eg. .gz + if (CompressedFile.isCompressed(path)) { + path = UriUtil.removeExtension(path); + } + String ext = FileUtil.getExtension(path); + return ext; + } + public static boolean hasCompressedFileExtension(String filename) { return Arrays.asList(CompressedFile.getFileExtensions()).contains( FileUtil.getExtension(new File(filename)).toLowerCase()); @@ -352,8 +369,8 @@ public static String getTargetFileWithPath( URI uri ){ String filepath = UriUtil.getFilePath(uri); - String entry = UriUtil.getZipEntryName(uri); if (hasArchiveFileExtension(filepath)) { + String entry = UriUtil.getZipEntryName(uri); return entry; } return filepath; Modified: core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoRaster.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoRaster.java 2016-12-04 18:17:55 UTC (rev 5243) +++ core/trunk/src/com/vividsolutions/jump/workbench/imagery/geoimg/GeoRaster.java 2016-12-04 18:18:46 UTC (rev 5244) @@ -75,6 +75,7 @@ import com.sun.media.jai.codec.SeekableStream; import com.vividsolutions.jump.io.CompressedFile; import com.vividsolutions.jump.util.FileUtil; +import com.vividsolutions.jump.util.StringUtil; import com.vividsolutions.jump.workbench.Logger; import com.vividsolutions.jump.workbench.imagery.ReferencedImageException; import com.vividsolutions.jump.workbench.model.Disposable; @@ -389,8 +390,9 @@ // } static protected boolean hasFileExtension(ImageReaderSpi provider, URI uri) { - return hasFileExtension(provider, - FileUtil.getExtension(CompressedFile.getTargetFileWithPath(uri))); + String path = CompressedFile.getTargetFileWithPath(uri); + String ext = CompressedFile.getExtension(path); + return hasFileExtension(provider,ext); } static protected boolean hasFileExtension(ImageReaderSpi provider, String ext) { @@ -440,10 +442,21 @@ continue; } - Object input = createInput(uri, provider); - boolean canDec = /*provider instanceof GDALImageReaderSpi ||*/ - provider.canDecodeInput(input); - disposeInput(input); + Object input = null; + boolean canDec = false; + try { + input = createInput(uri, provider); + canDec = /*provider instanceof GDALImageReaderSpi ||*/ + provider.canDecodeInput(input); + } catch (Exception e) { + // hmm, failing to create an input is fatal for this reader + // some providers insist on a physical file, which we cannot deliver for compressed sources + Logger.debug(e); + continue; + } finally { + disposeInput(input); + } + boolean hasNoExts = hasNoFileExtensions(provider); boolean hasExt = hasFileExtension(provider, uri); @@ -560,7 +573,7 @@ } throw new IOException("Couldn't create an input for '" + uri - + "' accepted by reader '" + loader + "'"); + + "' accepted ("+StringUtil.toCommaDelimitedString(intypes)+")by reader '" + loader + "'"); } return input; Modified: core/trunk/src/com/vividsolutions/jump/workbench/imagery/graphic/WorldFile.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/workbench/imagery/graphic/WorldFile.java 2016-12-04 18:17:55 UTC (rev 5243) +++ core/trunk/src/com/vividsolutions/jump/workbench/imagery/graphic/WorldFile.java 2016-12-04 18:18:46 UTC (rev 5244) @@ -143,10 +143,12 @@ public static List<String> generateWorldFileExtensions(String filename) { ArrayList<String> exts = new ArrayList<String>(); String img_ext; + if ( CompressedFile.hasCompressedFileExtension(filename) ) img_ext = FileUtil.getExtension(UriUtil.removeExtension(filename)); else img_ext = FileUtil.getExtension(filename); + if (img_ext.length()>=3) exts.add(img_ext.substring(0, 1) + img_ext.substring(2) + "w"); exts.add(img_ext + "w"); @@ -170,7 +172,10 @@ String fileName = CompressedFile.getTargetFileWithPath(origuri); fileName = UriUtil.getFileName(fileName); for (String ext : generateWorldFileExtensions(fileName)) { - String wf_name = UriUtil.removeExtension(fileName) + "." + ext; + String wf_base = UriUtil.removeExtension(fileName); + if (CompressedFile.isCompressed(fileName)) + wf_base = UriUtil.removeExtension(wf_base); + String wf_name = wf_base + "." + ext; URI wf_uri = CompressedFile.replaceTargetFileName(origuri, wf_name); InputStream is = null; try { ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel