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

Reply via email to