/*\r
* Jalview - A Sequence Alignment Editor and Viewer\r
-* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
*\r
* This program is free software; you can redistribute it and/or\r
* modify it under the terms of the GNU General Public License\r
import java.net.URL;\r
\r
import org.biojava.dasobert.das.FeatureThread;\r
-import org.biojava.dasobert.dasregistry.Das1Source;\r
import org.biojava.dasobert.eventmodel.FeatureEvent;\r
import org.biojava.dasobert.eventmodel.FeatureListener;\r
import org.biojava.dasobert.dasregistry.DasSource;\r
\r
long startTime;\r
int threadsRunning = 0;\r
+ boolean allBatchesComplete = false;\r
\r
\r
/**\r
DasCoordinateSystem[] coords = source.getCoordinateSystem();\r
for (int c = 0; c < coords.length; c++)\r
{\r
- if (coords[c].getName().equalsIgnoreCase("UniProt"))\r
+ if (coords[c].getName().indexOf("UniProt")>-1)\r
{\r
uniprotCount++;\r
break;\r
int refCount = 0;\r
for(int i=0; i<sequences.length; i++)\r
{\r
- Vector dbref = sequences[i].getDBRef();\r
+ DBRefEntry [] dbref = sequences[i].getDBRef();\r
if(dbref!=null)\r
{\r
- for(int j=0; j<dbref.size(); j++)\r
+ for(int j=0; j<dbref.length; j++)\r
{\r
- System.out.println(dbref.elementAt(j)\r
- +" "+jalview.datamodel.DBRefSource.UNIPROT);\r
- if(dbref.elementAt(j)\r
+ if(dbref[j].getSource()\r
.equals(jalview.datamodel.DBRefSource.UNIPROT))\r
{\r
- System.out.println("got a match");\r
refCount++;\r
break;\r
}\r
}\r
}\r
\r
- System.out.println(refCount+" "+uniprotCount+" "+sequences.length);\r
if(refCount<sequences.length && uniprotCount>0)\r
{\r
\r
\r
if(reply == JOptionPane.YES_OPTION)\r
{\r
- new DBRefFetcher(\r
- af.getViewport().getAlignment(), af).fetchDBRefs(true);\r
-\r
+ Thread thread = new Thread(new FetchDBRefs());\r
+ thread.start();\r
}\r
+ else\r
+ startFetching();\r
}\r
+ else\r
+ startFetching();\r
\r
- System.out.println("User selection is "\r
- +\r
+ /* System.out.println("User selection is " +\r
( ( (float) uniprotCount / (float) selectedSources.size()) * 100)\r
+ " % Uniprot, and "+refCount+" / " +sequences.length+" have uniprot accession");\r
+*/\r
+ }\r
\r
-\r
+ void startFetching()\r
+ {\r
Thread thread = new Thread(this);\r
thread.start();\r
}\r
+\r
+ class FetchDBRefs implements Runnable\r
+ {\r
+ public void run()\r
+ {\r
+ new DBRefFetcher(\r
+ af.getViewport().getAlignment(), af).fetchDBRefs(true);\r
+ startFetching();\r
+ }\r
+ }\r
+\r
+\r
/**\r
* creates a jalview sequence feature from a das feature document\r
* @param dasfeature\r
// null\r
// );\r
\r
- // System.out.println(nickname+" "+f.getType()+" "+f.begin+" "+f.end);\r
return f;\r
}\r
catch (Exception e) {\r
+ System.out.println("ERRR "+e);\r
e.printStackTrace();\r
+ System.out.println("############");\r
Cache.log.debug("Failed to parse "+dasfeature.toString(), e);\r
return null;\r
}\r
{\r
setThreadsRunning(+1);\r
\r
- int start=seq.getStart(), end = seq.getEnd();\r
-\r
- if(af.getViewport().getSelectionGroup()!=null)\r
+ // int start=seq.getStart(), end = seq.getEnd();\r
+ /* if(af.getViewport().getSelectionGroup()!=null)\r
{\r
SequenceI tmp = af.getViewport().getAlignment().findName(seq.getName());\r
start = tmp.findPosition(\r
end = tmp.findPosition(\r
af.getViewport().getSelectionGroup().getEndRes()\r
);\r
- }\r
+ }*/\r
\r
FeatureThread fetcher = new FeatureThread(id\r
- + ":" + start + "," + end, source);\r
+ // + ":" + start + "," + end,\r
+ , source);\r
+\r
\r
fetcher.addFeatureListener(new FeatureListener()\r
{\r
synchronized void setThreadsRunning(int i)\r
{\r
threadsRunning += i;\r
- if(threadsRunning<1)\r
+ if(threadsRunning<1 && allBatchesComplete)\r
+ {\r
af.setProgressBar("DAS Feature Fetching Complete", startTime);\r
+\r
+ if(af.featureSettings!=null)\r
+ af.featureSettings.setTableData();\r
+ }\r
}\r
\r
/**\r
\r
try\r
{\r
+ //We must limit the feature fetching to 20 to prevent\r
+ //Servers being overloaded with too many requests\r
+ int batchCount = 0;\r
+ int batchMaxSize = 10;\r
int seqIndex = 0;\r
while (seqIndex < sequences.length)\r
{\r
- Vector uprefs = jalview.util.DBRefUtils.selectRefs(sequences[seqIndex].getDBRef(),\r
+ batchCount ++;\r
+ if(batchCount>=batchMaxSize)\r
+ {\r
+ waitTillBatchComplete();\r
+ batchCount = 0;\r
+ }\r
+\r
+ DBRefEntry [] uprefs = jalview.util.DBRefUtils.selectRefs(sequences[seqIndex].getDBRef(),\r
new String[] {\r
jalview.datamodel.DBRefSource.PDB,\r
jalview.datamodel.DBRefSource.UNIPROT});\r
if (uprefs != null)\r
{\r
// we know the id for this entry, so don't note its ID in the unknownSequences list\r
- for (int j = 0; j < uprefs.size(); j++)\r
+ for (int j = 0; j < uprefs.length; j++)\r
{\r
\r
// Will have to pass any mapping information to the fetcher - the start/end for the DBRefEntry may not be the same as the sequence's start/end\r
- org.biojava.dasobert.dasregistry.DasCoordinateSystem cs[] = dasSource.getCoordinateSystem();\r
+ DasCoordinateSystem cs[] = dasSource.getCoordinateSystem();\r
for (int l=0; l<cs.length; l++)\r
{\r
- if (jalview.util.DBRefUtils.isDasCoordinateSystem(cs[l].getName(), (DBRefEntry)\r
- uprefs.get(j)))\r
+ if (jalview.util.DBRefUtils.isDasCoordinateSystem(cs[l].getName(), uprefs[j]))\r
{\r
Cache.log.debug("Launched fetcher for coordinate system " +\r
cs[l].getName());\r
\r
createFeatureFetcher(sequences[seqIndex],\r
dasSource.getUrl(),\r
- ( (DBRefEntry) uprefs.get(j)).\r
- getAccessionId(),\r
+ uprefs[j].getAccessionId(),\r
dasSource.getNickname());\r
}\r
}\r
{\r
ex.printStackTrace();\r
}\r
+ allBatchesComplete = true;\r
+ }\r
+\r
+ void waitTillBatchComplete()\r
+ {\r
+ while( threadsRunning > 0 )\r
+ {\r
+ try{\r
+ Thread.sleep(500);\r
+\r
+ }catch(Exception ex)\r
+ {\r
+ ex.printStackTrace();\r
+ }\r
+ }\r
+\r
}\r
\r
\r