X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2FDasSequenceFeatureFetcher.java;h=bef6425385733fe2928729cde495ffce4797a37c;hb=0d6fdcd9c4597475c09fd96da43ddcadccf78fa1;hp=c530b6285d61741692100fa95bb597ad1b73bbce;hpb=2a5cbe264ec842c1a0f93e6bd78294607a94e686;p=jalview.git diff --git a/src/jalview/ws/DasSequenceFeatureFetcher.java b/src/jalview/ws/DasSequenceFeatureFetcher.java index c530b62..bef6425 100644 --- a/src/jalview/ws/DasSequenceFeatureFetcher.java +++ b/src/jalview/ws/DasSequenceFeatureFetcher.java @@ -29,6 +29,7 @@ import jalview.ws.dbsources.das.api.DasSourceRegistryI; import jalview.ws.dbsources.das.api.jalviewSourceI; import java.util.ArrayList; +import java.util.Arrays; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; @@ -41,6 +42,7 @@ import java.util.Vector; import javax.swing.JOptionPane; +import org.biodas.jdas.client.FeaturesClient; import org.biodas.jdas.client.adapters.features.DasGFFAdapter; import org.biodas.jdas.client.adapters.features.DasGFFAdapter.GFFAdapter; import org.biodas.jdas.client.threads.FeaturesClientMultipleSources; @@ -97,7 +99,7 @@ public class DasSequenceFeatureFetcher long startTime; private DasSourceRegistryI sourceRegistry; - + private boolean useJDASMultiThread=true; /** * Creates a new SequenceFeatureFetcher object. Uses default * @@ -109,13 +111,20 @@ public class DasSequenceFeatureFetcher public DasSequenceFeatureFetcher(SequenceI[] sequences, FeatureSettings fsettings, Vector selectedSources) { - this(sequences, fsettings, selectedSources, true, true); + this(sequences, fsettings, selectedSources, true, true, true); } public DasSequenceFeatureFetcher(SequenceI[] oursequences, FeatureSettings fsettings, List selectedSources2, boolean checkDbrefs, boolean promptFetchDbrefs) { + this(oursequences,fsettings,selectedSources2,checkDbrefs,promptFetchDbrefs,true); + } + public DasSequenceFeatureFetcher(SequenceI[] oursequences, + FeatureSettings fsettings, List selectedSources2, + boolean checkDbrefs, boolean promptFetchDbrefs, boolean useJDasMultiThread) + { + this.useJDASMultiThread=useJDasMultiThread; this.selectedSources = new ArrayList(); // filter both sequences and sources to eliminate duplicates for (jalviewSourceI src : selectedSources2) @@ -212,6 +221,7 @@ public class DasSequenceFeatureFetcher } private void _startFetching() { + running=true; new Thread(new FetchSeqFeatures()).start(); } class FetchSeqFeatures implements Runnable @@ -226,6 +236,7 @@ public class DasSequenceFeatureFetcher { public void run() { + running=true; new DBRefFetcher(sequences, af).fetchDBRefs(true); startFetching(); setGuiFetchComplete(); @@ -237,6 +248,7 @@ public class DasSequenceFeatureFetcher */ void startFetching() { + running=true; cancelled = false; startTime = System.currentTimeMillis(); if (af != null) @@ -343,6 +355,38 @@ public class DasSequenceFeatureFetcher } Map, Exception>> errors = new HashMap, Exception>>(); Map, DasGFFAdapter>> results = new HashMap, DasGFFAdapter>>(); + if (!useJDASMultiThread) + { + Iterator sources=src.iterator(); + // iterate over each query for each source and do each one individually + for (List idl:ids) + { + String source=sources.next(); + FeaturesClient featuresc=new FeaturesClient(sourceRegistry.getSessionHandler().getConnectionPropertyProviderFor(source)); + for (String id:idl) + { + List qid=Arrays.asList(new String[] { id}); + try { + DasGFFAdapter dga=featuresc.fetchData(source, qid); + Map,DasGFFAdapter> ers=results.get(source); + if (ers==null) + { + results.put(source, ers=new HashMap,DasGFFAdapter>()); + } + ers.put(qid, dga); + } catch (Exception ex) + { + Map,Exception> ers=errors.get(source); + if (ers==null) + { + errors.put(source, ers=new HashMap,Exception>()); + } + ers.put(qid, ex); + } + } + } + } else { + // pass them all at once fc.fetchData(src, ids, false, results, errors); fc.shutDown(); while (!fc.isTerminated()) @@ -355,6 +399,7 @@ public class DasSequenceFeatureFetcher } } + } Iterator> idset = ids.iterator(); Iterator> idobjset = idobj.iterator(); Iterator> seqset = sqset.iterator(); @@ -504,10 +549,10 @@ public class DasSequenceFeatureFetcher } int sourcesRemaining = 0; - + private boolean running=false; private void setGuiFetchComplete() { - + running=false; if (!cancelled && af != null) { // only update the progress bar if we've completed the fetch normally @@ -837,4 +882,9 @@ public class DasSequenceFeatureFetcher return type.getContent(); } + public boolean isRunning() + { + return running; + } + }