JAL-1085 - ensure sequence fetching client waits around until feature retrieval has...
[jalview.git] / src / jalview / ws / dbsources / das / datamodel / DasSequenceSource.java
index 3883245..5f18331 100644 (file)
@@ -25,8 +25,10 @@ import java.util.Map;
 import java.util.StringTokenizer;\r
 import java.util.Vector;\r
 \r
+import org.biodas.jdas.client.ConnectionPropertyProviderI;\r
 import org.biodas.jdas.client.SequenceClient;\r
 import org.biodas.jdas.client.adapters.sequence.DasSequenceAdapter;\r
+import org.biodas.jdas.client.threads.MultipleConnectionPropertyProviderI;\r
 import org.biodas.jdas.client.threads.SequenceClientMultipleSources;\r
 import org.biodas.jdas.schema.sequence.SEQUENCE;\r
 import org.biodas.jdas.schema.sources.COORDINATES;\r
@@ -65,7 +67,7 @@ public class DasSequenceSource extends DbSourceProxyImpl implements
   protected String dbname = "DASCS";\r
 \r
   protected String dbrefname = "das:source";\r
-\r
+  protected MultipleConnectionPropertyProviderI connprops=null;\r
   /**\r
    * create a new DbSource proxy for a DAS 1 source\r
    * \r
@@ -82,9 +84,9 @@ public class DasSequenceSource extends DbSourceProxyImpl implements
    *           if source is not capable of the 'sequence' command\r
    */\r
   public DasSequenceSource(String dbname, String dbrefname, SOURCE source,\r
-          VERSION version, COORDINATES coordsys) throws Exception\r
+          VERSION version, COORDINATES coordsys, MultipleConnectionPropertyProviderI connprops) throws Exception\r
   {\r
-    if (!(jsrc = new JalviewSource(source, false)).isSequenceSource())\r
+    if (!(jsrc = new JalviewSource(source, connprops, false)).isSequenceSource())\r
     {\r
       throw new Exception("Source " + source.getTitle()\r
               + " does not support the sequence command.");\r
@@ -93,6 +95,7 @@ public class DasSequenceSource extends DbSourceProxyImpl implements
     this.dbname = dbname;\r
     this.dbrefname = dbrefname;\r
     this.coordsys = coordsys;\r
+    this.connprops=connprops;\r
   }\r
 \r
   public String getAccessionSeparator()\r
@@ -122,7 +125,6 @@ public class DasSequenceSource extends DbSourceProxyImpl implements
     return coordsys.getVersion();\r
   }\r
 \r
-\r
   public AlignmentI getSequenceRecords(String queries) throws Exception\r
   {\r
     StringTokenizer st = new StringTokenizer(queries, "\t");\r
@@ -150,8 +152,7 @@ public class DasSequenceSource extends DbSourceProxyImpl implements
           System.err\r
                   .println("Retrieving IDs individually from das source: "\r
                           + sr);\r
-          // todo : get conn property provider\r
-          org.biodas.jdas.client.SequenceClient sq = new SequenceClient();\r
+          org.biodas.jdas.client.SequenceClient sq = new SequenceClient(connprops.getConnectionPropertyProviderFor(sr));\r
           for (String q : toks)\r
           {\r
             List<String> qset = Arrays.asList(new String[]\r
@@ -211,7 +212,7 @@ public class DasSequenceSource extends DbSourceProxyImpl implements
     }\r
     else\r
     {\r
-      Vector<SequenceI> seqs=null;\r
+      Vector<SequenceI> seqs = null;\r
       for (Map.Entry<String, Map<List<String>, DasSequenceAdapter>> resset : resultset\r
               .entrySet())\r
       {\r
@@ -241,14 +242,15 @@ public class DasSequenceSource extends DbSourceProxyImpl implements
                                   + lbl\r
                                   + ") from "\r
                                   + resset.getKey()\r
-                                  + " (source is "\r
-                                  + getDbName());\r
+                                  + " (source is " + getDbName());\r
                   continue;\r
                 }\r
               }\r
               seqs = new java.util.Vector<SequenceI>();\r
-              // JDAS returns a sequence complete with any newlines and spaces in the XML\r
-              Sequence sq = new Sequence(lbl, e.getContent().replaceAll("\\s+", ""));\r
+              // JDAS returns a sequence complete with any newlines and spaces\r
+              // in the XML\r
+              Sequence sq = new Sequence(lbl, e.getContent().replaceAll(\r
+                      "\\s+", ""));\r
               sq.addDBRef(new DBRefEntry(getDbSource(), getDbVersion()\r
                       + ":" + e.getVersion(), lbl));\r
               seqs.addElement(sq);\r
@@ -269,12 +271,25 @@ public class DasSequenceSource extends DbSourceProxyImpl implements
       {\r
         java.util.Vector<jalviewSourceI> srcs = new java.util.Vector<jalviewSourceI>();\r
         srcs.addElement(jsrc);\r
-        try {\r
-          new jalview.ws.DasSequenceFeatureFetcher(sqs, null, srcs, false,\r
-                false);\r
+        try\r
+        {\r
+          jalview.ws.DasSequenceFeatureFetcher dssf=new jalview.ws.DasSequenceFeatureFetcher(sqs, null, srcs, false,\r
+                  false, multiple);\r
+          while (dssf.isRunning())\r
+          {\r
+            try {\r
+              Thread.sleep(200);\r
+            } catch (InterruptedException x)\r
+            {\r
+              \r
+            }\r
+          }\r
+          \r
         } catch (Exception x)\r
         {\r
-          Cache.log.error("Couldn't retrieve features for sequence from its source.",x);\r
+          Cache.log\r
+                  .error("Couldn't retrieve features for sequence from its source.",\r
+                          x);\r
         }\r
       }\r
 \r