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 discovery
\r
18 public class SequenceFetcher extends ASequenceFetcher
\r
21 * Thread safe construction of database proxies TODO: extend to a configurable
\r
22 * database plugin mechanism where classes are instantiated by reflection and
\r
23 * queried for their DbRefSource and version association.
\r
26 public SequenceFetcher()
\r
28 addDBRefSourceImpl(jalview.ws.dbsources.EmblSource.class);
\r
29 addDBRefSourceImpl(jalview.ws.dbsources.EmblCdsSouce.class);
\r
30 addDBRefSourceImpl(jalview.ws.dbsources.Uniprot.class);
\r
31 addDBRefSourceImpl(jalview.ws.dbsources.UnprotName.class);
\r
32 addDBRefSourceImpl(jalview.ws.dbsources.Pdb.class);
\r
33 addDBRefSourceImpl(jalview.ws.dbsources.Pfam.class);
\r
36 public static void main(String[] argv)
\r
38 AlignmentI ds = null;
\r
39 Vector noProds = new Vector();
\r
40 if (argv != null && argv.length > 0)
\r
43 .println("Ignoring arguments. Future Usage = dbname:query1;query2;...");
\r
45 ASequenceFetcher sfetcher = new SequenceFetcher();
\r
46 String[] dbSources = sfetcher.getSupportedDb();
\r
47 for (int dbsource=0; dbsource<dbSources.length;dbsource++)
\r
49 String db = dbSources[dbsource];
\r
51 if (db.equals(DBRefSource.PDB))
\r
53 DbSourceProxy sp = sfetcher.getSourceProxy(db);
\r
55 .println("" + db + ": retrieving test:" + sp.getTestQuery());
\r
56 AlignmentI al = null;
\r
59 al = sp.getSequenceRecords(sp.getTestQuery());
\r
60 if (al != null && al.getHeight() > 0)
\r
62 boolean dna = sp.getDbSourceProperties().containsKey(
\r
63 DBRefSource.DNACODINGSEQDB)
\r
64 || sp.getDbSourceProperties().containsKey(
\r
65 DBRefSource.DNASEQDB)
\r
66 || sp.getDbSourceProperties().containsKey(
\r
67 DBRefSource.CODINGSEQDB);
\r
68 // try and find products
\r
69 String types[] = jalview.analysis.CrossRef.findSequenceXrefTypes(
\r
70 dna, al.getSequencesArray());
\r
73 System.out.println("Xref Types for: " + (dna ? "dna" : "prot"));
\r
74 for (int t = 0; t < types.length; t++)
\r
76 System.out.println("Type: " + types[t]);
\r
77 SequenceI[] prod = jalview.analysis.CrossRef
\r
78 .findXrefSequences(al.getSequencesArray(), dna,
\r
79 types[t]).getSequencesArray();
\r
80 System.out.println("Found "
\r
81 + ((prod == null) ? "no" : "" + prod.length)
\r
85 for (int p = 0; p < prod.length; p++)
\r
87 System.out.println("Prod " + p + ": "
\r
88 + prod[p].getDisplayId(true));
\r
95 noProds.addElement((dna ? new Object[]
\r
96 { al, al } : new Object[]
\r
101 } catch (Exception ex)
\r
103 System.out.println("ERROR:Failed to retrieve test query.");
\r
104 ex.printStackTrace(System.out);
\r
108 System.out.println("ERROR:No alignment retrieved.");
\r
109 StringBuffer raw = sp.getRawRecords();
\r
111 System.out.println(raw.toString());
\r
113 System.out.println("ERROR:No Raw results.");
\r
117 System.out.println("Retrieved " + al.getHeight() + " sequences.");
\r
118 for (int s = 0; s < al.getHeight(); s++)
\r
120 SequenceI sq = al.getSequenceAt(s);
\r
121 while (sq.getDatasetSequence() != null)
\r
123 sq = sq.getDatasetSequence();
\r
128 ds = new Alignment(new SequenceI[]
\r
134 ds.addSequence(sq);
\r
138 System.out.flush();
\r
139 System.err.flush();
\r
142 if (noProds.size() > 0)
\r
144 Enumeration ts = noProds.elements();
\r
145 while (ts.hasMoreElements())
\r
148 Object[] typeSq = (Object[]) ts.nextElement();
\r
149 boolean dna = (typeSq.length > 1);
\r
150 AlignmentI al = (AlignmentI) typeSq[0];
\r
151 System.out.println("Trying getProducts for "
\r
152 + al.getSequenceAt(0).getDisplayId(true));
\r
153 System.out.println("Search DS Xref for: " + (dna ? "dna" : "prot"));
\r
154 // have a bash at finding the products amongst all the retrieved
\r
156 SequenceI[] seqs = al.getSequencesArray();
\r
157 Alignment prodal = jalview.analysis.CrossRef.findXrefSequences(
\r
158 seqs, dna, null, ds);
\r
159 System.out.println("Found "
\r
160 + ((prodal == null) ? "no" : "" + prodal.getHeight()) + " products");
\r
161 if (prodal != null)
\r
163 SequenceI[] prod = prodal.getSequencesArray(); // note
\r
174 for (int p = 0; p < prod.length; p++)
\r
176 System.out.println("Prod " + p + ": "
\r
177 + prod[p].getDisplayId(true));
\r