formatting
[jalview.git] / src / jalview / ws / DasSequenceFeatureFetcher.java
index 1220df7..6ca9b16 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)\r
- * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle\r
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle\r
  * \r
  * This file is part of Jalview.\r
  * \r
@@ -29,6 +29,7 @@ import jalview.ws.dbsources.das.api.DasSourceRegistryI;
 import jalview.ws.dbsources.das.api.jalviewSourceI;\r
 \r
 import java.util.ArrayList;\r
+import java.util.Arrays;\r
 import java.util.Enumeration;\r
 import java.util.HashMap;\r
 import java.util.HashSet;\r
@@ -41,6 +42,7 @@ import java.util.Vector;
 \r
 import javax.swing.JOptionPane;\r
 \r
+import org.biodas.jdas.client.FeaturesClient;\r
 import org.biodas.jdas.client.adapters.features.DasGFFAdapter;\r
 import org.biodas.jdas.client.adapters.features.DasGFFAdapter.GFFAdapter;\r
 import org.biodas.jdas.client.threads.FeaturesClientMultipleSources;\r
@@ -98,6 +100,8 @@ public class DasSequenceFeatureFetcher
 \r
   private DasSourceRegistryI sourceRegistry;\r
 \r
+  private boolean useJDASMultiThread = true;\r
+\r
   /**\r
    * Creates a new SequenceFeatureFetcher object. Uses default\r
    * \r
@@ -109,13 +113,23 @@ public class DasSequenceFeatureFetcher
   public DasSequenceFeatureFetcher(SequenceI[] sequences,\r
           FeatureSettings fsettings, Vector selectedSources)\r
   {\r
-    this(sequences, fsettings, selectedSources, true, true);\r
+    this(sequences, fsettings, selectedSources, true, true, true);\r
   }\r
 \r
   public DasSequenceFeatureFetcher(SequenceI[] oursequences,\r
           FeatureSettings fsettings, List<jalviewSourceI> selectedSources2,\r
           boolean checkDbrefs, boolean promptFetchDbrefs)\r
   {\r
+    this(oursequences, fsettings, selectedSources2, checkDbrefs,\r
+            promptFetchDbrefs, true);\r
+  }\r
+\r
+  public DasSequenceFeatureFetcher(SequenceI[] oursequences,\r
+          FeatureSettings fsettings, List<jalviewSourceI> selectedSources2,\r
+          boolean checkDbrefs, boolean promptFetchDbrefs,\r
+          boolean useJDasMultiThread)\r
+  {\r
+    this.useJDASMultiThread = useJDasMultiThread;\r
     this.selectedSources = new ArrayList<jalviewSourceI>();\r
     // filter both sequences and sources to eliminate duplicates\r
     for (jalviewSourceI src : selectedSources2)\r
@@ -210,10 +224,13 @@ public class DasSequenceFeatureFetcher
     }\r
 \r
   }\r
+\r
   private void _startFetching()\r
   {\r
+    running = true;\r
     new Thread(new FetchSeqFeatures()).start();\r
   }\r
+\r
   class FetchSeqFeatures implements Runnable\r
   {\r
     public void run()\r
@@ -222,10 +239,12 @@ public class DasSequenceFeatureFetcher
       setGuiFetchComplete();\r
     }\r
   }\r
+\r
   class FetchDBRefs implements Runnable\r
   {\r
     public void run()\r
     {\r
+      running = true;\r
       new DBRefFetcher(sequences, af).fetchDBRefs(true);\r
       startFetching();\r
       setGuiFetchComplete();\r
@@ -237,6 +256,7 @@ public class DasSequenceFeatureFetcher
    */\r
   void startFetching()\r
   {\r
+    running = true;\r
     cancelled = false;\r
     startTime = System.currentTimeMillis();\r
     if (af != null)\r
@@ -343,16 +363,57 @@ public class DasSequenceFeatureFetcher
     }\r
     Map<String, Map<List<String>, Exception>> errors = new HashMap<String, Map<List<String>, Exception>>();\r
     Map<String, Map<List<String>, DasGFFAdapter>> results = new HashMap<String, Map<List<String>, DasGFFAdapter>>();\r
-    fc.fetchData(src, ids, false, results, errors);\r
-    fc.shutDown();\r
-    while (!fc.isTerminated())\r
+    if (!useJDASMultiThread)\r
     {\r
-      try\r
+      Iterator<String> sources = src.iterator();\r
+      // iterate over each query for each source and do each one individually\r
+      for (List<String> idl : ids)\r
       {\r
-        Thread.sleep(200);\r
-      } catch (InterruptedException x)\r
+        String source = sources.next();\r
+        FeaturesClient featuresc = new FeaturesClient(sourceRegistry\r
+                .getSessionHandler().getConnectionPropertyProviderFor(\r
+                        source));\r
+        for (String id : idl)\r
+        {\r
+          List<String> qid = Arrays.asList(new String[]\r
+          { id });\r
+          try\r
+          {\r
+            DasGFFAdapter dga = featuresc.fetchData(source, qid);\r
+            Map<List<String>, DasGFFAdapter> ers = results.get(source);\r
+            if (ers == null)\r
+            {\r
+              results.put(source,\r
+                      ers = new HashMap<List<String>, DasGFFAdapter>());\r
+            }\r
+            ers.put(qid, dga);\r
+          } catch (Exception ex)\r
+          {\r
+            Map<List<String>, Exception> ers = errors.get(source);\r
+            if (ers == null)\r
+            {\r
+              errors.put(source,\r
+                      ers = new HashMap<List<String>, Exception>());\r
+            }\r
+            ers.put(qid, ex);\r
+          }\r
+        }\r
+      }\r
+    }\r
+    else\r
+    {\r
+      // pass them all at once\r
+      fc.fetchData(src, ids, false, results, errors);\r
+      fc.shutDown();\r
+      while (!fc.isTerminated())\r
       {\r
+        try\r
+        {\r
+          Thread.sleep(200);\r
+        } catch (InterruptedException x)\r
+        {\r
 \r
+        }\r
       }\r
     }\r
     Iterator<List<String>> idset = ids.iterator();\r
@@ -404,6 +465,10 @@ public class DasSequenceFeatureFetcher
         for (SEGMENT seg : segments)\r
         {\r
           String id = seg.getId();\r
+          if (ids.indexOf(id) == -1)\r
+          {\r
+            id = id.toUpperCase();\r
+          }\r
           DBRefEntry dbref = idobj.get(ids.indexOf(id));\r
           SequenceI sequence = sequencemap.get(id);\r
           boolean added = false;\r
@@ -412,7 +477,8 @@ public class DasSequenceFeatureFetcher
           for (FEATURE feat : seg.getFEATURE())\r
           {\r
             // standard DAS feature-> jalview sequence feature transformation\r
-            SequenceFeature f = newSequenceFeature(feat, jvsource.getTitle());\r
+            SequenceFeature f = newSequenceFeature(feat,\r
+                    jvsource.getTitle());\r
             if (!parseSeqFeature(sequence, f, feat, jvsource))\r
             {\r
               if (dbref.getMap() != null && f.getBegin() > 0\r
@@ -505,9 +571,11 @@ public class DasSequenceFeatureFetcher
 \r
   int sourcesRemaining = 0;\r
 \r
+  private boolean running = false;\r
+\r
   private void setGuiFetchComplete()\r
   {\r
-\r
+    running = false;\r
     if (!cancelled && af != null)\r
     {\r
       // only update the progress bar if we've completed the fetch normally\r
@@ -837,4 +905,9 @@ public class DasSequenceFeatureFetcher
     return type.getContent();\r
   }\r
 \r
+  public boolean isRunning()\r
+  {\r
+    return running;\r
+  }\r
+\r
 }\r