Merge branch 'develop' into features/r2_11_2_alphafold/JAL-629
[jalview.git] / src / jalview / io / FileLoader.java
index dcfdd22..449c685 100755 (executable)
  */
 package jalview.io;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import javax.swing.SwingUtilities;
+
 import jalview.api.ComplexAlignFile;
 import jalview.api.FeatureSettingsModelI;
 import jalview.api.FeaturesDisplayedI;
@@ -33,27 +40,15 @@ import jalview.datamodel.SequenceI;
 import jalview.gui.AlignFrame;
 import jalview.gui.AlignViewport;
 import jalview.gui.Desktop;
-import jalview.gui.Jalview2XML;
 import jalview.gui.JvOptionPane;
+import jalview.gui.QuitHandler;
 import jalview.json.binding.biojson.v1.ColourSchemeMapper;
+import jalview.project.Jalview2XML;
 import jalview.schemes.ColourSchemeI;
 import jalview.structure.StructureSelectionManager;
 import jalview.util.MessageManager;
 import jalview.ws.utils.UrlDownloadClient;
 
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import javax.swing.SwingUtilities;
-
 public class FileLoader implements Runnable
 {
   String file;
@@ -102,7 +97,8 @@ public class FileLoader implements Runnable
           DataSourceType protocol, FileFormatI format)
   {
     this.viewport = viewport;
-    if (file instanceof File) {
+    if (file instanceof File)
+    {
       this.selectedFile = (File) file;
       file = selectedFile.getPath();
     }
@@ -214,6 +210,7 @@ public class FileLoader implements Runnable
   protected AlignFrame _LoadFileWaitTillLoaded()
   {
     this.run();
+
     return alignFrame;
   }
 
@@ -276,6 +273,7 @@ public class FileLoader implements Runnable
             ? "Copied From Clipboard"
             : file;
     Runtime rt = Runtime.getRuntime();
+
     try
     {
       if (Desktop.instance != null)
@@ -290,7 +288,8 @@ public class FileLoader implements Runnable
           format = new IdentifyFile().identify(source, false);
           // identify stream and rewind rather than close
         }
-        else if (selectedFile != null) {
+        else if (selectedFile != null)
+        {
           format = new IdentifyFile().identify(selectedFile, protocol);
         }
         else
@@ -314,6 +313,7 @@ public class FileLoader implements Runnable
                   MessageManager.getString("label.couldnt_read_data"),
                   JvOptionPane.WARNING_MESSAGE);
         }
+        this.setShouldBeSaved();
         return;
       }
       // TODO: cache any stream datasources as a temporary file (eg. PDBs
@@ -338,7 +338,9 @@ public class FileLoader implements Runnable
                   "IMPLEMENTATION ERROR: Cannot read consecutive Jalview XML projects from a stream.");
           // We read the data anyway - it might make sense.
         }
-        alignFrame = new Jalview2XML(raiseGUI).loadJalviewAlign(file);
+        // BH 2018 switch to File object here instead of filename
+        alignFrame = new Jalview2XML(raiseGUI).loadJalviewAlign(
+                selectedFile == null ? file : selectedFile);
       }
       else
       {
@@ -366,27 +368,29 @@ public class FileLoader implements Runnable
                       file.lastIndexOf("."));
               String tempStructureFileStr = createNamedJvTempFile(
                       urlLeafName, structExt);
-              
+
               // BH - switching to File object here so as to hold
               // ._bytes array directly
               File tempFile = new File(tempStructureFileStr);
               UrlDownloadClient.download(file, tempFile);
-              
-              al = fa.readFile(tempFile, DataSourceType.FILE,
-                      format);
+
+              al = fa.readFile(tempFile, DataSourceType.FILE, format);
               source = fa.getAlignFile();
             }
             else
             {
-              if (selectedFile == null) {
-                al = fa.readFile(file, protocol, format);
-                
-              } else {
-                al = fa.readFile(selectedFile, protocol, format);
-                             }
+              if (selectedFile == null)
+              {
+                al = fa.readFile(null, file, protocol, format);
+
+              }
+              else
+              {
+                al = fa.readFile(selectedFile, null, protocol, format);
+              }
               source = fa.getAlignFile(); // keep reference for later if
-              
-                                          // necessary.
+
+              // necessary.
             }
           }
         } catch (java.io.IOException ex)
@@ -420,12 +424,9 @@ public class FileLoader implements Runnable
                   .getFeatureColourScheme();
           if (viewport != null)
           {
-            if (proxyColourScheme != null)
-            {
-              viewport.applyFeaturesStyle(proxyColourScheme);
-            }
             // append to existing alignment
             viewport.addAlignment(al, title);
+            viewport.applyFeaturesStyle(proxyColourScheme);
           }
           else
           {
@@ -486,12 +487,18 @@ public class FileLoader implements Runnable
               // that perform queries to find the 'current working alignment'
               Desktop.addInternalFrame(alignFrame, title,
                       AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
+
+              /*
+               * for an Overview automatically opened with alignment,
+               * set its title now alignFrame title has been set
+               */
+              alignFrame.alignPanel.setOverviewTitle(alignFrame);
             }
 
             try
             {
-              alignFrame.setMaximum(jalview.bin.Cache
-                      .getDefault("SHOW_FULLSCREEN", false));
+              alignFrame.setMaximum(
+                      Cache.getDefault("SHOW_FULLSCREEN", false));
             } catch (java.beans.PropertyVetoException ex)
             {
             }
@@ -614,6 +621,7 @@ public class FileLoader implements Runnable
       Desktop.instance.stopLoading();
     }
 
+    this.setShouldBeSaved();
   }
 
   /**
@@ -639,21 +647,21 @@ public class FileLoader implements Runnable
     return tempStructFile.toString();
   }
 
-  /**
-   * 
-   * @param file a File, or a String which is a name of a file
-   * @return
-   * @throws FileNotFoundException 
+  /*
+   * set whether quit should ask to save when just loaded this source
    */
-  @SuppressWarnings("unused")
-  public static BufferedReader getBuffereReader(Object file) throws FileNotFoundException {
-    if (file instanceof String)
-      return new BufferedReader(new FileReader((String) file));
-    
-    byte[] bytes = /** @j2sNative file._bytes || */ null;
-    if (bytes != null)
-      return new BufferedReader(new InputStreamReader(new ByteArrayInputStream(bytes)));
-    return  new BufferedReader(new FileReader((File) file));
+  private void setShouldBeSaved()
+  {
+    if (protocol == null)
+      return;
+    AlignFrame af = this.alignFrame;
+    if (af == null)
+      return;
+    AlignViewport avp = af.getViewport();
+    if (avp == null)
+      return;
+    avp.setSavedUpToDate(!protocol.isDynamic(),
+            QuitHandler.Message.UNSAVED_ALIGNMENTS);
   }
 
 }