3 import java.util.Enumeration;
\r
4 import java.util.Vector;
\r
6 import jalview.datamodel.Alignment;
\r
7 import jalview.datamodel.AlignmentI;
\r
8 import jalview.datamodel.DBRefSource;
\r
9 import jalview.datamodel.SequenceI;
\r
10 import jalview.ws.seqfetcher.ASequenceFetcher;
\r
11 import jalview.ws.seqfetcher.DbSourceProxy;
\r
14 * This is the the concrete implementation of the sequence retrieval interface
\r
15 * and abstract class in jalview.ws.seqfetcher. This implements the run-time
\r
16 * discovery of sequence database clients, and provides a hardwired main for testing all registered handlers.
\r
19 public class SequenceFetcher extends ASequenceFetcher
\r
22 * Thread safe construction of database proxies TODO: extend to a configurable
\r
23 * database plugin mechanism where classes are instantiated by reflection and
\r
24 * queried for their DbRefSource and version association.
\r
27 public SequenceFetcher()
\r
29 addDBRefSourceImpl(jalview.ws.dbsources.EmblSource.class);
\r
30 addDBRefSourceImpl(jalview.ws.dbsources.EmblCdsSouce.class);
\r
31 addDBRefSourceImpl(jalview.ws.dbsources.Uniprot.class);
\r
32 addDBRefSourceImpl(jalview.ws.dbsources.UnprotName.class);
\r
33 addDBRefSourceImpl(jalview.ws.dbsources.Pdb.class);
\r
34 addDBRefSourceImpl(jalview.ws.dbsources.Pfam.class);
\r
37 public static void main(String[] argv)
\r
39 AlignmentI ds = null;
\r
40 Vector noProds = new Vector();
\r
41 if (argv != null && argv.length > 0)
\r
44 .println("Ignoring arguments. Future Usage = dbname:query1;query2;...");
\r
46 ASequenceFetcher sfetcher = new SequenceFetcher();
\r
47 String[] dbSources = sfetcher.getSupportedDb();
\r
48 for (int dbsource=0; dbsource<dbSources.length;dbsource++)
\r
50 String db = dbSources[dbsource];
\r
52 if (db.equals(DBRefSource.PDB))
\r
54 DbSourceProxy sp = sfetcher.getSourceProxy(db);
\r
56 .println("" + db + ": retrieving test:" + sp.getTestQuery());
\r
57 AlignmentI al = null;
\r
60 al = sp.getSequenceRecords(sp.getTestQuery());
\r
61 if (al != null && al.getHeight() > 0)
\r
63 boolean dna = sp.getDbSourceProperties().containsKey(
\r
64 DBRefSource.DNACODINGSEQDB)
\r
65 || sp.getDbSourceProperties().containsKey(
\r
66 DBRefSource.DNASEQDB)
\r
67 || sp.getDbSourceProperties().containsKey(
\r
68 DBRefSource.CODINGSEQDB);
\r
69 // try and find products
\r
70 String types[] = jalview.analysis.CrossRef.findSequenceXrefTypes(
\r
71 dna, al.getSequencesArray());
\r
74 System.out.println("Xref Types for: " + (dna ? "dna" : "prot"));
\r
75 for (int t = 0; t < types.length; t++)
\r
77 System.out.println("Type: " + types[t]);
\r
78 SequenceI[] prod = jalview.analysis.CrossRef
\r
79 .findXrefSequences(al.getSequencesArray(), dna,
\r
80 types[t]).getSequencesArray();
\r
81 System.out.println("Found "
\r
82 + ((prod == null) ? "no" : "" + prod.length)
\r
86 for (int p = 0; p < prod.length; p++)
\r
88 System.out.println("Prod " + p + ": "
\r
89 + prod[p].getDisplayId(true));
\r
96 noProds.addElement((dna ? new Object[]
\r
97 { al, al } : new Object[]
\r
102 } catch (Exception ex)
\r
104 System.out.println("ERROR:Failed to retrieve test query.");
\r
105 ex.printStackTrace(System.out);
\r
109 System.out.println("ERROR:No alignment retrieved.");
\r
110 StringBuffer raw = sp.getRawRecords();
\r
112 System.out.println(raw.toString());
\r
114 System.out.println("ERROR:No Raw results.");
\r
118 System.out.println("Retrieved " + al.getHeight() + " sequences.");
\r
119 for (int s = 0; s < al.getHeight(); s++)
\r
121 SequenceI sq = al.getSequenceAt(s);
\r
122 while (sq.getDatasetSequence() != null)
\r
124 sq = sq.getDatasetSequence();
\r
129 ds = new Alignment(new SequenceI[]
\r
135 ds.addSequence(sq);
\r
139 System.out.flush();
\r
140 System.err.flush();
\r
143 if (noProds.size() > 0)
\r
145 Enumeration ts = noProds.elements();
\r
146 while (ts.hasMoreElements())
\r
149 Object[] typeSq = (Object[]) ts.nextElement();
\r
150 boolean dna = (typeSq.length > 1);
\r
151 AlignmentI al = (AlignmentI) typeSq[0];
\r
152 System.out.println("Trying getProducts for "
\r
153 + al.getSequenceAt(0).getDisplayId(true));
\r
154 System.out.println("Search DS Xref for: " + (dna ? "dna" : "prot"));
\r
155 // have a bash at finding the products amongst all the retrieved
\r
157 SequenceI[] seqs = al.getSequencesArray();
\r
158 Alignment prodal = jalview.analysis.CrossRef.findXrefSequences(
\r
159 seqs, dna, null, ds);
\r
160 System.out.println("Found "
\r
161 + ((prodal == null) ? "no" : "" + prodal.getHeight()) + " products");
\r
162 if (prodal != null)
\r
164 SequenceI[] prod = prodal.getSequencesArray(); // note
\r
175 for (int p = 0; p < prod.length; p++)
\r
177 System.out.println("Prod " + p + ": "
\r
178 + prod[p].getDisplayId(true));
\r