Added a flag to control if the "/<seq_start>-<seq_end>" field of
[jalview.git] / src / jalview / ws / Jemboss.java
index 4a5257d..a8bf163 100755 (executable)
@@ -20,9 +20,10 @@ package jalview.ws;
  * functionality.
  *
  * Things to do
- * Test threadability
  * Standardise the exceptions (currently errors are output on stdout)
  * Allow server configuration
+ * Throw away JembossParams and Jemboss dependence
+ * Generalise results to return collections of objects - alignments, trees, annotations, etc.
  */
 
 import java.net.*;
@@ -44,6 +45,7 @@ public class Jemboss
     // Set up default jalview-jemboss server properties
     //
     vamsas_server = new JembossParams();
+    vamsas_server.setCurrentMode("interactive");
     System.out.println("Jemboss Server Init\n"
                        + vamsas_server.serverDescription()
                        + "\nUser Authorisation ? "
@@ -57,6 +59,30 @@ public class Jemboss
       props.getEmbossEnvironmentArray());
   }
   */
+    private Hashtable uniquify(SequenceI[] sequences) {
+        // Generate a safely named sequence set and a hash to recover the sequence names
+        Hashtable map = new Hashtable();
+        for (int i=0; i<sequences.length; i++) {
+            String safename = new String("Sequence"+i);
+            map.put(safename, sequences[i].getName());
+            sequences[i].setName(safename);
+        }
+        return map;
+    }
+
+    private boolean deuniquify(Hashtable map, SequenceI[] sequences) {
+        // recover unsafe sequence names for a sequence set
+        boolean allfound=true;
+        for (int i=0; i<sequences.length; i++) {
+            if (map.containsKey(sequences[i].getName())) {
+                String unsafename = (String) map.get(sequences[i].getName());
+                sequences[i].setName(unsafename);
+            } else {
+                allfound=false;
+            }
+        }
+        return allfound;
+    }
 
   public SequenceI[] clustalW(SequenceI[] sequences)
   {
@@ -103,9 +129,17 @@ public class Jemboss
 
     Hashtable filesToMove = new Hashtable();
     String embossCommand = "emma -sequence jalseqs.fasta -auto";
+    // Duplicate
+    SequenceI[] myseq = new SequenceI[sequences.length];
+    for (int i=0; i<sequences.length; i++) {
+        myseq[i] = new Sequence(sequences[i]);
+    }
+    // Uniqueify, and
+    Hashtable namemap = uniquify(myseq);
     // Load sequence file into hash
+
     filesToMove.put("jalseqs.fasta",
-                    jalview.io.FastaFile.print(sequences,124,false).getBytes());
+                    jalview.io.FastaFile.print(myseq,124,false, false).getBytes());
 
     if(vamsas_server.getUseAuth() == true)
       if(vamsas_server.getServiceUserName() == null)
@@ -137,8 +171,13 @@ public class Jemboss
           if (alignment == null)
             System.out.println("jalview.Jemboss: Couldn't read response:\n"
                                + alfile + "\n---EOF\n");
-          else
+          else {
+            if (!deuniquify(namemap, alignment)) {
+                  System.out.println("jalview.Jemboss: Warning: Some of the "
+                                     +"original sequence names have not been recovered!\n");
+            }
             return alignment;
+          }
         }
 
       }