update spikes/mungo from JAL-3076 patch branch
[jalview.git] / src / jalview / gui / AlignFrame.java
index 5fa168d..9de9e3b 100644 (file)
@@ -62,12 +62,6 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.gui.ColourMenuHelper.ColourChangeListener;
 import jalview.gui.ViewSelectionMenu.ViewSetProvider;
-import jalview.hmmer.HMMAlign;
-import jalview.hmmer.HMMBuild;
-import jalview.hmmer.HMMERParamStore;
-import jalview.hmmer.HMMERPreset;
-import jalview.hmmer.HMMSearch;
-import jalview.hmmer.HmmerCommand;
 import jalview.io.AlignmentProperties;
 import jalview.io.AnnotationFile;
 import jalview.io.BioJsHTMLOutput;
@@ -101,9 +95,6 @@ import jalview.ws.DBRefFetcher.FetchFinishedListenerI;
 import jalview.ws.jws1.Discoverer;
 import jalview.ws.jws2.Jws2Discoverer;
 import jalview.ws.jws2.jabaws2.Jws2Instance;
-import jalview.ws.params.ArgumentI;
-import jalview.ws.params.ParamDatastoreI;
-import jalview.ws.params.WsParamSetI;
 import jalview.ws.seqfetcher.DbSourceProxy;
 
 import java.awt.BorderLayout;
@@ -133,25 +124,22 @@ import java.awt.print.PrinterJob;
 import java.beans.PropertyChangeEvent;
 import java.io.File;
 import java.io.FileWriter;
-import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Deque;
-import java.util.HashSet;
+import java.util.Enumeration;
+import java.util.Hashtable;
 import java.util.List;
-import java.util.Set;
 import java.util.Vector;
 
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JEditorPane;
-import javax.swing.JFileChooser;
 import javax.swing.JInternalFrame;
 import javax.swing.JLayeredPane;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
 import javax.swing.JScrollPane;
 import javax.swing.SwingUtilities;
 
@@ -164,6 +152,7 @@ import javax.swing.SwingUtilities;
 public class AlignFrame extends GAlignFrame implements DropTargetListener,
         IProgressIndicator, AlignViewControllerGuiI, ColourChangeListener
 {
+
   public static final int DEFAULT_WIDTH = 700;
 
   public static final int DEFAULT_HEIGHT = 500;
@@ -189,7 +178,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    */
   String fileName = null;
 
-
   /**
    * Creates a new AlignFrame object with specific width and height.
    * 
@@ -774,7 +762,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       ap.av.updateConservation(ap);
       ap.av.updateConsensus(ap);
       ap.av.updateStrucConsensus(ap);
-      ap.av.initInformationWorker(ap);
     }
   }
 
@@ -917,9 +904,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     showConsensusHistogram.setSelected(av.isShowConsensusHistogram());
     showSequenceLogo.setSelected(av.isShowSequenceLogo());
     normaliseSequenceLogo.setSelected(av.isNormaliseSequenceLogo());
-    showInformationHistogram.setSelected(av.isShowInformationHistogram());
-    showHMMSequenceLogo.setSelected(av.isShowHMMSequenceLogo());
-    normaliseHMMSequenceLogo.setSelected(av.isNormaliseHMMSequenceLogo());
 
     ColourMenuHelper.setColourSelected(colourMenu,
             av.getGlobalColourScheme());
@@ -1011,198 +995,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   }
 
   @Override
-  public void hmmBuild_actionPerformed(boolean withDefaults)
-  {
-    if (!alignmentIsSufficient(1))
-    {
-      return;
-    }
-
-    /*
-     * get default parameters, and optionally show a dialog
-     * to allow them to be modified
-     */
-    ParamDatastoreI store = HMMERParamStore.forBuild(viewport);
-    List<ArgumentI> args = store.getServiceParameters();
-
-    if (!withDefaults)
-    {
-      WsParamSetI set = new HMMERPreset();
-      WsJobParameters params = new WsJobParameters(store, set, args);
-      if (params.showRunDialog())
-      {
-        args = params.getJobParams();
-      }
-      else
-      {
-        return; // user cancelled
-      }
-    }
-    new Thread(new HMMBuild(this, args)).start();
-  }
-
-  @Override
-  public void hmmAlign_actionPerformed(boolean withDefaults)
-  {
-    if (!(checkForHMM() && alignmentIsSufficient(2)))
-    {
-      return;
-    }
-
-    /*
-     * get default parameters, and optionally show a dialog
-     * to allow them to be modified
-     */
-    ParamDatastoreI store = HMMERParamStore.forAlign(viewport);
-    List<ArgumentI> args = store.getServiceParameters();
-
-    if (!withDefaults)
-    {
-      WsParamSetI set = new HMMERPreset();
-      WsJobParameters params = new WsJobParameters(store, set, args);
-      if (params.showRunDialog())
-      {
-        args = params.getJobParams();
-      }
-      else
-      {
-        return; // user cancelled
-      }
-    }
-    new Thread(new HMMAlign(this, args)).start();
-  }
-
-  @Override
-  public void hmmSearch_actionPerformed(boolean withDefaults)
-  {
-    if (!checkForHMM())
-    {
-      return;
-    }
-
-    /*
-     * get default parameters, and (if requested) show 
-     * dialog to allow modification
-     */
-    ParamDatastoreI store = HMMERParamStore.forSearch(viewport);
-    List<ArgumentI> args = store.getServiceParameters();
-
-    if (!withDefaults)
-    {
-      WsParamSetI set = new HMMERPreset();
-      WsJobParameters params = new WsJobParameters(store, set, args);
-      if (params.showRunDialog())
-      {
-        args = params.getJobParams();
-      }
-      else
-      {
-        return; // user cancelled
-      }
-    }
-    new Thread(new HMMSearch(this, args)).start();
-    alignPanel.repaint();
-  }
-
-  /**
-   * Checks if the alignment has at least one hidden Markov model, if not shows
-   * a dialog advising to run hmmbuild or load an HMM profile
-   * 
-   * @return
-   */
-  private boolean checkForHMM()
-  {
-    if (viewport.getAlignment().getHmmSequences().isEmpty())
-    {
-      JOptionPane.showMessageDialog(this,
-              MessageManager.getString("warn.no_hmm"));
-      return false;
-    }
-    return true;
-  }
-
-  /**
-   * Checks if the alignment contains the required number of sequences.
-   * 
-   * @param required
-   * @return
-   */
-  public boolean alignmentIsSufficient(int required)
-  {
-    if (getViewport().getAlignment().getSequences().size() < required)
-    {
-      JOptionPane.showMessageDialog(this,
-              MessageManager.getString("label.not_enough_sequences"));
-      return false;
-    }
-    return true;
-  }
-
-  /**
-   * Opens a file browser and adds the selected file, if in Fasta, Stockholm or
-   * Pfam format, to the list held under preference key "HMMSEARCH_DBS" (as a
-   * comma-separated list)
-   */
-  @Override
-  public void addDatabase_actionPerformed() throws IOException
-  {
-    if (Cache.getProperty(Preferences.HMMSEARCH_DBS) == null)
-    {
-      Cache.setProperty(Preferences.HMMSEARCH_DBS, "");
-    }
-
-    String path = openFileChooser(false);
-    if (path != null && new File(path).exists())
-    {
-      IdentifyFile identifier = new IdentifyFile();
-      FileFormatI format = identifier.identify(path, DataSourceType.FILE);
-      if (format == FileFormat.Fasta || format == FileFormat.Stockholm
-              || format == FileFormat.Pfam)
-      {
-        String currentDbPaths = Cache
-                .getProperty(Preferences.HMMSEARCH_DBS);
-        currentDbPaths += Preferences.COMMA + path;
-        Cache.setProperty(Preferences.HMMSEARCH_DBS, currentDbPaths);
-      }
-      else
-      {
-        JOptionPane.showMessageDialog(this,
-                MessageManager.getString("warn.invalid_format"));
-      }
-    }
-  }
-
-  /**
-   * Opens a file chooser, optionally restricted to selecting folders
-   * (directories) only. Answers the path to the selected file or folder, or
-   * null if none is chosen.
-   * 
-   * @param
-   * @return
-   */
-  protected String openFileChooser(boolean forFolder)
-  {
-    // TODO duplicates GPreferences method - relocate to JalviewFileChooser?
-    String choice = null;
-    JFileChooser chooser = new JFileChooser();
-    if (forFolder)
-    {
-      chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-    }
-    chooser.setDialogTitle(
-            MessageManager.getString("label.open_local_file"));
-    chooser.setToolTipText(MessageManager.getString("action.open"));
-
-    int value = chooser.showOpenDialog(this);
-
-    if (value == JFileChooser.APPROVE_OPTION)
-    {
-      choice = chooser.getSelectedFile().getPath();
-    }
-    return choice;
-  }
-
-  @Override
   public void reload_actionPerformed(ActionEvent e)
   {
     if (fileName != null)
@@ -1611,7 +1403,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   @Override
   public void associatedData_actionPerformed(ActionEvent e)
-          throws IOException, InterruptedException
   {
     // Pick the tree file
     JalviewFileChooser chooser = new JalviewFileChooser(
@@ -2097,12 +1888,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * 
    * @param e
    *          DOCUMENT ME!
-   * @throws InterruptedException
-   * @throws IOException
    */
   @Override
   protected void pasteNew_actionPerformed(ActionEvent e)
-          throws IOException, InterruptedException
   {
     paste(true);
   }
@@ -2112,12 +1900,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * 
    * @param e
    *          DOCUMENT ME!
-   * @throws InterruptedException
-   * @throws IOException
    */
   @Override
   protected void pasteThis_actionPerformed(ActionEvent e)
-          throws IOException, InterruptedException
   {
     paste(false);
   }
@@ -2127,10 +1912,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * 
    * @param newAlignment
    *          true to paste to a new alignment, otherwise add to this.
-   * @throws InterruptedException
-   * @throws IOException
    */
-  void paste(boolean newAlignment) throws IOException, InterruptedException
+  void paste(boolean newAlignment)
   {
     boolean externalPaste = true;
     try
@@ -2458,6 +2241,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       System.out.println("Exception whilst pasting: " + ex);
       // could be anything being pasted in here
     }
+
   }
 
   @Override
@@ -3907,33 +3691,35 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
 
     if (viewport.getAlignment().getAlignmentAnnotation()
-            .hashCode() == _annotationScoreVectorHash)
+            .hashCode() != _annotationScoreVectorHash)
     {
-      return;
-    }
-
-    sortByAnnotScore.removeAll();
-    Set<String> scoreSorts = new HashSet<>();
-    for (SequenceI sqa : viewport.getAlignment().getSequences())
-    {
-      AlignmentAnnotation[] anns = sqa.getAnnotation();
-      for (int i = 0; anns != null && i < anns.length; i++)
+      sortByAnnotScore.removeAll();
+      // almost certainly a quicker way to do this - but we keep it simple
+      Hashtable scoreSorts = new Hashtable();
+      AlignmentAnnotation aann[];
+      for (SequenceI sqa : viewport.getAlignment().getSequences())
       {
-        AlignmentAnnotation aa = anns[i];
-        if (aa != null && aa.hasScore() && aa.sequenceRef != null)
+        aann = sqa.getAnnotation();
+        for (int i = 0; aann != null && i < aann.length; i++)
         {
-          scoreSorts.add(aa.label);
+          if (aann[i].hasScore() && aann[i].sequenceRef != null)
+          {
+            scoreSorts.put(aann[i].label, aann[i].label);
+          }
         }
       }
-    }
-    for (String label : scoreSorts)
-    {
-      addSortByAnnotScoreMenuItem(sortByAnnotScore, label);
-    }
-    sortByAnnotScore.setVisible(!scoreSorts.isEmpty());
+      Enumeration labels = scoreSorts.keys();
+      while (labels.hasMoreElements())
+      {
+        addSortByAnnotScoreMenuItem(sortByAnnotScore,
+                (String) labels.nextElement());
+      }
+      sortByAnnotScore.setVisible(scoreSorts.size() > 0);
+      scoreSorts.clear();
 
-    _annotationScoreVectorHash = viewport.getAlignment()
-            .getAlignmentAnnotation().hashCode();
+      _annotationScoreVectorHash = viewport.getAlignment()
+              .getAlignmentAnnotation().hashCode();
+    }
   }
 
   /**
@@ -4773,8 +4559,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    * 
    * @param file
    *          either a filename or a URL string.
-   * @throws InterruptedException
-   * @throws IOException
    */
   public void loadJalviewDataFile(String file, DataSourceType sourceType,
           FileFormatI format, SequenceI assocSeq)
@@ -4881,6 +4665,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       }
       if (isAnnotation)
       {
+
         alignPanel.adjustAnnotationHeight();
         viewport.updateSequenceIdColours();
         buildSortByAnnotationScoresMenu();
@@ -5805,14 +5590,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
   }
 
-  /**
-   * Sets the status of the HMMER menu
-   */
-  public void updateHMMERStatus()
-  {
-    hmmerMenu.setEnabled(HmmerCommand.isHmmerAvailable());
-  }
-
   @Override
   protected void loadVcf_actionPerformed()
   {