JAL-2629 add ability to select hmmer binaries folder
[jalview.git] / src / jalview / gui / AlignFrame.java
index 9e4f37b..9b5681b 100644 (file)
@@ -63,6 +63,8 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.gui.ColourMenuHelper.ColourChangeListener;
 import jalview.gui.ViewSelectionMenu.ViewSetProvider;
+import jalview.hmmer.HMMAlignThread;
+import jalview.hmmer.HMMBuildThread;
 import jalview.io.AlignmentProperties;
 import jalview.io.AnnotationFile;
 import jalview.io.BioJsHTMLOutput;
@@ -125,6 +127,7 @@ 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;
@@ -143,6 +146,7 @@ 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;
 
@@ -162,6 +166,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   public static final int DEFAULT_HEIGHT = 500;
 
+  boolean autoAlignNewSequences;
+
+  boolean recurring;
+
   /*
    * The currently displayed panel (selected tabbed view if more than one)
    */
@@ -332,6 +340,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     init();
   }
 
+  public void setIsRecurring(boolean status)
+  {
+    recurring = status;
+  }
+
   /**
    * initalise the alignframe from the underlying viewport data and the
    * configurations
@@ -383,6 +396,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       }
     });
     buildColourMenu();
+    buildHMMERMenu();
 
     if (Desktop.desktop != null)
     {
@@ -489,6 +503,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   }
 
+  private void buildHMMERMenu()
+  {
+    hmmerMenu.removeAll();
+
+    hmmerMenu.add(changeHMMERLocation);
+    hmmerMenu.addSeparator();
+
+    hmmerMenu.add(autoAlignSeqs);
+    hmmerMenu.addSeparator();
+
+    hmmerMenu.add(hmmAlign);
+    hmmerMenu.add(hmmBuild);
+    hmmerMenu.add(hmmSearch);
+    
+  }
+
   /**
    * Change the filename and format for the alignment, and enable the 'reload'
    * button functionality.
@@ -784,6 +814,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       ap.av.updateConservation(ap);
       ap.av.updateConsensus(ap);
       ap.av.updateStrucConsensus(ap);
+      ap.av.updateInformation(ap);
     }
   }
 
@@ -1019,6 +1050,44 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   }
 
   @Override
+  public void hmmBuild_actionPerformed(ActionEvent e)
+          throws IOException, InterruptedException
+  {
+    new Thread(new HMMBuildThread(this)).start();
+    alignPanel.repaint();
+
+  }
+
+  @Override
+  public void hmmAlign_actionPerformed(ActionEvent e)
+          throws IOException, InterruptedException
+  {
+    new Thread(new HMMAlignThread(this, true)).start();
+    alignPanel.repaint();
+  }
+
+  @Override
+  public void changeHMMERLocation_actionPerformed(ActionEvent e)
+  {
+    String location = JOptionPane.showInputDialog(
+            MessageManager.getString("label.enter_location"));
+    Cache.setProperty(Preferences.HMMER_PATH, location);
+  }
+
+  @Override
+  public void autoAlignSeqs_actionPerformed(boolean autoAlignSeqs)
+  {
+    autoAlignNewSequences = autoAlignSeqs;
+    alignPanel.repaint();
+  }
+
+  @Override
+  public void hmmSearch_actionPerformed(ActionEvent e)
+  {
+    alignPanel.repaint();
+  }
+
+  @Override
   public void reload_actionPerformed(ActionEvent e)
   {
     if (fileName != null)
@@ -1429,6 +1498,7 @@ 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(
@@ -1920,9 +1990,12 @@ 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);
   }
@@ -1932,9 +2005,12 @@ 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);
   }
@@ -1944,8 +2020,10 @@ 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)
+  void paste(boolean newAlignment) throws IOException, InterruptedException
   {
     boolean externalPaste = true;
     try
@@ -2273,7 +2351,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       System.out.println("Exception whilst pasting: " + ex);
       // could be anything being pasted in here
     }
-
   }
 
   @Override
@@ -4578,9 +4655,12 @@ 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)
+          throws IOException, InterruptedException
   {
     try
     {
@@ -4661,24 +4741,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           }
           else if (FileFormat.HMMER3.equals(format))
           {
-            HMMFile hmmFile = new HMMFile(new FileParse(file, sourceType)); // TODO
-                                                                            // need
-                                                                            // to
-                                                                            // follow
-                                                                            // standard
-                                                                            // pipeline
-            hmmFile.parse();
+            HMMFile hmmFile = new HMMFile(new FileParse(file, sourceType));
             HiddenMarkovModel hmm = hmmFile.getHMM();
-            AlignmentAnnotation annotation = hmm.createAnnotation(
-                    getViewport().getAlignment().getWidth());
-            getViewport().getAlignment().addAnnotation(annotation);
-            annotation.setHMM(hmm);
-            int length = getViewport().getAlignment().getWidth();
-            Sequence consensus = hmm.getConsensusSequence(length);
-            SequenceI[] consensusArr = new Sequence[] { consensus };
-            AlignmentI newAlignment = new Alignment(consensusArr);
-            newAlignment.append(getViewport().getAlignment());
-            getViewport().setAlignment(newAlignment);
+            SequenceI hmmSeq = hmm.initHMMSequence(this, 0);
+            getViewport().initInformation(hmmSeq);
+            getViewport().updateInformation(alignPanel);
+
             isAnnotation = true;
 
           }
@@ -4706,12 +4774,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           else
           {
             new FileLoader().LoadFile(viewport, file, sourceType, format);
+            if (autoAlignNewSequences && !recurring)
+            {
+              new Thread(new HMMAlignThread(this, false)).start();
+            }
           }
         }
       }
       if (isAnnotation)
       {
-
         alignPanel.adjustAnnotationHeight();
         viewport.updateSequenceIdColours();
         buildSortByAnnotationScoresMenu();
@@ -5691,4 +5762,6 @@ class PrintThread extends Thread
       }
     }
   }
+
+
 }