3 import java.util.Enumeration;
\r
4 import java.util.Hashtable;
\r
5 import java.util.Vector;
\r
7 import jalview.datamodel.Alignment;
\r
8 import jalview.datamodel.AlignmentI;
\r
9 import jalview.datamodel.DBRefSource;
\r
10 import jalview.datamodel.SequenceI;
\r
13 * prototype of abstract sequence retrieval interface
\r
16 public class SequenceFetcher extends ASequenceFetcher
\r
19 * Thread safe construction of database proxies TODO: extend to a configurable
\r
20 * database plugin mechanism where classes are instantiated by reflection and
\r
21 * queried for their DbRefSource and version association.
\r
24 public SequenceFetcher()
\r
26 FETCHABLEDBS = new Hashtable();
\r
27 FETCHABLEDBS.put(DBRefSource.EMBL,
\r
28 new jalview.ws.dbsources.EmblSource());
\r
29 FETCHABLEDBS.put(DBRefSource.EMBLCDS,
\r
30 new jalview.ws.dbsources.EmblCdsSouce());
\r
31 FETCHABLEDBS.put(DBRefSource.UNIPROT,
\r
32 new jalview.ws.dbsources.Uniprot());
\r
33 FETCHABLEDBS.put(DBRefSource.UP_NAME,
\r
34 new jalview.ws.dbsources.Uniprot());
\r
35 FETCHABLEDBS.put(DBRefSource.PDB, new jalview.ws.dbsources.Pdb());
\r
36 FETCHABLEDBS.put(DBRefSource.PFAM, new jalview.ws.dbsources.Pfam());
\r
39 public static void main(String[] argv)
\r
41 AlignmentI ds = null;
\r
42 Vector noProds = new Vector();
\r
43 if (argv != null && argv.length > 0)
\r
46 .println("Ignoring arguments. Future Usage = dbname:query1;query2;...");
\r
48 SequenceFetcher sfetcher = new SequenceFetcher();
\r
49 Enumeration e = sfetcher.FETCHABLEDBS.keys();
\r
50 while (e.hasMoreElements())
\r
52 String db = (String) e.nextElement();
\r
54 if (db.equals(DBRefSource.PDB))
\r
56 DbSourceProxy sp = sfetcher.getSourceProxy(db);
\r
58 .println("" + db + ": retrieving test:" + sp.getTestQuery());
\r
59 AlignmentI al = null;
\r
62 al = sp.getSequenceRecords(sp.getTestQuery());
\r
63 if (al != null && al.getHeight() > 0)
\r
65 boolean dna = sp.getDbSourceProperties().containsKey(
\r
66 DBRefSource.DNACODINGSEQDB)
\r
67 || sp.getDbSourceProperties().containsKey(
\r
68 DBRefSource.DNASEQDB)
\r
69 || sp.getDbSourceProperties().containsKey(
\r
70 DBRefSource.CODINGSEQDB);
\r
71 // try and find products
\r
72 String types[] = jalview.analysis.CrossRef.findSequenceXrefTypes(
\r
73 dna, al.getSequencesArray());
\r
76 System.out.println("Xref Types for: "+(dna ? "dna" : "prot"));
\r
77 for (int t = 0; t < types.length; t++)
\r
79 System.out.println("Type: " + types[t]);
\r
80 SequenceI[] prod = jalview.analysis.CrossRef.findXrefSequences(al
\r
81 .getSequencesArray(), dna, types[t]).getSequencesArray();
\r
82 System.out.println("Found "
\r
83 + ((prod == null) ? "no" : "" + prod.length)
\r
87 for (int p=0; p<prod.length; p++)
\r
89 System.out.println("Prod "+p+": "+prod[p].getDisplayId(true));
\r
94 noProds.addElement((dna ? new Object[] { al, al } : new Object[] { al }) );
\r
98 } catch (Exception ex)
\r
100 System.out.println("ERROR:Failed to retrieve test query.");
\r
101 ex.printStackTrace(System.out);
\r
105 System.out.println("ERROR:No alignment retrieved.");
\r
106 StringBuffer raw = sp.getRawRecords();
\r
108 System.out.println(raw.toString());
\r
110 System.out.println("ERROR:No Raw results.");
\r
114 System.out.println("Retrieved " + al.getHeight() + " sequences.");
\r
115 for (int s = 0; s < al.getHeight(); s++)
\r
117 SequenceI sq = al.getSequenceAt(s);
\r
118 while (sq.getDatasetSequence() != null)
\r
120 sq = sq.getDatasetSequence();
\r
125 ds = new Alignment(new SequenceI[]
\r
131 ds.addSequence(sq);
\r
135 System.out.flush();
\r
136 System.err.flush();
\r
139 if (noProds.size()>0)
\r
141 Enumeration ts = noProds.elements();
\r
142 while (ts.hasMoreElements())
\r
145 Object[] typeSq = (Object[]) ts.nextElement();
\r
146 boolean dna = (typeSq.length>1);
\r
147 AlignmentI al = (AlignmentI) typeSq[0];
\r
148 System.out.println("Trying getProducts for "+al.getSequenceAt(0).getDisplayId(true));
\r
149 System.out.println("Search DS Xref for: "+(dna ? "dna" : "prot"));
\r
150 // have a bash at finding the products amongst all the retrieved sequences.
\r
151 SequenceI[] prod = jalview.analysis.CrossRef.findXrefSequences(al
\r
152 .getSequencesArray(), dna, null, ds).getSequencesArray(); // note should test rather than throw away codon mapping (if present)
\r
153 System.out.println("Found "
\r
154 + ((prod == null) ? "no" : "" + prod.length)
\r
158 for (int p=0; p<prod.length; p++)
\r
160 System.out.println("Prod "+p+": "+prod[p].getDisplayId(true));
\r