X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2FDBRefFetcher.java;h=5413a30526531d4609f5a4996b4c201f6d355240;hb=961d720adf23c1206d8110f6b2d00f072872155a;hp=c1fe276676973d08f180c17f30df232d0bb9c61d;hpb=8a6fa9ea9900d0f106529c3f6283e7f9d76dd2cb;p=jalview.git diff --git a/src/jalview/ws/DBRefFetcher.java b/src/jalview/ws/DBRefFetcher.java index c1fe276..5413a30 100644 --- a/src/jalview/ws/DBRefFetcher.java +++ b/src/jalview/ws/DBRefFetcher.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) + * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle * * This file is part of Jalview. * @@ -30,15 +30,17 @@ import jalview.gui.CutAndPasteTransfer; import jalview.gui.Desktop; import jalview.gui.IProgressIndicator; import jalview.gui.OOMWarning; +import jalview.ws.dbsources.das.api.jalviewSourceI; +import jalview.ws.seqfetcher.DbSourceProxy; import java.lang.reflect.Array; +import java.util.ArrayList; import java.util.Enumeration; import java.util.Hashtable; +import java.util.List; import java.util.StringTokenizer; import java.util.Vector; -import org.biojava.dasobert.dasregistry.DasSource; - import uk.ac.ebi.picr.model.UPEntry; /** @@ -69,7 +71,7 @@ public class DBRefFetcher implements Runnable // The key will be the seq name or accession id of the seq Hashtable seqRefs; - String[] dbSources; + DbSourceProxy[] dbSources; SequenceFetcher sfetcher; @@ -104,7 +106,7 @@ public class DBRefFetcher implements Runnable * @param sources * array of database source strings to query references from */ - public DBRefFetcher(SequenceI[] seqs, AlignFrame af, String[] sources) + public DBRefFetcher(SequenceI[] seqs, AlignFrame af, DbSourceProxy[] sources) { this.af = af; alseqs = new SequenceI[seqs.length]; @@ -124,26 +126,20 @@ public class DBRefFetcher implements Runnable { // af.featureSettings_actionPerformed(null); String[] defdb = null, otherdb = sfetcher - .getDbInstances(jalview.ws.dbsources.DasSequenceSource.class); - Vector selsources = new Vector(), dasselsrc = (af.featureSettings != null) ? af.featureSettings + .getDbInstances(jalview.ws.dbsources.das.datamodel.DasSequenceSource.class); + List selsources = new ArrayList(); + Vector dasselsrc = (af.featureSettings != null) ? af.featureSettings .getSelectedSources() : new jalview.gui.DasSourceBrowser() .getSelectedSources(); - Enumeration en = dasselsrc.elements(); + Enumeration en = dasselsrc.elements(); while (en.hasMoreElements()) { - DasSource src = (DasSource) en.nextElement(); - selsources.addElement(src.getNickname()); - } - int osel = 0; - for (int o = 0; otherdb != null && o < otherdb.length; o++) - { - if (!selsources.contains(otherdb[o])) + jalviewSourceI src = en.nextElement(); + List sp=src.getSequenceSourceProxies(); + selsources.addAll(sp); + if (sp.size()>1) { - otherdb[o] = null; - } - else - { - osel++; + Cache.log.debug("Added many Db Sources for :"+src.getTitle()); } } // select appropriate databases based on alignFrame context. @@ -155,17 +151,17 @@ public class DBRefFetcher implements Runnable { defdb = DBRefSource.PROTEINDBS; } - // append the selected sequence sources to the default dbs - dbSources = new String[defdb.length + osel]; - System.arraycopy(defdb, 0, dbSources, 0, defdb.length); - for (int o = 0, op = defdb.length; otherdb != null - && o < otherdb.length; o++) - { - if (otherdb[o] != null) - { - dbSources[op++] = otherdb[o]; + List srces=new ArrayList(); + for (String ddb:defdb) { + List srcesfordb=sfetcher.getSourceProxy(ddb); + if (srcesfordb!=null) { + srces.addAll(srcesfordb); } } + + // append the selected sequence sources to the default dbs + srces.addAll(selsources); + dbSources = srces.toArray(new DbSourceProxy[0]); } else { @@ -183,15 +179,14 @@ public class DBRefFetcher implements Runnable { if (dbSources == null) { - dbSources = new String[] - {}; + dbSources = new DbSourceProxy[0]; } // append additional sources - String[] otherdb = sfetcher - .getDbInstances(jalview.ws.dbsources.DasSequenceSource.class); + DbSourceProxy[] otherdb=sfetcher + .getDbSourceProxyInstances(jalview.ws.dbsources.das.datamodel.DasSequenceSource.class); if (otherdb != null && otherdb.length > 0) { - String[] newsrc = new String[dbSources.length + otherdb.length]; + DbSourceProxy[] newsrc = new DbSourceProxy[dbSources.length + otherdb.length]; System.arraycopy(dbSources, 0, newsrc, 0, dbSources.length); System.arraycopy(otherdb, 0, newsrc, dbSources.length, otherdb.length); dbSources = newsrc; @@ -295,25 +290,9 @@ public class DBRefFetcher implements Runnable while (sdataset.size() > 0 && db < dbSources.length) { int maxqlen = 1; // default number of queries made to at one time - System.err.println("Verifying against " + dbSources[db]); - jalview.ws.seqfetcher.DbSourceProxy dbsource = sfetcher - .getSourceProxy(dbSources[db]); - if (dbsource == null) - { - System.err.println("No proxy for " + dbSources[db]); - db++; - continue; - } - if (dbsource.getDbSourceProperties() - .containsKey(DBRefSource.MULTIACC)) - { - maxqlen = ((Integer) dbsource.getDbSourceProperties().get( - DBRefSource.MULTIACC)).intValue(); - } - else - { - maxqlen = 1; - } + System.err.println("Verifying against " + dbSources[db].getDbName()); + boolean dn = false; + // iterate through db for each remaining un-verified sequence SequenceI[] currSeqs = new SequenceI[sdataset.size()]; sdataset.copyInto(currSeqs);// seqs that are to be validated against @@ -323,116 +302,132 @@ public class DBRefFetcher implements Runnable int seqIndex = 0; - while (queries.size() > 0 || seqIndex < currSeqs.length) + jalview.ws.seqfetcher.DbSourceProxy dbsource = dbSources[db]; { - if (queries.size() > 0) + // for moment, we dumbly iterate over all retrieval sources for a particular database + // TODO: introduce multithread multisource queries and logic to remove a query from other sources if any source for a database returns a record + if (dbsource.getDbSourceProperties().containsKey( + DBRefSource.MULTIACC)) { - // Still queries to make for current seqIndex - StringBuffer queryString = new StringBuffer(""); - int numq = 0, nqSize = (maxqlen > queries.size()) ? queries - .size() : maxqlen; - - while (queries.size() > 0 && numq < nqSize) + maxqlen = ((Integer) dbsource.getDbSourceProperties().get( + DBRefSource.MULTIACC)).intValue(); + } + else + { + maxqlen = 1; + } + while (queries.size() > 0 || seqIndex < currSeqs.length) + { + if (queries.size() > 0) { - String query = (String) queries.elementAt(0); - if (dbsource.isValidReference(query)) + // Still queries to make for current seqIndex + StringBuffer queryString = new StringBuffer(""); + int numq = 0, nqSize = (maxqlen > queries.size()) ? queries + .size() : maxqlen; + + while (queries.size() > 0 && numq < nqSize) { - queryString.append((numq == 0) ? "" : dbsource - .getAccessionSeparator()); - queryString.append(query); - numq++; + String query = (String) queries.elementAt(0); + if (dbsource.isValidReference(query)) + { + queryString.append((numq == 0) ? "" : dbsource + .getAccessionSeparator()); + queryString.append(query); + numq++; + } + // remove the extracted query string + queries.removeElementAt(0); } - // remove the extracted query string - queries.removeElementAt(0); - } - // make the queries and process the response - AlignmentI retrieved = null; - try - { - if (jalview.bin.Cache.log.isDebugEnabled()) + // make the queries and process the response + AlignmentI retrieved = null; + try + { + if (jalview.bin.Cache.log.isDebugEnabled()) + { + jalview.bin.Cache.log.debug("Querying " + + dbsource.getDbName() + " with : '" + + queryString.toString() + "'"); + } + retrieved = dbsource.getSequenceRecords(queryString + .toString()); + } catch (Exception ex) { - jalview.bin.Cache.log.debug("Querying " - + dbsource.getDbName() + " with : '" - + queryString.toString() + "'"); + ex.printStackTrace(); + } catch (OutOfMemoryError err) + { + new OOMWarning("retrieving database references (" + + queryString.toString() + ")", err); + } + if (retrieved != null) + { + transferReferences(sdataset, dbsource.getDbSource(), retrieved); } - retrieved = dbsource.getSequenceRecords(queryString.toString()); - } catch (Exception ex) - { - ex.printStackTrace(); - } catch (OutOfMemoryError err) - { - new OOMWarning("retrieving database references (" - + queryString.toString() + ")", err); - } - if (retrieved != null) - { - transferReferences(sdataset, dbSources[db], retrieved); } - } - else - { - // make some more strings for use as queries - for (int i = 0; (seqIndex < dataset.length) && (i < 50); seqIndex++, i++) + else { - SequenceI sequence = dataset[seqIndex]; - DBRefEntry[] uprefs = jalview.util.DBRefUtils.selectRefs( - sequence.getDBRef(), new String[] - { dbSources[db] }); // jalview.datamodel.DBRefSource.UNIPROT - // }); - // check for existing dbrefs to use - if (uprefs != null && uprefs.length > 0) + // make some more strings for use as queries + for (int i = 0; (seqIndex < dataset.length) && (i < 50); seqIndex++, i++) { - for (int j = 0; j < uprefs.length; j++) + SequenceI sequence = dataset[seqIndex]; + DBRefEntry[] uprefs = jalview.util.DBRefUtils.selectRefs( + sequence.getDBRef(), new String[] + { dbsource.getDbSource() }); // jalview.datamodel.DBRefSource.UNIPROT + // }); + // check for existing dbrefs to use + if (uprefs != null && uprefs.length > 0) { - addSeqId(sequence, uprefs[j].getAccessionId()); - queries.addElement(uprefs[j].getAccessionId().toUpperCase()); + for (int j = 0; j < uprefs.length; j++) + { + addSeqId(sequence, uprefs[j].getAccessionId()); + queries.addElement(uprefs[j].getAccessionId() + .toUpperCase()); + } } - } - else - { - // generate queries from sequence ID string - StringTokenizer st = new StringTokenizer(sequence.getName(), - "|"); - while (st.hasMoreTokens()) + else { - String token = st.nextToken(); - UPEntry[] presp = null; - if (picrClient != null) + // generate queries from sequence ID string + StringTokenizer st = new StringTokenizer( + sequence.getName(), "|"); + while (st.hasMoreTokens()) { - // resolve the string against PICR to recover valid IDs - try + String token = st.nextToken(); + UPEntry[] presp = null; + if (picrClient != null) { - presp = picrClient - .getUPIForAccession(token, null, - picrClient.getMappedDatabaseNames(), - null, true); - } catch (Exception e) + // resolve the string against PICR to recover valid IDs + try + { + presp = picrClient.getUPIForAccession(token, null, + picrClient.getMappedDatabaseNames(), null, + true); + } catch (Exception e) + { + System.err.println("Exception with Picr for '" + + token + "'\n"); + e.printStackTrace(); + } + } + if (presp != null && presp.length > 0) { - System.err.println("Exception with Picr for '" + token - + "'\n"); - e.printStackTrace(); + for (int id = 0; id < presp.length; id++) + { + // construct sequences from response if sequences are + // present, and do a transferReferences + // otherwise transfer non sequence x-references directly. + } + System.out + .println("Validated ID against PICR... (for what its worth):" + + token); + addSeqId(sequence, token); + queries.addElement(token.toUpperCase()); } - } - if (presp != null && presp.length > 0) - { - for (int id = 0; id < presp.length; id++) + else { - // construct sequences from response if sequences are - // present, and do a transferReferences - // otherwise transfer non sequence x-references directly. + // if () + // System.out.println("Not querying source with token="+token+"\n"); + addSeqId(sequence, token); + queries.addElement(token.toUpperCase()); } - System.out - .println("Validated ID against PICR... (for what its worth):" - + token); - addSeqId(sequence, token); - queries.addElement(token.toUpperCase()); - } - else - { - // if () - // System.out.println("Not querying source with token="+token+"\n"); - addSeqId(sequence, token); - queries.addElement(token.toUpperCase()); } } }