JAL-2629 add hmmbuild validation check which also gets the HMMER version
[jalview.git] / src / jalview / hmmer / HMMBuildThread.java
index 880ed0d..656b6e5 100644 (file)
@@ -1,16 +1,20 @@
 package jalview.hmmer;
 
+
 import jalview.bin.Cache;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignFrame;
+import jalview.gui.AlignViewport;
 import jalview.gui.JvOptionPane;
 import jalview.gui.Preferences;
 import jalview.io.DataSourceType;
 import jalview.io.FileFormat;
 import jalview.io.FileLoader;
+import jalview.io.FileParse;
+import jalview.io.HMMFile;
 import jalview.util.MessageManager;
 
 import java.io.File;
@@ -24,11 +28,13 @@ public class HMMBuildThread implements Runnable
 {
   HMMERCommands cmds = new HMMERCommands();
   AlignFrame af;
+
+  AlignViewport viewport;
   AlignmentI alignment;
   SequenceGroup group;
 
+
   boolean forGroup = false;
-  boolean canRun = true;
 
   File hmmTemp = null;
 
@@ -36,6 +42,17 @@ public class HMMBuildThread implements Runnable
 
   long barID;
   
+  /**
+   * This is used for validation purposes. Do not use!
+   * 
+   * @param viewport
+   */
+  public HMMBuildThread(AlignmentI alignment)
+  {
+    this.alignment = alignment;
+    forGroup = false;
+  }
+
   public HMMBuildThread(AlignFrame af)
   {
     this.af = af;
@@ -52,8 +69,11 @@ public class HMMBuildThread implements Runnable
   public void run()
   {
     barID = System.currentTimeMillis();
+    if (af != null)
+    {
     af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
             barID);
+    }
     cmds.HMMERFOLDER = Cache.getProperty(Preferences.HMMER_PATH);
     if (alignment == null && group == null)
     {
@@ -94,8 +114,11 @@ public class HMMBuildThread implements Runnable
         }
         if (array.length < 1)
         {
-          JOptionPane.showMessageDialog(af,
+          if (af != null)
+          {
+            JOptionPane.showMessageDialog(af,
                   MessageManager.getString("warn.no_sequence_data"));
+          }
           return;
         }
         SequenceI[] newArr = new SequenceI[array.length];
@@ -121,8 +144,11 @@ public class HMMBuildThread implements Runnable
         boolean ran = runCommand();
         if (!ran)
         {
-          JvOptionPane.showInternalMessageDialog(af,
+          if (af != null)
+          {
+            JvOptionPane.showInternalMessageDialog(af,
                   MessageManager.getString("warn.hmmbuild_failed"));
+          }
           return;
         }
     } catch (IOException | InterruptedException e)
@@ -144,8 +170,12 @@ public class HMMBuildThread implements Runnable
       e.printStackTrace();
     } finally
     {
-      af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
+      if (af != null)
+      {
+        af.setProgressBar(
+                MessageManager.getString("status.running_hmmbuild"),
               barID);
+      }
     }
   }
 
@@ -172,7 +202,11 @@ public class HMMBuildThread implements Runnable
     }
     else
     {
-      String name = af.getName();
+      String name = null;
+      if (af != null)
+      {
+        name = af.getName();
+      }
       if (name == null)
       {
         name = "Alignment";
@@ -196,20 +230,38 @@ public class HMMBuildThread implements Runnable
   
   private void importData() throws IOException, InterruptedException
   {
-    cmds.addHMMConsensusSequences(af);
-    FileLoader loader = new FileLoader();
-    loader.LoadFileOntoAlignmentWaitTillLoaded(af.getViewport(),
-            hmmTemp.getAbsolutePath(), DataSourceType.FILE,
-            FileFormat.HMMER3);
+    if (af != null)
+    {
+      cmds.addHMMConsensusSequences(af);
+
+      FileLoader loader = new FileLoader();
+      loader.LoadFileOntoAlignmentWaitTillLoaded(viewport,
+              hmmTemp.getAbsolutePath(), DataSourceType.FILE,
+              FileFormat.HMMER3);
+    }
+    else
+    {
+      HMMFile file = new HMMFile(new FileParse(hmmTemp.getAbsolutePath(),
+              DataSourceType.FILE));
+      alignment.addSequence(file.getSeqsAsArray()[0]);
+    }
     hmmTemp.delete();
     stoTemp.delete();
   }
   
-  public boolean canRun()
+  public void hmmbuildWaitTillComplete()
   {
-    return canRun;
+    Thread loader = new Thread(this);
+    loader.start();
+
+    while (loader.isAlive())
+    {
+      try
+      {
+        Thread.sleep(500);
+      } catch (Exception ex)
+      {
+      }
+    }
   }
-  
-  
 }