/*\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
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
\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
\r
private DasSourceRegistryI sourceRegistry;\r
\r
+ private boolean useJDASMultiThread = true;\r
+\r
/**\r
* Creates a new SequenceFeatureFetcher object. Uses default\r
* \r
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
}\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
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
*/\r
void startFetching()\r
{\r
+ running = true;\r
cancelled = false;\r
startTime = System.currentTimeMillis();\r
if (af != null)\r
}\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
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
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
\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
return type.getContent();\r
}\r
\r
+ public boolean isRunning()\r
+ {\r
+ return running;\r
+ }\r
+\r
}\r