X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fdbsources%2Fdas%2Fdatamodel%2FDasSequenceSource.java;h=5f1833168071d763100697fb4b50f3dd9456390b;hb=9829b31986b83957217a6b9086665ef7be9b1c8c;hp=22950f4010cfffca22b55190a44e131e76d18abe;hpb=98af16ccc5890b980f0c4f3acfb72d7128e3a6f0;p=jalview.git diff --git a/src/jalview/ws/dbsources/das/datamodel/DasSequenceSource.java b/src/jalview/ws/dbsources/das/datamodel/DasSequenceSource.java index 22950f4..5f18331 100644 --- a/src/jalview/ws/dbsources/das/datamodel/DasSequenceSource.java +++ b/src/jalview/ws/dbsources/das/datamodel/DasSequenceSource.java @@ -18,13 +18,17 @@ package jalview.ws.dbsources.das.datamodel; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import java.util.Vector; +import org.biodas.jdas.client.ConnectionPropertyProviderI; +import org.biodas.jdas.client.SequenceClient; import org.biodas.jdas.client.adapters.sequence.DasSequenceAdapter; +import org.biodas.jdas.client.threads.MultipleConnectionPropertyProviderI; import org.biodas.jdas.client.threads.SequenceClientMultipleSources; import org.biodas.jdas.schema.sequence.SEQUENCE; import org.biodas.jdas.schema.sources.COORDINATES; @@ -63,7 +67,7 @@ public class DasSequenceSource extends DbSourceProxyImpl implements protected String dbname = "DASCS"; protected String dbrefname = "das:source"; - + protected MultipleConnectionPropertyProviderI connprops=null; /** * create a new DbSource proxy for a DAS 1 source * @@ -80,9 +84,9 @@ public class DasSequenceSource extends DbSourceProxyImpl implements * if source is not capable of the 'sequence' command */ public DasSequenceSource(String dbname, String dbrefname, SOURCE source, - VERSION version, COORDINATES coordsys) throws Exception + VERSION version, COORDINATES coordsys, MultipleConnectionPropertyProviderI connprops) throws Exception { - if (!(jsrc = new JalviewSource(source, false)).isSequenceSource()) + if (!(jsrc = new JalviewSource(source, connprops, false)).isSequenceSource()) { throw new Exception("Source " + source.getTitle() + " does not support the sequence command."); @@ -91,6 +95,7 @@ public class DasSequenceSource extends DbSourceProxyImpl implements this.dbname = dbname; this.dbrefname = dbrefname; this.coordsys = coordsys; + this.connprops=connprops; } public String getAccessionSeparator() @@ -120,31 +125,85 @@ public class DasSequenceSource extends DbSourceProxyImpl implements return coordsys.getVersion(); } - public AlignmentI getSequenceRecords(String queries) throws Exception { StringTokenizer st = new StringTokenizer(queries, "\t"); - List toks = new ArrayList(), src = new ArrayList(),acIds=new ArrayList(); + List toks = new ArrayList(), src = new ArrayList(), acIds = new ArrayList(); while (st.hasMoreTokens()) { String t; - toks.add(t=st.nextToken()); + toks.add(t = st.nextToken()); acIds.add(t.replaceAll(":[0-9,]+", "")); } src.add(jsrc.getSourceURL()); Map, DasSequenceAdapter>> resultset = new HashMap, DasSequenceAdapter>>(); Map, Exception>> errors = new HashMap, Exception>>(); - SequenceClientMultipleSources sclient; - sclient = new SequenceClientMultipleSources(); - sclient.fetchData(src, toks, resultset, errors); - sclient.shutDown(); - while (!sclient.isTerminated()) + + // First try multiple sources + boolean multiple = true, retry = false; + do { - try {Thread.sleep(200); - - } catch (InterruptedException x) {} - } - + if (!multiple) + { + retry = false; + // slow, fetch one at a time. + for (String sr : src) + { + System.err + .println("Retrieving IDs individually from das source: " + + sr); + org.biodas.jdas.client.SequenceClient sq = new SequenceClient(connprops.getConnectionPropertyProviderFor(sr)); + for (String q : toks) + { + List qset = Arrays.asList(new String[] + { q }); + try + { + DasSequenceAdapter s = sq.fetchData(sr, qset); + Map, DasSequenceAdapter> dss = resultset.get(sr); + if (dss == null) + { + resultset + .put(sr, + dss = new HashMap, DasSequenceAdapter>()); + } + dss.put(qset, s); + } catch (Exception x) + { + Map, Exception> ers = errors.get(sr); + if (ers == null) + { + errors.put(sr, ers = new HashMap, Exception>()); + } + ers.put(qset, x); + } + } + } + } + else + { + SequenceClientMultipleSources sclient; + sclient = new SequenceClientMultipleSources(); + sclient.fetchData(src, toks, resultset, errors); + sclient.shutDown(); + while (!sclient.isTerminated()) + { + try + { + Thread.sleep(200); + + } catch (InterruptedException x) + { + } + } + if (resultset.isEmpty() && !errors.isEmpty()) + { + retry = true; + multiple = false; + } + } + } while (retry); + if (resultset.isEmpty()) { System.err.println("Sequence Query to " + jsrc.getTitle() + " with '" @@ -153,7 +212,7 @@ public class DasSequenceSource extends DbSourceProxyImpl implements } else { - Vector seqs=null; + Vector seqs = null; for (Map.Entry, DasSequenceAdapter>> resset : resultset .entrySet()) { @@ -183,14 +242,15 @@ public class DasSequenceSource extends DbSourceProxyImpl implements + lbl + ") from " + resset.getKey() - + " (source is " - + getDbName()); + + " (source is " + getDbName()); continue; } } seqs = new java.util.Vector(); - // JDAS returns a sequence complete with any newlines and spaces in the XML - Sequence sq = new Sequence(lbl, e.getContent().replaceAll("\\s+", "")); + // JDAS returns a sequence complete with any newlines and spaces + // in the XML + Sequence sq = new Sequence(lbl, e.getContent().replaceAll( + "\\s+", "")); sq.addDBRef(new DBRefEntry(getDbSource(), getDbVersion() + ":" + e.getVersion(), lbl)); seqs.addElement(sq); @@ -211,12 +271,25 @@ public class DasSequenceSource extends DbSourceProxyImpl implements { java.util.Vector srcs = new java.util.Vector(); srcs.addElement(jsrc); - try { - new jalview.ws.DasSequenceFeatureFetcher(sqs, null, srcs, false, - false); + try + { + jalview.ws.DasSequenceFeatureFetcher dssf=new jalview.ws.DasSequenceFeatureFetcher(sqs, null, srcs, false, + false, multiple); + while (dssf.isRunning()) + { + try { + Thread.sleep(200); + } catch (InterruptedException x) + { + + } + } + } catch (Exception x) { - Cache.log.error("Couldn't retrieve features for sequence from its source.",x); + Cache.log + .error("Couldn't retrieve features for sequence from its source.", + x); } }