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
11 import jalview.ws.seqfetcher.ASequenceFetcher;
\r
12 import jalview.ws.seqfetcher.DbSourceProxy;
\r
15 * prototype of abstract sequence retrieval interface
\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 FETCHABLEDBS = new Hashtable();
\r
29 FETCHABLEDBS.put(DBRefSource.EMBL,
\r
30 new jalview.ws.dbsources.EmblSource());
\r
31 FETCHABLEDBS.put(DBRefSource.EMBLCDS,
\r
32 new jalview.ws.dbsources.EmblCdsSouce());
\r
33 FETCHABLEDBS.put(DBRefSource.UNIPROT,
\r
34 new jalview.ws.dbsources.Uniprot());
\r
35 FETCHABLEDBS.put(DBRefSource.UP_NAME,
\r
36 new jalview.ws.dbsources.Uniprot());
\r
37 FETCHABLEDBS.put(DBRefSource.PDB, new jalview.ws.dbsources.Pdb());
\r
38 FETCHABLEDBS.put(DBRefSource.PFAM, new jalview.ws.dbsources.Pfam());
\r
41 public static void main(String[] argv)
\r
43 AlignmentI ds = null;
\r
44 Vector noProds = new Vector();
\r
45 if (argv != null && argv.length > 0)
\r
48 .println("Ignoring arguments. Future Usage = dbname:query1;query2;...");
\r
50 SequenceFetcher sfetcher = new SequenceFetcher();
\r
51 Enumeration e = sfetcher.FETCHABLEDBS.keys();
\r
52 while (e.hasMoreElements())
\r
54 String db = (String) e.nextElement();
\r
56 if (db.equals(DBRefSource.PDB))
\r
58 DbSourceProxy sp = sfetcher.getSourceProxy(db);
\r
60 .println("" + db + ": retrieving test:" + sp.getTestQuery());
\r
61 AlignmentI al = null;
\r
64 al = sp.getSequenceRecords(sp.getTestQuery());
\r
65 if (al != null && al.getHeight() > 0)
\r
67 boolean dna = sp.getDbSourceProperties().containsKey(
\r
68 DBRefSource.DNACODINGSEQDB)
\r
69 || sp.getDbSourceProperties().containsKey(
\r
70 DBRefSource.DNASEQDB)
\r
71 || sp.getDbSourceProperties().containsKey(
\r
72 DBRefSource.CODINGSEQDB);
\r
73 // try and find products
\r
74 String types[] = jalview.analysis.CrossRef.findSequenceXrefTypes(
\r
75 dna, al.getSequencesArray());
\r
78 System.out.println("Xref Types for: "+(dna ? "dna" : "prot"));
\r
79 for (int t = 0; t < types.length; t++)
\r
81 System.out.println("Type: " + types[t]);
\r
82 SequenceI[] prod = jalview.analysis.CrossRef.findXrefSequences(al
\r
83 .getSequencesArray(), dna, types[t]).getSequencesArray();
\r
84 System.out.println("Found "
\r
85 + ((prod == null) ? "no" : "" + prod.length)
\r
89 for (int p=0; p<prod.length; p++)
\r
91 System.out.println("Prod "+p+": "+prod[p].getDisplayId(true));
\r
96 noProds.addElement((dna ? new Object[] { al, al } : new Object[] { al }) );
\r
100 } catch (Exception ex)
\r
102 System.out.println("ERROR:Failed to retrieve test query.");
\r
103 ex.printStackTrace(System.out);
\r
107 System.out.println("ERROR:No alignment retrieved.");
\r
108 StringBuffer raw = sp.getRawRecords();
\r
110 System.out.println(raw.toString());
\r
112 System.out.println("ERROR:No Raw results.");
\r
116 System.out.println("Retrieved " + al.getHeight() + " sequences.");
\r
117 for (int s = 0; s < al.getHeight(); s++)
\r
119 SequenceI sq = al.getSequenceAt(s);
\r
120 while (sq.getDatasetSequence() != null)
\r
122 sq = sq.getDatasetSequence();
\r
127 ds = new Alignment(new SequenceI[]
\r
133 ds.addSequence(sq);
\r
137 System.out.flush();
\r
138 System.err.flush();
\r
141 if (noProds.size()>0)
\r
143 Enumeration ts = noProds.elements();
\r
144 while (ts.hasMoreElements())
\r
147 Object[] typeSq = (Object[]) ts.nextElement();
\r
148 boolean dna = (typeSq.length>1);
\r
149 AlignmentI al = (AlignmentI) typeSq[0];
\r
150 System.out.println("Trying getProducts for "+al.getSequenceAt(0).getDisplayId(true));
\r
151 System.out.println("Search DS Xref for: "+(dna ? "dna" : "prot"));
\r
152 // have a bash at finding the products amongst all the retrieved sequences.
\r
153 SequenceI[] prod = jalview.analysis.CrossRef.findXrefSequences(al
\r
154 .getSequencesArray(), dna, null, ds).getSequencesArray(); // note should test rather than throw away codon mapping (if present)
\r
155 System.out.println("Found "
\r
156 + ((prod == null) ? "no" : "" + prod.length)
\r
160 for (int p=0; p<prod.length; p++)
\r
162 System.out.println("Prod "+p+": "+prod[p].getDisplayId(true));
\r