JAL-2629 storage and lifecycle of alignment/group HMM annotations revised
[jalview.git] / src / jalview / hmmer / HmmerCommand.java
index 557598b..a25e5cd 100644 (file)
@@ -31,19 +31,26 @@ import java.util.List;
  * @author TZVanaalten
  *
  */
-public class HmmerCommand
+public abstract class HmmerCommand implements Runnable
 {
   public static final String HMMBUILD = "hmmbuild";
 
-  private Hashtable hash = new Hashtable();
+  protected final AlignFrame af;
 
-  protected AlignFrame af;
+  protected final AlignmentI alignment;
 
-  protected List<ArgumentI> params;
+  protected final List<ArgumentI> params;
 
+  /**
+   * Constructor
+   * 
+   * @param alignFrame
+   * @param args
+   */
   public HmmerCommand(AlignFrame alignFrame, List<ArgumentI> args)
   {
     af = alignFrame;
+    alignment = af.getViewport().getAlignment();
     params = args;
   }
 
@@ -59,23 +66,25 @@ public class HmmerCommand
    * 
    * @param seqs
    */
-  protected void stashSequences(SequenceI[] seqs)
+  protected Hashtable stashSequences(SequenceI[] seqs)
   {
-    hash = SeqsetUtils.uniquify(seqs, true);
+    return SeqsetUtils.uniquify(seqs, true);
   }
 
   /**
    * Restores the sequence data lost by uniquifying
    * 
+   * @param hashtable
    * @param seqs
    */
-  protected void recoverSequences(SequenceI[] seqs)
+  protected void recoverSequences(Hashtable hashtable, SequenceI[] seqs)
   {
-    SeqsetUtils.deuniquify(hash, seqs);
+    SeqsetUtils.deuniquify(hashtable, seqs);
   }
 
   /**
-   * Runs a command as a separate process
+   * Runs a command as a separate process and waits for it to complete. Answers
+   * true if the process return status is zero, else false.
    * 
    * @param command
    *          the executable command and any arguments to it
@@ -87,7 +96,7 @@ public class HmmerCommand
     try
     {
       ProcessBuilder pb = new ProcessBuilder(command);
-      pb.redirectErrorStream(true); // send syserr to sysout
+      pb.redirectErrorStream(true); // merge syserr to sysout
       final Process p = pb.start();
       new Thread(new Runnable()
       {