1 package jalview.ws.dbsources;
\r
3 import java.util.Hashtable;
\r
5 import org.biojava.dasobert.das.SequenceThread;
\r
6 import org.biojava.dasobert.das2.Das2Source;
\r
7 import org.biojava.dasobert.dasregistry.Das1Source;
\r
8 import org.biojava.dasobert.dasregistry.DasCoordinateSystem;
\r
9 import org.biojava.dasobert.dasregistry.DasSource;
\r
10 import org.biojava.dasobert.eventmodel.SequenceEvent;
\r
11 import org.biojava.dasobert.eventmodel.SequenceListener;
\r
13 import com.stevesoft.pat.Regex;
\r
15 import jalview.ws.dbsources.das.DasSequenceSourceListener;
\r
16 import jalview.ws.seqfetcher.*;
\r
17 import jalview.datamodel.AlignmentI;
\r
20 * an instance of this class is created for each unique DAS Sequence source (ie one capable of handling the 'sequence' for a particular MapMaster)
\r
25 public class DasSequenceSource extends DbSourceProxyImpl implements
\r
28 protected Das1Source source=null;
\r
29 protected String dbname="DASCS";
\r
30 protected String dbrefname="das:source";
\r
31 protected DasCoordinateSystem coordsys = null;
\r
33 * create a new DbSource proxy for a DAS 1 source
\r
34 * @param dbnbame Human Readable Name to use when fetching from this source
\r
35 * @param dbrefname DbRefName for DbRefs attached to sequences retrieved from this source
\r
36 * @param source Das1Source
\r
37 * @param coordsys specific coordinate system to use for this source
\r
38 * @throws Exception if source is not capable of the 'sequence' command
\r
40 public DasSequenceSource(String dbname, String dbrefname, Das1Source source,
\r
41 DasCoordinateSystem coordsys) throws Exception
\r
43 if (!source.hasCapability("sequence"))
\r
45 throw new Exception("Source "+source.getNickname()+" does not support the sequence command.");
\r
47 this.source = source;
\r
48 this.dbname = dbname;
\r
49 this.dbrefname=dbrefname;
\r
50 this.coordsys = coordsys;
\r
52 public String getAccessionSeparator()
\r
54 // cope with single sequences only
\r
58 public Regex getAccessionValidator()
\r
61 return Regex.perlCode("\\S+");
\r
64 public String getDbName()
\r
67 return dbname+" (DAS)";
\r
70 public String getDbSource()
\r
75 public String getDbVersion()
\r
77 return coordsys.getVersion();
\r
80 public AlignmentI getSequenceRecords(String queries) throws Exception
\r
82 SequenceThread seqfetcher = new org.biojava.dasobert.das.SequenceThread(queries, source);
\r
83 DasSequenceSourceListener ourlistener = new DasSequenceSourceListener(this, queries);
\r
84 seqfetcher.addSequenceListener(ourlistener);
\r
86 try { Thread.sleep(5); } catch (Exception e) {};
\r
87 while (ourlistener.isNotCalled() && seqfetcher.isAlive())
\r
89 try { Thread.sleep(5); } catch (Exception e) { };
\r
91 if (ourlistener.isNotCalled() || ourlistener.hasNoSequences())
\r
93 System.err.println("Sequence Query to "+source.getNickname()+" with '"+queries+"' returned no sequences.");
\r
96 return ourlistener.getSequences();
\r
100 public String getTestQuery()
\r
102 return coordsys.getTestCode();
\r
104 public boolean isValidReference(String accession)
\r
106 // TODO try to validate an accession against source
\r
107 // We don't really know how to do this without querying source
\r
112 * @return the source
\r
114 public Das1Source getSource()
\r
119 * @return the coordsys
\r
121 public DasCoordinateSystem getCoordsys()
\r