import jalview.gui.Desktop;\r
import jalview.gui.IProgressIndicator;\r
import jalview.gui.OOMWarning;\r
+import jalview.ws.dbsources.das.api.jalviewSourceI;\r
+import jalview.ws.seqfetcher.DbSourceProxy;\r
\r
import java.lang.reflect.Array;\r
+import java.util.ArrayList;\r
import java.util.Enumeration;\r
import java.util.Hashtable;\r
+import java.util.List;\r
import java.util.StringTokenizer;\r
import java.util.Vector;\r
\r
-import org.biojava.dasobert.dasregistry.DasSource;\r
-\r
import uk.ac.ebi.picr.model.UPEntry;\r
\r
/**\r
// The key will be the seq name or accession id of the seq\r
Hashtable seqRefs;\r
\r
- String[] dbSources;\r
+ DbSourceProxy[] dbSources;\r
\r
SequenceFetcher sfetcher;\r
\r
* @param sources\r
* array of database source strings to query references from\r
*/\r
- public DBRefFetcher(SequenceI[] seqs, AlignFrame af, String[] sources)\r
+ public DBRefFetcher(SequenceI[] seqs, AlignFrame af, DbSourceProxy[] sources)\r
{\r
this.af = af;\r
alseqs = new SequenceI[seqs.length];\r
{\r
// af.featureSettings_actionPerformed(null);\r
String[] defdb = null, otherdb = sfetcher\r
- .getDbInstances(jalview.ws.dbsources.DasSequenceSource.class);\r
- Vector selsources = new Vector(), dasselsrc = (af.featureSettings != null) ? af.featureSettings\r
+ .getDbInstances(jalview.ws.dbsources.das.datamodel.DasSequenceSource.class);\r
+ List<DbSourceProxy> selsources = new ArrayList<DbSourceProxy>();\r
+ Vector dasselsrc = (af.featureSettings != null) ? af.featureSettings\r
.getSelectedSources() : new jalview.gui.DasSourceBrowser()\r
.getSelectedSources();\r
- Enumeration en = dasselsrc.elements();\r
+ Enumeration<jalviewSourceI> en = dasselsrc.elements();\r
while (en.hasMoreElements())\r
{\r
- DasSource src = (DasSource) en.nextElement();\r
- selsources.addElement(src.getNickname());\r
- }\r
- int osel = 0;\r
- for (int o = 0; otherdb != null && o < otherdb.length; o++)\r
- {\r
- if (!selsources.contains(otherdb[o]))\r
+ jalviewSourceI src = en.nextElement();\r
+ List<DbSourceProxy> sp=src.getSequenceSourceProxies();\r
+ selsources.addAll(sp);\r
+ if (sp.size()>1)\r
{\r
- otherdb[o] = null;\r
- }\r
- else\r
- {\r
- osel++;\r
+ Cache.log.debug("Added many Db Sources for :"+src.getTitle());\r
}\r
}\r
// select appropriate databases based on alignFrame context.\r
{\r
defdb = DBRefSource.PROTEINDBS;\r
}\r
- // append the selected sequence sources to the default dbs\r
- dbSources = new String[defdb.length + osel];\r
- System.arraycopy(defdb, 0, dbSources, 0, defdb.length);\r
- for (int o = 0, op = defdb.length; otherdb != null\r
- && o < otherdb.length; o++)\r
- {\r
- if (otherdb[o] != null)\r
- {\r
- dbSources[op++] = otherdb[o];\r
- }\r
+ List<DbSourceProxy> srces=new ArrayList<DbSourceProxy>();\r
+ for (String ddb:defdb) {\r
+ srces.addAll(sfetcher.getSourceProxy(ddb));\r
}\r
+ \r
+ // append the selected sequence sources to the default dbs\r
+ srces.addAll(selsources);\r
+ dbSources = srces.toArray(new DbSourceProxy[0]);\r
}\r
else\r
{\r
{\r
if (dbSources == null)\r
{\r
- dbSources = new String[]\r
- {};\r
+ dbSources = new DbSourceProxy[0];\r
}\r
// append additional sources\r
- String[] otherdb = sfetcher\r
- .getDbInstances(jalview.ws.dbsources.DasSequenceSource.class);\r
+ DbSourceProxy[] otherdb=sfetcher\r
+ .getDbSourceProxyInstances(jalview.ws.dbsources.das.datamodel.DasSequenceSource.class);\r
if (otherdb != null && otherdb.length > 0)\r
{\r
- String[] newsrc = new String[dbSources.length + otherdb.length];\r
+ DbSourceProxy[] newsrc = new DbSourceProxy[dbSources.length + otherdb.length];\r
System.arraycopy(dbSources, 0, newsrc, 0, dbSources.length);\r
System.arraycopy(otherdb, 0, newsrc, dbSources.length, otherdb.length);\r
dbSources = newsrc;\r
while (sdataset.size() > 0 && db < dbSources.length)\r
{\r
int maxqlen = 1; // default number of queries made to at one time\r
- System.err.println("Verifying against " + dbSources[db]);\r
- jalview.ws.seqfetcher.DbSourceProxy dbsource = sfetcher\r
- .getSourceProxy(dbSources[db]);\r
- if (dbsource == null)\r
- {\r
- System.err.println("No proxy for " + dbSources[db]);\r
- db++;\r
- continue;\r
- }\r
- if (dbsource.getDbSourceProperties()\r
- .containsKey(DBRefSource.MULTIACC))\r
- {\r
- maxqlen = ((Integer) dbsource.getDbSourceProperties().get(\r
- DBRefSource.MULTIACC)).intValue();\r
- }\r
- else\r
- {\r
- maxqlen = 1;\r
- }\r
+ System.err.println("Verifying against " + dbSources[db].getDbName());\r
+ boolean dn = false;\r
+\r
// iterate through db for each remaining un-verified sequence\r
SequenceI[] currSeqs = new SequenceI[sdataset.size()];\r
sdataset.copyInto(currSeqs);// seqs that are to be validated against\r
\r
int seqIndex = 0;\r
\r
- while (queries.size() > 0 || seqIndex < currSeqs.length)\r
+ jalview.ws.seqfetcher.DbSourceProxy dbsource = dbSources[db];\r
{\r
- if (queries.size() > 0)\r
+ // for moment, we dumbly iterate over all retrieval sources for a particular database\r
+ // TODO: introduce multithread multisource queries and logic to remove a query from other sources if any source for a database returns a record\r
+ if (dbsource.getDbSourceProperties().containsKey(\r
+ DBRefSource.MULTIACC))\r
{\r
- // Still queries to make for current seqIndex\r
- StringBuffer queryString = new StringBuffer("");\r
- int numq = 0, nqSize = (maxqlen > queries.size()) ? queries\r
- .size() : maxqlen;\r
-\r
- while (queries.size() > 0 && numq < nqSize)\r
+ maxqlen = ((Integer) dbsource.getDbSourceProperties().get(\r
+ DBRefSource.MULTIACC)).intValue();\r
+ }\r
+ else\r
+ {\r
+ maxqlen = 1;\r
+ }\r
+ while (queries.size() > 0 || seqIndex < currSeqs.length)\r
+ {\r
+ if (queries.size() > 0)\r
{\r
- String query = (String) queries.elementAt(0);\r
- if (dbsource.isValidReference(query))\r
+ // Still queries to make for current seqIndex\r
+ StringBuffer queryString = new StringBuffer("");\r
+ int numq = 0, nqSize = (maxqlen > queries.size()) ? queries\r
+ .size() : maxqlen;\r
+\r
+ while (queries.size() > 0 && numq < nqSize)\r
{\r
- queryString.append((numq == 0) ? "" : dbsource\r
- .getAccessionSeparator());\r
- queryString.append(query);\r
- numq++;\r
+ String query = (String) queries.elementAt(0);\r
+ if (dbsource.isValidReference(query))\r
+ {\r
+ queryString.append((numq == 0) ? "" : dbsource\r
+ .getAccessionSeparator());\r
+ queryString.append(query);\r
+ numq++;\r
+ }\r
+ // remove the extracted query string\r
+ queries.removeElementAt(0);\r
}\r
- // remove the extracted query string\r
- queries.removeElementAt(0);\r
- }\r
- // make the queries and process the response\r
- AlignmentI retrieved = null;\r
- try\r
- {\r
- if (jalview.bin.Cache.log.isDebugEnabled())\r
+ // make the queries and process the response\r
+ AlignmentI retrieved = null;\r
+ try\r
+ {\r
+ if (jalview.bin.Cache.log.isDebugEnabled())\r
+ {\r
+ jalview.bin.Cache.log.debug("Querying "\r
+ + dbsource.getDbName() + " with : '"\r
+ + queryString.toString() + "'");\r
+ }\r
+ retrieved = dbsource.getSequenceRecords(queryString\r
+ .toString());\r
+ } catch (Exception ex)\r
{\r
- jalview.bin.Cache.log.debug("Querying "\r
- + dbsource.getDbName() + " with : '"\r
- + queryString.toString() + "'");\r
+ ex.printStackTrace();\r
+ } catch (OutOfMemoryError err)\r
+ {\r
+ new OOMWarning("retrieving database references ("\r
+ + queryString.toString() + ")", err);\r
+ }\r
+ if (retrieved != null)\r
+ {\r
+ transferReferences(sdataset, dbsource.getDbSource(), retrieved);\r
}\r
- retrieved = dbsource.getSequenceRecords(queryString.toString());\r
- } catch (Exception ex)\r
- {\r
- ex.printStackTrace();\r
- } catch (OutOfMemoryError err)\r
- {\r
- new OOMWarning("retrieving database references ("\r
- + queryString.toString() + ")", err);\r
- }\r
- if (retrieved != null)\r
- {\r
- transferReferences(sdataset, dbSources[db], retrieved);\r
}\r
- }\r
- else\r
- {\r
- // make some more strings for use as queries\r
- for (int i = 0; (seqIndex < dataset.length) && (i < 50); seqIndex++, i++)\r
+ else\r
{\r
- SequenceI sequence = dataset[seqIndex];\r
- DBRefEntry[] uprefs = jalview.util.DBRefUtils.selectRefs(\r
- sequence.getDBRef(), new String[]\r
- { dbSources[db] }); // jalview.datamodel.DBRefSource.UNIPROT\r
- // });\r
- // check for existing dbrefs to use\r
- if (uprefs != null && uprefs.length > 0)\r
+ // make some more strings for use as queries\r
+ for (int i = 0; (seqIndex < dataset.length) && (i < 50); seqIndex++, i++)\r
{\r
- for (int j = 0; j < uprefs.length; j++)\r
+ SequenceI sequence = dataset[seqIndex];\r
+ DBRefEntry[] uprefs = jalview.util.DBRefUtils.selectRefs(\r
+ sequence.getDBRef(), new String[]\r
+ { dbsource.getDbSource() }); // jalview.datamodel.DBRefSource.UNIPROT\r
+ // });\r
+ // check for existing dbrefs to use\r
+ if (uprefs != null && uprefs.length > 0)\r
{\r
- addSeqId(sequence, uprefs[j].getAccessionId());\r
- queries.addElement(uprefs[j].getAccessionId().toUpperCase());\r
+ for (int j = 0; j < uprefs.length; j++)\r
+ {\r
+ addSeqId(sequence, uprefs[j].getAccessionId());\r
+ queries.addElement(uprefs[j].getAccessionId()\r
+ .toUpperCase());\r
+ }\r
}\r
- }\r
- else\r
- {\r
- // generate queries from sequence ID string\r
- StringTokenizer st = new StringTokenizer(sequence.getName(),\r
- "|");\r
- while (st.hasMoreTokens())\r
+ else\r
{\r
- String token = st.nextToken();\r
- UPEntry[] presp = null;\r
- if (picrClient != null)\r
+ // generate queries from sequence ID string\r
+ StringTokenizer st = new StringTokenizer(\r
+ sequence.getName(), "|");\r
+ while (st.hasMoreTokens())\r
{\r
- // resolve the string against PICR to recover valid IDs\r
- try\r
+ String token = st.nextToken();\r
+ UPEntry[] presp = null;\r
+ if (picrClient != null)\r
{\r
- presp = picrClient\r
- .getUPIForAccession(token, null,\r
- picrClient.getMappedDatabaseNames(),\r
- null, true);\r
- } catch (Exception e)\r
+ // resolve the string against PICR to recover valid IDs\r
+ try\r
+ {\r
+ presp = picrClient.getUPIForAccession(token, null,\r
+ picrClient.getMappedDatabaseNames(), null,\r
+ true);\r
+ } catch (Exception e)\r
+ {\r
+ System.err.println("Exception with Picr for '"\r
+ + token + "'\n");\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ if (presp != null && presp.length > 0)\r
{\r
- System.err.println("Exception with Picr for '" + token\r
- + "'\n");\r
- e.printStackTrace();\r
+ for (int id = 0; id < presp.length; id++)\r
+ {\r
+ // construct sequences from response if sequences are\r
+ // present, and do a transferReferences\r
+ // otherwise transfer non sequence x-references directly.\r
+ }\r
+ System.out\r
+ .println("Validated ID against PICR... (for what its worth):"\r
+ + token);\r
+ addSeqId(sequence, token);\r
+ queries.addElement(token.toUpperCase());\r
}\r
- }\r
- if (presp != null && presp.length > 0)\r
- {\r
- for (int id = 0; id < presp.length; id++)\r
+ else\r
{\r
- // construct sequences from response if sequences are\r
- // present, and do a transferReferences\r
- // otherwise transfer non sequence x-references directly.\r
+ // if ()\r
+ // System.out.println("Not querying source with token="+token+"\n");\r
+ addSeqId(sequence, token);\r
+ queries.addElement(token.toUpperCase());\r
}\r
- System.out\r
- .println("Validated ID against PICR... (for what its worth):"\r
- + token);\r
- addSeqId(sequence, token);\r
- queries.addElement(token.toUpperCase());\r
- }\r
- else\r
- {\r
- // if ()\r
- // System.out.println("Not querying source with token="+token+"\n");\r
- addSeqId(sequence, token);\r
- queries.addElement(token.toUpperCase());\r
}\r
}\r
}\r