X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2FSequenceFetcher.java;h=0d93cb82902834cbec7e09fbc49efd48235ff556;hb=3d1147ffae5fbc5bdb7c80caa9655df656b8e67b;hp=e6fc3856ec3b916d5040c7d098efb5bcc1f27a9b;hpb=5d88ae6bbf1ea113cefcb43b7918b5baf560a76e;p=jalview.git diff --git a/src/jalview/ws/SequenceFetcher.java b/src/jalview/ws/SequenceFetcher.java index e6fc385..0d93cb8 100644 --- a/src/jalview/ws/SequenceFetcher.java +++ b/src/jalview/ws/SequenceFetcher.java @@ -1,16 +1,25 @@ package jalview.ws; +import java.util.ArrayList; import java.util.Enumeration; -import java.util.Hashtable; import java.util.Vector; +import org.biojava.dasobert.das2.Das2Source; +import org.biojava.dasobert.dasregistry.Das1Source; +import org.biojava.dasobert.dasregistry.DasCoordinateSystem; +import org.biojava.dasobert.dasregistry.DasSource; + import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentI; import jalview.datamodel.DBRefSource; import jalview.datamodel.SequenceI; +import jalview.ws.seqfetcher.ASequenceFetcher; +import jalview.ws.seqfetcher.DbSourceProxy; /** - * prototype of abstract sequence retrieval interface + * This is the the concrete implementation of the sequence retrieval interface + * and abstract class in jalview.ws.seqfetcher. This implements the run-time + * discovery of sequence database clients, and provides a hardwired main for testing all registered handlers. * */ public class SequenceFetcher extends ASequenceFetcher @@ -23,44 +32,123 @@ public class SequenceFetcher extends ASequenceFetcher */ public SequenceFetcher() { - FETCHABLEDBS = new Hashtable(); - FETCHABLEDBS.put(DBRefSource.EMBL, - new jalview.ws.dbsources.EmblSource()); - FETCHABLEDBS.put(DBRefSource.EMBLCDS, - new jalview.ws.dbsources.EmblCdsSouce()); - FETCHABLEDBS.put(DBRefSource.UNIPROT, - new jalview.ws.dbsources.Uniprot()); - FETCHABLEDBS.put(DBRefSource.UP_NAME, - new jalview.ws.dbsources.Uniprot()); - FETCHABLEDBS.put(DBRefSource.PDB, new jalview.ws.dbsources.Pdb()); - FETCHABLEDBS.put(DBRefSource.PFAM, new jalview.ws.dbsources.Pfam()); - }; + addDBRefSourceImpl(jalview.ws.dbsources.EmblSource.class); + addDBRefSourceImpl(jalview.ws.dbsources.EmblCdsSouce.class); + addDBRefSourceImpl(jalview.ws.dbsources.Uniprot.class); + addDBRefSourceImpl(jalview.ws.dbsources.UnprotName.class); + addDBRefSourceImpl(jalview.ws.dbsources.Pdb.class); + addDBRefSourceImpl(jalview.ws.dbsources.PfamFull.class); + addDBRefSourceImpl(jalview.ws.dbsources.PfamSeed.class); // ensures Seed alignment is 'default' for PFAM + registerDasSequenceSources(); + } + /** + * return an ordered list of database sources suitable for using in a GUI element + */ + public String[] getOrderedSupportedSources() { + String[] srcs = this.getSupportedDb(); + ArrayList dassrc = new ArrayList(), + nondas=new ArrayList(); + for (int i=0;i=0; j--,i++) + { + srcs[i] = ((String[]) sorted[j])[0]; + sorted[j] = null; + } + sorted = dassrc.toArray(); + tosort = new String[sorted.length]; + dassrc.clear(); + for (int j=0;j=0; j--,i++) + { + srcs[i] = ((String[]) sorted[j])[0]; + sorted[j] = null; + } + return srcs; + } + /** + * simple run method to test dbsources. + * @param argv + */ public static void main(String[] argv) { AlignmentI ds = null; Vector noProds = new Vector(); + String usage = "SequenceFetcher.main [ ]\n" + +"With no arguments, all DbSources will be queried with their test Accession number.\n" + +"If given two arguments, SequenceFetcher will try to find the DbFetcher corresponding to and retrieve from it."; if (argv != null && argv.length > 0) { + DbSourceProxy sp = new SequenceFetcher().getSourceProxy(argv[0]); + if (sp!=null) + { + AlignmentI al = null; + try + { + al = sp.getSequenceRecords(argv[1]); + } catch (Exception e) + { + e.printStackTrace(); + System.err.println("Error when retrieving "+argv[1]+" from "+argv[0]+"\nUsage: "+usage); + } + SequenceI[] prod = al.getSequencesArray(); + if (al!=null) + { + for (int p = 0; p < prod.length; p++) + { + System.out.println("Prod " + p + ": " + + prod[p].getDisplayId(true) + " : "+prod[p].getDescription()); + } + } + return; + } else { + System.err.println("Can't resolve "+argv[0]+" as a database name. Allowed values are :\n"+new SequenceFetcher().getSupportedDb()); + } System.out - .println("Ignoring arguments. Future Usage = dbname:query1;query2;..."); + .println(usage); } - SequenceFetcher sfetcher = new SequenceFetcher(); - Enumeration e = sfetcher.FETCHABLEDBS.keys(); - while (e.hasMoreElements()) + ASequenceFetcher sfetcher = new SequenceFetcher(); + String[] dbSources = sfetcher.getSupportedDb(); + for (int dbsource=0; dbsource 0) + if (al != null && al.getHeight() > 0 && sp.getDbSourceProperties()!=null) { boolean dna = sp.getDbSourceProperties().containsKey( DBRefSource.DNACODINGSEQDB) @@ -73,25 +161,31 @@ public class SequenceFetcher extends ASequenceFetcher dna, al.getSequencesArray()); if (types != null) { - System.out.println("Xref Types for: "+(dna ? "dna" : "prot")); + System.out.println("Xref Types for: " + (dna ? "dna" : "prot")); for (int t = 0; t < types.length; t++) { System.out.println("Type: " + types[t]); - SequenceI[] prod = jalview.analysis.CrossRef.findXrefSequences(al - .getSequencesArray(), dna, types[t]).getSequencesArray(); + SequenceI[] prod = jalview.analysis.CrossRef + .findXrefSequences(al.getSequencesArray(), dna, + types[t]).getSequencesArray(); System.out.println("Found " + ((prod == null) ? "no" : "" + prod.length) + " products"); - if (prod!=null) + if (prod != null) { - for (int p=0; p0) + if (noProds.size() > 0) { Enumeration ts = noProds.elements(); while (ts.hasMoreElements()) - + { Object[] typeSq = (Object[]) ts.nextElement(); - boolean dna = (typeSq.length>1); + boolean dna = (typeSq.length > 1); AlignmentI al = (AlignmentI) typeSq[0]; - System.out.println("Trying getProducts for "+al.getSequenceAt(0).getDisplayId(true)); - System.out.println("Search DS Xref for: "+(dna ? "dna" : "prot")); - // have a bash at finding the products amongst all the retrieved sequences. - SequenceI[] prod = jalview.analysis.CrossRef.findXrefSequences(al - .getSequencesArray(), dna, null, ds).getSequencesArray(); // note should test rather than throw away codon mapping (if present) + System.out.println("Trying getProducts for " + + al.getSequenceAt(0).getDisplayId(true)); + System.out.println("Search DS Xref for: " + (dna ? "dna" : "prot")); + // have a bash at finding the products amongst all the retrieved + // sequences. + SequenceI[] seqs = al.getSequencesArray(); + Alignment prodal = jalview.analysis.CrossRef.findXrefSequences( + seqs, dna, null, ds); System.out.println("Found " - + ((prod == null) ? "no" : "" + prod.length) - + " products"); - if (prod!=null) + + ((prodal == null) ? "no" : "" + prodal.getHeight()) + " products"); + if (prodal != null) { - for (int p=0; p