Merge branch 'develop' into developtomchmmer
[jalview.git] / src / jalview / gui / Preferences.java
index df35b5e..a0a7511 100755 (executable)
@@ -25,6 +25,8 @@ import jalview.bin.Cache;
 import jalview.gui.Help.HelpId;
 import jalview.gui.StructureViewer.ViewerType;
 import jalview.hmmer.HmmerCommand;
+import jalview.io.BackupFiles;
+import jalview.io.BackupFilesPresetEntry;
 import jalview.io.FileFormatI;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
@@ -37,6 +39,7 @@ import jalview.urls.UrlLinkTableModel;
 import jalview.urls.api.UrlProviderFactoryI;
 import jalview.urls.api.UrlProviderI;
 import jalview.urls.desktop.DesktopUrlProviderFactory;
+import jalview.util.FileUtils;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
 import jalview.util.UrlConstants;
@@ -61,6 +64,7 @@ import javax.swing.JColorChooser;
 import javax.swing.JFileChooser;
 import javax.swing.JInternalFrame;
 import javax.swing.JPanel;
+import javax.swing.JTextField;
 import javax.swing.ListSelectionModel;
 import javax.swing.RowFilter;
 import javax.swing.RowSorter;
@@ -84,6 +88,15 @@ import ext.edu.ucsf.rbvi.strucviz2.StructureManager;
  */
 public class Preferences extends GPreferences
 {
+  // suggested list delimiter character
+  public static final String COMMA = ",";
+
+  public static final String HMMSEARCH_SEQCOUNT = "HMMSEARCH_SEQCOUNT";
+
+  public static final String HMMINFO_GLOBAL_BACKGROUND = "HMMINFO_GLOBAL_BACKGROUND";
+
+  public static final String HMMALIGN_TRIM_TERMINI = "HMMALIGN_TRIM_TERMINI";
+
   public static final String ENABLE_SPLIT_FRAME = "ENABLE_SPLIT_FRAME";
 
   public static final String SCALE_PROTEIN_TO_CDNA = "SCALE_PROTEIN_TO_CDNA";
@@ -108,7 +121,7 @@ public class Preferences extends GPreferences
   
   public static final String HMMER_PATH = "HMMER_PATH";
 
-  public static final String HMMSEARCH_DB_PATHS = "HMMSEARCH_DB_PATHS";
+  public static final String CYGWIN_PATH = "CYGWIN_PATH";
 
   public static final String HMMSEARCH_DBS = "HMMSEARCH_DBS";
 
@@ -177,8 +190,6 @@ public class Preferences extends GPreferences
 
   JInternalFrame frame;
 
-  DasSourceBrowser dasSource;
-
   private WsPreferences wsPrefs;
 
   private OptionsParam promptEachTimeOpt = new OptionsParam(
@@ -199,8 +210,6 @@ public class Preferences extends GPreferences
     super();
     frame = new JInternalFrame();
     frame.setContentPane(this);
-    dasSource = new DasSourceBrowser();
-    dasTab.add(dasSource, BorderLayout.CENTER);
     wsPrefs = new WsPreferences();
     wsTab.add(wsPrefs, BorderLayout.CENTER);
     int width = 500, height = 450;
@@ -218,8 +227,8 @@ public class Preferences extends GPreferences
     /*
      * Set HMMER tab defaults
      */
-    hmmrTrimTermini.setSelected(Cache.getDefault("TRIM_TERMINI", false));
-    if (Cache.getDefault("USE_UNIPROT", false))
+    hmmrTrimTermini.setSelected(Cache.getDefault(HMMALIGN_TRIM_TERMINI, false));
+    if (Cache.getDefault(HMMINFO_GLOBAL_BACKGROUND, false))
     {
       hmmerBackgroundUniprot.setSelected(true);
     }
@@ -228,14 +237,14 @@ public class Preferences extends GPreferences
       hmmerBackgroundAlignment.setSelected(true);
     }
     hmmerSequenceCount
-            .setText(Cache.getProperty("SEQUENCES_TO_KEEP"));
+            .setText(Cache.getProperty(HMMSEARCH_SEQCOUNT));
     hmmerPath.setText(Cache.getProperty(HMMER_PATH));
     hmmerPath.addActionListener(new ActionListener()
     {
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        validateHMMERPath(true);
+        validateHmmerPath();
       }
     });
     hmmerPath.addFocusListener(new FocusAdapter()
@@ -243,9 +252,34 @@ public class Preferences extends GPreferences
       @Override
       public void focusLost(FocusEvent e)
       {
-        validateHMMERPath(true);
+        validateHmmerPath();
       }
     });
+    if (cygwinPath != null)
+    {
+      String path = Cache.getProperty(CYGWIN_PATH);
+      if (path == null)
+      {
+        path = FileUtils.getPathTo("bash");
+      }
+      cygwinPath.setText(path);
+      cygwinPath.addActionListener(new ActionListener()
+      {
+        @Override
+        public void actionPerformed(ActionEvent e)
+        {
+          validateCygwinPath();
+        }
+      });
+      cygwinPath.addFocusListener(new FocusAdapter()
+      {
+        @Override
+        public void focusLost(FocusEvent e)
+        {
+          validateCygwinPath();
+        }
+      });
+    }
 
     /*
      * Set Visual tab defaults
@@ -373,7 +407,7 @@ public class Preferences extends GPreferences
     gapLabel.setEnabled(!useLegacyGap.isSelected());
     gapColour.setEnabled(!useLegacyGap.isSelected());
     showHiddenAtStart
-            .setSelected(Cache.getDefault(SHOW_OV_HIDDEN_AT_START, true));
+            .setSelected(Cache.getDefault(SHOW_OV_HIDDEN_AT_START, false));
 
     /*
      * Set Structure tab defaults.
@@ -594,6 +628,12 @@ public class Preferences extends GPreferences
 
     annotations_actionPerformed(null); // update the display of the annotation
                                        // settings
+    
+    
+    /*
+     * Set Backups tab defaults
+     */
+    loadLastSavedBackupsOptions();
   }
 
   /**
@@ -706,14 +746,17 @@ public class Preferences extends GPreferences
     /*
      * Save HMMER settings
      */
-    Cache.applicationProperties.setProperty("TRIM_TERMINI",
+    Cache.applicationProperties.setProperty(HMMALIGN_TRIM_TERMINI,
             Boolean.toString(hmmrTrimTermini.isSelected()));
-    Cache.applicationProperties.setProperty("USE_UNIPROT",
+    Cache.applicationProperties.setProperty(HMMINFO_GLOBAL_BACKGROUND,
             Boolean.toString(hmmerBackgroundUniprot.isSelected()));
-    Cache.applicationProperties.setProperty("SEQUENCES_TO_KEEP",
+    Cache.applicationProperties.setProperty(HMMSEARCH_SEQCOUNT,
             hmmerSequenceCount.getText());
-    Cache.applicationProperties.setProperty(HMMER_PATH,
-            hmmerPath.getText());
+    Cache.setOrRemove(HMMER_PATH, hmmerPath.getText());
+    if (cygwinPath != null)
+    {
+      Cache.setOrRemove(CYGWIN_PATH, cygwinPath.getText());
+    }
     AlignFrame[] frames = Desktop.getAlignFrames();
     if (frames != null && frames.length > 0)
     {
@@ -723,8 +766,8 @@ public class Preferences extends GPreferences
       }
     }
     
-    hmmrTrimTermini.setSelected(Cache.getDefault("TRIM_TERMINI", false));
-    if (Cache.getDefault("USE_UNIPROT", false))
+    hmmrTrimTermini.setSelected(Cache.getDefault(HMMALIGN_TRIM_TERMINI, false));
+    if (Cache.getDefault(HMMINFO_GLOBAL_BACKGROUND, false))
     {
       hmmerBackgroundUniprot.setSelected(true);
     }
@@ -733,7 +776,7 @@ public class Preferences extends GPreferences
       hmmerBackgroundAlignment.setSelected(true);
     }
     hmmerSequenceCount
-            .setText(Cache.getProperty("SEQUENCES_TO_KEEP"));
+            .setText(Cache.getProperty(HMMSEARCH_SEQCOUNT));
     hmmerPath.setText(Cache.getProperty(HMMER_PATH));
 
     /*
@@ -878,8 +921,31 @@ public class Preferences extends GPreferences
     Cache.applicationProperties.setProperty("PAD_GAPS",
             Boolean.toString(padGaps.isSelected()));
 
-    dasSource.saveProperties(Cache.applicationProperties);
     wsPrefs.updateAndRefreshWsMenuConfig(false);
+
+    /*
+     * Save Backups settings
+     */
+    Cache.applicationProperties.setProperty(BackupFiles.ENABLED,
+            Boolean.toString(enableBackupFiles.isSelected()));
+    int preset = getComboIntStringKey(backupfilesPresetsCombo);
+    Cache.applicationProperties.setProperty(BackupFiles.NS + "_PRESET", Integer.toString(preset));
+
+    if (preset == BackupFilesPresetEntry.BACKUPFILESSCHEMECUSTOM)
+    {
+      BackupFilesPresetEntry customBFPE = getBackupfilesCurrentEntry();
+      BackupFilesPresetEntry.backupfilesPresetEntriesValues.put(
+              BackupFilesPresetEntry.BACKUPFILESSCHEMECUSTOM, customBFPE);
+      Cache.applicationProperties
+              .setProperty(BackupFilesPresetEntry.CUSTOMCONFIG,
+                      customBFPE.toString());
+    }
+
+    BackupFilesPresetEntry savedBFPE = BackupFilesPresetEntry.backupfilesPresetEntriesValues
+            .get(preset);
+    Cache.applicationProperties.setProperty(
+            BackupFilesPresetEntry.SAVEDCONFIG, savedBFPE.toString());
+
     Cache.saveProperties();
     Desktop.instance.doConfigureStructurePrefs();
     try
@@ -1204,7 +1270,7 @@ public class Preferences extends GPreferences
   {
     useLegacyGap.setSelected(false);
     useLegacyGaps_actionPerformed(null);
-    showHiddenAtStart.setSelected(true);
+    showHiddenAtStart.setSelected(false);
     hiddenColour.setBackground(
             jalview.renderer.OverviewResColourFinder.OVERVIEW_DEFAULT_HIDDEN);
   }
@@ -1264,23 +1330,27 @@ public class Preferences extends GPreferences
   }
   
   /**
-   * Returns true if hmmer path is to a folder that contains an executable
-   * hmmbuild or hmmbuild.exe, else false (optionally after showing a warning
-   * dialog)
+   * Returns true if the given text field contains a path to a folder that
+   * contains an executable with the given name, else false (after showing a
+   * warning dialog). The executable name will be tried with .exe appended if not
+   * found.
+   * 
+   * @param textField
+   * @param executable
    */
-  @Override
-  protected boolean validateHMMERPath(boolean showWarning)
+  protected boolean validateExecutablePath(JTextField textField, String executable)
   {
-    String folder = hmmerPath.getText().trim();
+    String folder = textField.getText().trim();
 
-    if (HmmerCommand.getExecutable(HmmerCommand.HMMBUILD, folder) != null)
+    if (FileUtils.getExecutable(executable, folder) != null)
     {
       return true;
     }
-    if (showWarning && folder.length() > 0)
+    if (folder.length() > 0)
     {
       JvOptionPane.showInternalMessageDialog(Desktop.desktop,
-              MessageManager.getString("label.hmmbuild_not_found"),
+              MessageManager.formatMessage("label.executable_not_found",
+                      executable),
               MessageManager.getString("label.invalid_folder"),
               JvOptionPane.ERROR_MESSAGE);
     }
@@ -1357,6 +1427,18 @@ public class Preferences extends GPreferences
     }
   }
 
+  @Override
+  protected void validateHmmerPath()
+  {
+    validateExecutablePath(hmmerPath, HmmerCommand.HMMBUILD);
+  }
+
+  @Override
+  protected void validateCygwinPath()
+  {
+    validateExecutablePath(cygwinPath, "run");
+  }
+
   public class OptionsParam
   {
     private String name;