JAL-1286 URL stream reader tries to use a GZIPInputStream if URL ends in .gz
[jalview.git] / src / jalview / io / FileParse.java
index 62237d9..f9440fa 100755 (executable)
@@ -19,6 +19,7 @@ package jalview.io;
 
 import java.io.*;
 import java.net.*;
+import java.util.zip.GZIPInputStream;
 
 /**
  * implements a random access wrapper around a particular datasource, for
@@ -152,7 +153,33 @@ public class FileParse
   {
     errormessage = "URL NOT FOUND";
     URL url = new URL(fileStr);
-    dataIn = new BufferedReader(new InputStreamReader(url.openStream()));
+    //
+    // GZIPInputStream code borrowed from Aquaria (soon to be open sourced) via Kenny Sabir
+    Exception e=null;
+    if (fileStr.endsWith(".gz")) {
+      try {
+          InputStream inputStream = url.openStream();
+          dataIn = new BufferedReader(new InputStreamReader(new GZIPInputStream(inputStream)));
+          dataIn.mark(2048);
+          dataIn.read();
+          dataIn.reset();
+          
+          dataName = fileStr;
+          return false;
+      } catch (Exception ex) {
+        e=ex;
+      }
+    }
+
+    try {
+      dataIn = new BufferedReader(new InputStreamReader(url.openStream()));
+    } catch (IOException q) {
+      if (e!=null)
+      {
+        throw new IOException("Failed to resolve GZIP stream", e);
+      }
+      throw q;
+    }
     // record URL as name of datasource.
     dataName = fileStr;
     return false;