apply version 2.7 copyright
[jalview.git] / src / jalview / ws / rest / RestJob.java
index 7987cab..200c573 100644 (file)
@@ -1,3 +1,20 @@
+/*******************************************************************************
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ *******************************************************************************/
 package jalview.ws.rest;
 
 import java.io.IOException;
@@ -11,6 +28,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.Vector;
 
+import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentOrder;
 import jalview.datamodel.AlignmentView;
@@ -96,11 +114,14 @@ public class RestJob extends AWsJob
         }
         else
         {
+          // TODO: move validation of input data to SeqGroupIndexVector
           if ((prm.getValue() instanceof SeqGroupIndexVector)
                   && (_input.getGroups() != null && _input.getGroups()
-                          .size() > 0))
+                          .size() >= prm.getValue().min))
           {
             alinp.add(prm.getValue());
+          } else {
+            statMessage=("Not enough groups defined on the alignment - need at least "+prm.getValue().min);
           }
         }
       }
@@ -130,7 +151,7 @@ public class RestJob extends AWsJob
       validInput = false;
     }
   }
-
+  
   boolean validInput = false;
 
   @Override
@@ -256,6 +277,19 @@ public class RestJob extends AWsJob
       context = new JalviewDataset(dsForIO, null, squniq, null);
       if (contextAl!=null)
       {
+        // TODO devise way of merging new annotation onto (identical) existing annotation that was used as input
+        // delete all input annotation 
+        if (contextAl.getAlignmentAnnotation()!=null) {
+          for (AlignmentAnnotation alan: contextAl.getAlignmentAnnotation()) {
+            contextAl.deleteAnnotation(alan);
+          }
+        }
+        // TODO devise way of merging new groups onto (identical) existing groups when they were used as input to service
+        // delete all existing groups 
+        if (contextAl.getGroups()!=null)
+        {
+          contextAl.deleteAllGroups();
+        }
         context.addAlignment(contextAl);
       }
       
@@ -410,4 +444,30 @@ public class RestJob extends AWsJob
     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;
+  }
+
 }