package jalview.ws;\r
\r
import java.util.Enumeration;\r
-import java.util.Hashtable;\r
import java.util.Vector;\r
\r
import jalview.datamodel.Alignment;\r
import jalview.ws.seqfetcher.DbSourceProxy;\r
\r
/**\r
- * prototype of abstract sequence retrieval interface\r
+ * This is the the concrete implementation of the sequence retrieval interface\r
+ * and abstract class in jalview.ws.seqfetcher. This implements the run-time\r
+ * discovery of sequence database clients, and provides a hardwired main for testing all registered handlers. \r
* \r
*/\r
public class SequenceFetcher extends ASequenceFetcher\r
*/\r
public SequenceFetcher()\r
{\r
- FETCHABLEDBS = new Hashtable();\r
- FETCHABLEDBS.put(DBRefSource.EMBL,\r
- new jalview.ws.dbsources.EmblSource());\r
- FETCHABLEDBS.put(DBRefSource.EMBLCDS,\r
- new jalview.ws.dbsources.EmblCdsSouce());\r
- FETCHABLEDBS.put(DBRefSource.UNIPROT,\r
- new jalview.ws.dbsources.Uniprot());\r
- FETCHABLEDBS.put(DBRefSource.UP_NAME,\r
- new jalview.ws.dbsources.Uniprot());\r
- FETCHABLEDBS.put(DBRefSource.PDB, new jalview.ws.dbsources.Pdb());\r
- FETCHABLEDBS.put(DBRefSource.PFAM, new jalview.ws.dbsources.Pfam());\r
+ addDBRefSourceImpl(jalview.ws.dbsources.EmblSource.class);\r
+ addDBRefSourceImpl(jalview.ws.dbsources.EmblCdsSouce.class);\r
+ addDBRefSourceImpl(jalview.ws.dbsources.Uniprot.class);\r
+ addDBRefSourceImpl(jalview.ws.dbsources.UnprotName.class);\r
+ addDBRefSourceImpl(jalview.ws.dbsources.Pdb.class);\r
+ addDBRefSourceImpl(jalview.ws.dbsources.Pfam.class);\r
};\r
- \r
+\r
public static void main(String[] argv)\r
{\r
AlignmentI ds = null;\r
System.out\r
.println("Ignoring arguments. Future Usage = dbname:query1;query2;...");\r
}\r
- SequenceFetcher sfetcher = new SequenceFetcher();\r
- Enumeration e = sfetcher.FETCHABLEDBS.keys();\r
- while (e.hasMoreElements())\r
+ ASequenceFetcher sfetcher = new SequenceFetcher();\r
+ String[] dbSources = sfetcher.getSupportedDb();\r
+ for (int dbsource=0; dbsource<dbSources.length;dbsource++)\r
{\r
- String db = (String) e.nextElement();\r
+ String db = dbSources[dbsource];\r
// skip me\r
if (db.equals(DBRefSource.PDB))\r
continue;\r
dna, al.getSequencesArray());\r
if (types != null)\r
{\r
- System.out.println("Xref Types for: "+(dna ? "dna" : "prot"));\r
+ System.out.println("Xref Types for: " + (dna ? "dna" : "prot"));\r
for (int t = 0; t < types.length; t++)\r
{\r
System.out.println("Type: " + types[t]);\r
- SequenceI[] prod = jalview.analysis.CrossRef.findXrefSequences(al\r
- .getSequencesArray(), dna, types[t]).getSequencesArray();\r
+ SequenceI[] prod = jalview.analysis.CrossRef\r
+ .findXrefSequences(al.getSequencesArray(), dna,\r
+ types[t]).getSequencesArray();\r
System.out.println("Found "\r
+ ((prod == null) ? "no" : "" + prod.length)\r
+ " products");\r
- if (prod!=null)\r
+ if (prod != null)\r
{\r
- for (int p=0; p<prod.length; p++)\r
+ for (int p = 0; p < prod.length; p++)\r
{\r
- System.out.println("Prod "+p+": "+prod[p].getDisplayId(true));\r
+ System.out.println("Prod " + p + ": "\r
+ + prod[p].getDisplayId(true));\r
}\r
}\r
}\r
- } else {\r
- noProds.addElement((dna ? new Object[] { al, al } : new Object[] { al }) ); \r
+ }\r
+ else\r
+ {\r
+ noProds.addElement((dna ? new Object[]\r
+ { al, al } : new Object[]\r
+ { al }));\r
}\r
\r
}\r
System.err.flush();\r
\r
}\r
- if (noProds.size()>0)\r
+ if (noProds.size() > 0)\r
{\r
Enumeration ts = noProds.elements();\r
while (ts.hasMoreElements())\r
- \r
+\r
{\r
Object[] typeSq = (Object[]) ts.nextElement();\r
- boolean dna = (typeSq.length>1);\r
+ boolean dna = (typeSq.length > 1);\r
AlignmentI al = (AlignmentI) typeSq[0];\r
- System.out.println("Trying getProducts for "+al.getSequenceAt(0).getDisplayId(true));\r
- System.out.println("Search DS Xref for: "+(dna ? "dna" : "prot"));\r
- // have a bash at finding the products amongst all the retrieved sequences.\r
- SequenceI[] prod = jalview.analysis.CrossRef.findXrefSequences(al\r
- .getSequencesArray(), dna, null, ds).getSequencesArray(); // note should test rather than throw away codon mapping (if present)\r
+ System.out.println("Trying getProducts for "\r
+ + al.getSequenceAt(0).getDisplayId(true));\r
+ System.out.println("Search DS Xref for: " + (dna ? "dna" : "prot"));\r
+ // have a bash at finding the products amongst all the retrieved\r
+ // sequences.\r
+ SequenceI[] seqs = al.getSequencesArray();\r
+ Alignment prodal = jalview.analysis.CrossRef.findXrefSequences(\r
+ seqs, dna, null, ds);\r
System.out.println("Found "\r
- + ((prod == null) ? "no" : "" + prod.length)\r
- + " products");\r
- if (prod!=null)\r
+ + ((prodal == null) ? "no" : "" + prodal.getHeight()) + " products");\r
+ if (prodal != null)\r
{\r
- for (int p=0; p<prod.length; p++)\r
+ SequenceI[] prod = prodal.getSequencesArray(); // note\r
+ // should\r
+ // test\r
+ // rather\r
+ // than\r
+ // throw\r
+ // away\r
+ // codon\r
+ // mapping\r
+ // (if\r
+ // present)\r
+ for (int p = 0; p < prod.length; p++)\r
{\r
- System.out.println("Prod "+p+": "+prod[p].getDisplayId(true));\r
+ System.out.println("Prod " + p + ": "\r
+ + prod[p].getDisplayId(true));\r
}\r
}\r
}\r