todo
[jalview.git] / src / jalview / ws / rest / RestJob.java
index 80f4ac6..445c249 100644 (file)
@@ -1,6 +1,7 @@
 package jalview.ws.rest;
 
 import java.io.IOException;
+import java.sql.ResultSet;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Hashtable;
@@ -129,13 +130,13 @@ public class RestJob extends AWsJob
       validInput = false;
     }
   }
-
+  
   boolean validInput = false;
 
   @Override
   public boolean hasResults()
   {
-    return gotresult;
+    return gotresult && (parsedResults ? validJvresults : true);
   }
 
   @Override
@@ -384,16 +385,55 @@ public class RestJob extends AWsJob
    * context used to parse results from service
    */
   JalviewDataset context = null;
-
+  protected boolean parsedResults = false;
+  protected boolean validJvresults=false;
   Object[] jvresultobj = null;
-
   /**
    * process the results obtained from the server into jalview datamodel objects
-   * ready to be merged/added to the users' view.
+   * ready to be merged/added to the users' view. Use hasResults to test if results were added to context. 
    */
   public void parseResultSet() throws Exception, Error
   {
-    jvresultobj = resSet.parseResultSet();
+    if (!parsedResults) {
+      parsedResults=true;
+      jvresultobj = resSet.parseResultSet();
+      validJvresults = true;
+    }
+  }
+
+  /**
+   * 
+   * @return true if job has an input alignment and it was annotated when results were parsed
+   */
+  public boolean isInputContextModified()
+  {
+    return contextAl!=null && validJvresults && context.getAl().get(0).isModified();
+  }
+
+  /**
+   * 
+   * @return true if the ID/metadata for the input sequences were saved and sequence IDs renamed.
+   */
+  public boolean isInputUniquified()
+  {
+    // TODO Auto-generated method stub
+    return false;
+  }
+
+  /**
+   * Return map between ordering of alignment submitted as input, and ordering of alignment as provided by user
+   * @return int[sequence index in submitted data]==sequence index in input.
+   */
+  public int[] getOrderMap()
+  {
+    SequenceI[] contseq = contextAl.getSequencesArray();
+    int map[] = new int[contseq.length];
+    for (int i=0;i<contseq.length;i++)
+    {
+      // TODO: optimise for large N - build a lookup hash for IDs returning order, and then lookup each sequ's original order
+      map[i] = inputOrder.getOrder().indexOf(contseq[i]);
+    }
+    return map;
   }
 
 }