fixed end-residue bug and subjob panel names bug
[jalview.git] / src / jalview / ws / MsaWSThread.java
index b8912e2..d51bc76 100644 (file)
@@ -118,9 +118,18 @@ class MsaWSThread extends Thread implements WSClientI {
         this.seqs = new vamsas.objects.simple.SequenceSet();
         this.seqs.setSeqs(seqarray);
     }
+    /**
+     * 
+     * @return true if getAlignment will return a valid alignment result.
+     */
+    public boolean hasResults() {
+      if (subjobComplete && result!=null && jobs[0].result.isFinished())
+        return true;
+      return false;
+    }
     public Object[] getAlignment() {
       
-      if (result!=null) {
+      if (result!=null && result.isFinished()) {
         SequenceI[] alseqs=null;
         char alseq_gapchar='-';
         int alseq_l=0;
@@ -640,7 +649,7 @@ class MsaWSThread extends Thread implements WSClientI {
         nwidth+=width;  
       }
     } else {
-      if (jobs[0].subjobComplete && jobs[0].result!=null) {
+      if (jobs[0].hasResults()) {
         Object[] alg = jobs[0].getAlignment();
         alignment = (SequenceI[]) alg[0];
         alorders.add(alg[1]);
@@ -667,8 +676,27 @@ class MsaWSThread extends Thread implements WSClientI {
           af.addSortByOrderMenuItem(WebServiceName + " Ordering",
               (AlignmentOrder) alorders.get(0));
         } else {
+          // construct a non-redundant ordering set
+          Vector names=new Vector();
+          for (int i=0,l=alorders.size(); i<l; i++) {
+            String orderName = new String("Region "+i);
+            int j=i+1;
+            int r=l;
+            while (j<l) {
+              if (((AlignmentOrder) alorders.get(i)).equals(((AlignmentOrder) alorders.get(j)))) {
+                alorders.remove(j); l--;
+                orderName+=","+j;
+              } else
+                j++;
+            }
+            
+            if (i==0 && j==1)
+              names.add(new String(""));
+            else
+              names.add(orderName);
+          }
           for (int i=0,l=alorders.size(); i<l; i++) {
-            af.addSortByOrderMenuItem(WebServiceName + " Region "+i+" Ordering",
+            af.addSortByOrderMenuItem(WebServiceName + ((String) names.get(i))+" Ordering",
                 (AlignmentOrder) alorders.get(i));              
           }
         }