JAL-3048 refactored export settings to bean+dialog with callbacks - basically works...
[jalview.git] / src / jalview / io / FileParse.java
index bf0a844..e8b5ab8 100755 (executable)
@@ -27,6 +27,7 @@ import jalview.api.FeatureSettingsModelI;
 import jalview.util.MessageManager;
 
 import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileReader;
@@ -39,8 +40,6 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.zip.GZIPInputStream;
 
-import javajs.util.Rdr;
-
 /**
  * implements a random access wrapper around a particular datasource, for
  * passing to identifyFile and AlignFile objects.
@@ -58,6 +57,12 @@ public class FileParse
 
   public File inFile = null;
 
+  private byte[] bytes; // from JavaScript
+
+  public byte[] getBytes()
+  {
+    return bytes;
+  }
   /**
    * a viewport associated with the current file operation. May be null. May
    * move to different object.
@@ -305,22 +310,49 @@ public class FileParse
    * Create a datasource for input to Jalview. See AppletFormatAdapter for the
    * types of sources that are handled.
    * 
-   * @param fileStr
-   *          - datasource locator/content
+   * @param file
+   *          - datasource locator/content as File or String
    * @param sourceType
    *          - protocol of source
    * @throws MalformedURLException
    * @throws IOException
    */
-  public FileParse(String fileStr, DataSourceType sourceType)
+  public FileParse(Object file, DataSourceType sourceType)
           throws MalformedURLException, IOException
   {
+    if (file instanceof File)
+    {
+      parse((File) file, ((File) file).getPath(), sourceType, true);
+    }
+    else
+    {
+      parse(null, file.toString(), sourceType, false);
+    }
+  }
+
+  private void parse(File file, String fileStr, DataSourceType sourceType,
+          boolean isFileObject) throws MalformedURLException, IOException
+  {
+    /**
+     * @j2sNative
+     * 
+     *            this.bytes = file && file._bytes;
+     * 
+     */
     this.dataSourceType = sourceType;
     error = false;
 
     if (sourceType == DataSourceType.FILE)
     {
-      if (checkFileSource(fileStr))
+
+      if (bytes != null)
+      {
+        // this will be from JavaScript
+        inFile = file;
+        dataIn = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(bytes)));
+        dataName = fileStr;
+      }
+      else if (checkFileSource(fileStr))
       {
         String suffixLess = extractSuffix(fileStr);
         if (suffixLess != null)
@@ -343,18 +375,16 @@ public class FileParse
     }
     else if (sourceType == DataSourceType.RELATIVE_URL)
     {
-      String data = null;
       /**
        * BH 2018 hack for no support for access-origin
        * 
        * @j2sNative
        * 
-       *            data = $.ajax({url:fileStr, async:false}).responseText;
+       * this.bytes = swingjs.JSUtil.getFileAsBytes$O(fileStr);
        * 
        */
 
-      System.out.println(data);
-      dataIn = Rdr.getBR(data);
+      dataIn = new BufferedReader(new java.io.InputStreamReader(new ByteArrayInputStream(bytes)));      
       dataName = fileStr;
 
     }
@@ -434,7 +464,8 @@ public class FileParse
     {
       // pass up the reason why we have no source to read from
       throw new IOException(MessageManager.formatMessage(
-              "exception.failed_to_read_data_from_source", new String[]
+              "exception.failed_to_read_data_from_source",
+              new String[]
               { errormessage }));
     }
     error = false;