Merge branch 'develop' into update_212_Dec_merge_with_21125_chamges
[jalview.git] / src / jalview / util / HttpUtils.java
index 0454cab..ca311ae 100644 (file)
@@ -20,6 +20,9 @@
  */
 package jalview.util;
 
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
@@ -73,10 +76,10 @@ public class HttpUtils
   {
     return file.startsWith("http://") || file.startsWith("https://");
   }
+  
 
   /**
    * wrapper to get/post to a URL or check headers
-   * 
    * @param url
    * @param ids
    * @param readTimeout
@@ -84,8 +87,8 @@ public class HttpUtils
    * @throws IOException
    * @throws ProtocolException
    */
-  public static boolean checkUrlAvailable(URL url, int readTimeout)
-          throws IOException, ProtocolException
+  public static boolean checkUrlAvailable(URL url,
+          int readTimeout) throws IOException, ProtocolException
   {
     // System.out.println(System.currentTimeMillis() + " " + url);
 
@@ -101,4 +104,46 @@ public class HttpUtils
     return connection.getResponseCode() == 200;
   }
 
+  /**
+   * download from given URL and return a pointer to temporary file
+   */
+  public static File fetchURLToTemp(String url) throws OutOfMemoryError,
+          IOException
+  {
+    long time = System.currentTimeMillis();
+    URL rcall = new URL(url);
+
+    InputStream is = new BufferedInputStream(rcall.openStream());
+    File outFile = null;
+    try
+    {
+      outFile = File.createTempFile("jalview", ".xml");
+      outFile.deleteOnExit();
+      if (outFile.length() == 0)
+      {
+        outFile.delete();
+        return null;
+      }
+    } catch (Exception ex)
+    {
+    }
+
+    if (outFile != null)
+    {
+      FileOutputStream fio = new FileOutputStream(outFile);
+      byte[] bb = new byte[32 * 1024];
+      int l;
+      while ((l = is.read(bb)) > 0)
+      {
+        fio.write(bb, 0, l);
+      }
+      fio.close();
+      is.close();
+      return outFile;
+    }
+    else
+    {
+      return null;
+    }
+  }
 }