package jalview.ws.dbsources.das.datamodel;\r
\r
import java.util.ArrayList;\r
+import java.util.Arrays;\r
import java.util.HashMap;\r
import java.util.List;\r
import java.util.Map;\r
import java.util.StringTokenizer;\r
import java.util.Vector;\r
\r
+import org.biodas.jdas.client.SequenceClient;\r
import org.biodas.jdas.client.adapters.sequence.DasSequenceAdapter;\r
import org.biodas.jdas.client.threads.SequenceClientMultipleSources;\r
import org.biodas.jdas.schema.sequence.SEQUENCE;\r
public AlignmentI getSequenceRecords(String queries) throws Exception\r
{\r
StringTokenizer st = new StringTokenizer(queries, "\t");\r
- List<String> toks = new ArrayList<String>(), src = new ArrayList<String>(),acIds=new ArrayList<String>();\r
+ List<String> toks = new ArrayList<String>(), src = new ArrayList<String>(), acIds = new ArrayList<String>();\r
while (st.hasMoreTokens())\r
{\r
String t;\r
- toks.add(t=st.nextToken());\r
+ toks.add(t = st.nextToken());\r
acIds.add(t.replaceAll(":[0-9,]+", ""));\r
}\r
src.add(jsrc.getSourceURL());\r
Map<String, Map<List<String>, DasSequenceAdapter>> resultset = new HashMap<String, Map<List<String>, DasSequenceAdapter>>();\r
Map<String, Map<List<String>, Exception>> errors = new HashMap<String, Map<List<String>, Exception>>();\r
- SequenceClientMultipleSources sclient;\r
- sclient = new SequenceClientMultipleSources();\r
- sclient.fetchData(src, toks, resultset, errors);\r
- sclient.shutDown();\r
- while (!sclient.isTerminated())\r
+ \r
+ // First try multiple sources\r
+ boolean multiple = true, retry = false;\r
+ do\r
{\r
- try {Thread.sleep(200);\r
- \r
- } catch (InterruptedException x) {}\r
- }\r
- \r
+ if (!multiple)\r
+ {\r
+ retry = false;\r
+ // slow, fetch one at a time.\r
+ for (String sr : src)\r
+ {\r
+ 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
+ for (String q : toks)\r
+ {\r
+ List<String> qset = Arrays.asList(new String[]\r
+ { q });\r
+ try\r
+ {\r
+ DasSequenceAdapter s = sq.fetchData(sr, qset);\r
+ Map<List<String>, DasSequenceAdapter> dss = resultset.get(sr);\r
+ if (dss == null)\r
+ {\r
+ resultset\r
+ .put(sr,\r
+ dss = new HashMap<List<String>, DasSequenceAdapter>());\r
+ }\r
+ dss.put(qset, s);\r
+ } catch (Exception x)\r
+ {\r
+ Map<List<String>, Exception> ers = errors.get(sr);\r
+ if (ers == null)\r
+ {\r
+ errors.put(sr, ers = new HashMap<List<String>, Exception>());\r
+ }\r
+ ers.put(qset, x);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ SequenceClientMultipleSources sclient;\r
+ sclient = new SequenceClientMultipleSources();\r
+ sclient.fetchData(src, toks, resultset, errors);\r
+ sclient.shutDown();\r
+ while (!sclient.isTerminated())\r
+ {\r
+ try\r
+ {\r
+ Thread.sleep(200);\r
+\r
+ } catch (InterruptedException x)\r
+ {\r
+ }\r
+ }\r
+ if (resultset.isEmpty() && !errors.isEmpty())\r
+ {\r
+ retry = true;\r
+ multiple = false;\r
+ }\r
+ }\r
+ } while (retry);\r
+\r
if (resultset.isEmpty())\r
{\r
System.err.println("Sequence Query to " + jsrc.getTitle() + " with '"\r