support for multiple accession retrieval from a database source
[jalview.git] / src / jalview / gui / SequenceFetcher.java
index ccd0f72..2ecdc89 100755 (executable)
@@ -385,14 +385,60 @@ public class SequenceFetcher extends JPanel implements Runnable
       return;
     }
     AlignmentI aresult = null;
+    Object source = database.getSelectedItem();
+    Enumeration en = new StringTokenizer(textArea.getText(), ";");
     try
     {
       guiWindow.setProgressBar("Fetching Sequences from "
               + database.getSelectedItem(), Thread.currentThread()
               .hashCode());
-      aresult = sfetch.getSourceProxy(
-              (String) sources.get(database.getSelectedItem()))
-              .getSequenceRecords(textArea.getText());
+      DbSourceProxy proxy = sfetch.getSourceProxy(
+              (String) sources.get(source));
+      if (proxy.getAccessionSeparator()==null)
+      {
+        while (en.hasMoreElements())
+        {
+          String item = (String) en.nextElement();
+          try {
+            if (aresult!=null)
+            {
+              try {
+                // give the server a chance to breathe
+                Thread.sleep(5);
+              } catch (Exception e)
+              {
+                //
+              }
+
+            }
+            AlignmentI indres = proxy.getSequenceRecords(item);
+            if (indres!=null)
+            {
+              if (aresult == null)
+              {
+                aresult = indres;
+              } else {
+                aresult.append(indres);
+              }
+            }
+          } catch (Exception e)
+          {
+            jalview.bin.Cache.log.info("Error retrieving "+item+" from "+source,e);
+          }
+        }
+      } else {
+        StringBuffer multiacc = new StringBuffer();
+        while (en.hasMoreElements())
+        {
+          multiacc.append(en.nextElement());
+          if (en.hasMoreElements())
+          {
+            multiacc.append(proxy.getAccessionSeparator());
+          }
+        }
+        aresult = proxy
+              .getSequenceRecords(multiacc.toString());
+      }
 
     } catch (Exception e)
     {