/*\r
* Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Copyright (C) 2007 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
*/\r
package jalview.io;\r
\r
-import jalview.datamodel.*;\r
-\r
-import jalview.gui.*;\r
-\r
+import java.net.*;\r
import java.util.*;\r
\r
-import java.net.URL;\r
-\r
-import org.biojava.dasobert.das.FeatureThread;\r
-import org.biojava.dasobert.eventmodel.FeatureEvent;\r
-import org.biojava.dasobert.eventmodel.FeatureListener;\r
-import org.biojava.dasobert.dasregistry.DasSource;\r
-\r
-import org.biojava.dasobert.das2.io.DasSourceReaderImpl;\r
-import org.biojava.dasobert.dasregistry.Das1Source;\r
-import org.biojava.dasobert.dasregistry.DasSource;\r
-import org.biojava.dasobert.das2.Das2Source;\r
-import org.biojava.dasobert.das2.DasSourceConverter;\r
+import javax.swing.*;\r
\r
+import org.biojava.dasobert.das.*;\r
+import org.biojava.dasobert.das2.*;\r
+import org.biojava.dasobert.das2.io.*;\r
+import org.biojava.dasobert.dasregistry.*;\r
+import org.biojava.dasobert.eventmodel.*;\r
import jalview.bin.Cache;\r
-import org.biojava.dasobert.dasregistry.DasCoordinateSystem;\r
-\r
-import javax.swing.*;\r
+import jalview.datamodel.*;\r
+import jalview.gui.*;\r
\r
/**\r
* DOCUMENT ME!\r
thread.start();\r
}\r
else\r
+ {\r
startFetching();\r
}\r
+ }\r
else\r
+ {\r
startFetching();\r
+ }\r
\r
}\r
\r
af.setProgressBar("DAS Feature Fetching Complete", startTime);\r
\r
if(af.featureSettings!=null)\r
+ {\r
af.featureSettings.setTableData();\r
+ }\r
\r
fsettings.complete();\r
}\r
int end = af.getViewport().getEndSeq();\r
int index;\r
for(index=start; index<end; index++)\r
- if(seq == af.getViewport().getAlignment().getSequenceAt(index).getDatasetSequence())\r
{\r
- af.alignPanel.repaint();\r
+ if (seq ==\r
+ af.getViewport().getAlignment().getSequenceAt(index).getDatasetSequence())\r
+ {\r
+ af.alignPanel.paintAlignment(true);\r
break;\r
}\r
}\r
+ }\r
\r
\r
void nextSequence(DasSource dasSource, SequenceI seq)\r
new String[]\r
{\r
// jalview.datamodel.DBRefSource.PDB,\r
- jalview.datamodel.DBRefSource.UNIPROT\r
+ jalview.datamodel.DBRefSource.UNIPROT,\r
+ // jalview.datamodel.DBRefSource.EMBL - not tested on any EMBL coord sys sources\r
});\r
+// TODO: minimal list of DAS queries to make by querying with untyped ID if distinct from any typed IDs\r
+\r
+ boolean dasCoordSysFound = false;\r
\r
- if (uprefs != null)\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.length; j++)\r
+ // do any of these ids match the source's coordinate system ?\r
+ for (int j = 0; j < uprefs.length; j++)\r
{\r
- // Will have to pass any mapping information to the fetcher\r
- //- the start/end for the DBRefEntry may not be the same as the sequence's start/end\r
DasCoordinateSystem cs[] = dasSource.getCoordinateSystem();\r
- if(cs.length>0)\r
+\r
+ for(int csIndex=0; csIndex<cs.length; csIndex++)\r
{\r
- // for (int l = 0; l < cs.length; l++)\r
+ if (cs.length > 0 && jalview.util.DBRefUtils\r
+ .isDasCoordinateSystem(cs[csIndex].getName(), uprefs[j]))\r
{\r
- //\r
- if (jalview.util.DBRefUtils\r
- .isDasCoordinateSystem(cs[0].getName(), uprefs[0]))\r
- {\r
- Cache.log.debug("Launched fetcher for coordinate system " +\r
- cs[0].getName());\r
-\r
- createFeatureFetcher(seq,\r
- dasSource,\r
- uprefs[0].getAccessionId());\r
- }\r
+ Cache.log.debug("Launched fetcher for coordinate system " +\r
+ cs[0].getName());\r
+ // Will have to pass any mapping information to the fetcher\r
+ //- the start/end for the DBRefEntry may not be the same as the sequence's start/end\r
+\r
+ System.out.println(seq.getName() + " " + (seq.getDatasetSequence() == null)\r
+ + " " + dasSource.getUrl());\r
+\r
+ dasCoordSysFound = false;\r
+ createFeatureFetcher(seq,\r
+ dasSource,\r
+ uprefs[j]);\r
+ break; // only do this for one reference - assume same source will send same features for all IDs\r
}\r
+ else\r
+ System.out.println("IGNORE " + cs[csIndex].getName());\r
}\r
}\r
}\r
- else\r
+\r
+ if(!dasCoordSysFound)\r
{\r
String id = null;\r
// try and use the name as the sequence id\r
\r
}\r
\r
- /**\r
- * fetch and add das features to a sequence using the given source URL and Id to create a feature request\r
- * @param seq\r
- * @param SourceUrl\r
- * @param id\r
- */\r
+\r
+/**\r
+ * fetch and add das features to a sequence using the given source URL and compatible DbRef id.\r
+ * new features are mapped using the DbRef mapping to the local coordinate system.\r
+ * @param seq\r
+ * @param SourceUrl\r
+ * @param dbref\r
+ */\r
+ protected void createFeatureFetcher(final SequenceI seq, final DasSource dasSource,\r
+ final DBRefEntry dbref) {\r
+\r
+ //////////////\r
+ /// fetch DAS features\r
+ final Das1Source source = new Das1Source();\r
+ source.setUrl(dasSource.getUrl());\r
+ source.setNickname(dasSource.getNickname());\r
+ if (dbref==null || dbref.getAccessionId()==null || dbref.getAccessionId().length()<1)\r
+ {\r
+ return;\r
+ }\r
+ Cache.log.debug("new Das Feature Fetcher for " + dbref.getSource()+":"+dbref.getAccessionId() + " querying " +\r
+ dasSource.getUrl());\r
+ FeatureThread fetcher = new FeatureThread(dbref.getAccessionId()\r
+ // + ":" + start + "," + end,\r
+ , source);\r
+\r
+ fetcher.addFeatureListener(new FeatureListener()\r
+ {\r
+ public void comeBackLater(FeatureEvent e)\r
+ {\r
+ responseComplete(dasSource, seq);\r
+ Cache.log.debug("das source " + e.getDasSource().getNickname() +\r
+ " asked us to come back in " + e.getComeBackLater() +\r
+ " secs.");\r
+ }\r
+\r
+ public void newFeatures(FeatureEvent e)\r
+ {\r
+\r
+ Das1Source ds = e.getDasSource();\r
+\r
+ Map[] features = e.getFeatures();\r
+ // add features to sequence\r
+ Cache.log.debug("das source " + ds.getUrl() + " returned " +\r
+ features.length + " features");\r
+\r
+ if (features.length > 0)\r
+ {\r
+ for (int i = 0; i < features.length; i++)\r
+ {\r
+ SequenceFeature f = newSequenceFeature(features[i],\r
+ source.getNickname());\r
+ if (dbref.getMap()!=null && f.getBegin()>0 && f.getEnd()>0) {\r
+ Cache.log.debug("mapping from "+f.getBegin()+" - "+f.getEnd());\r
+ SequenceFeature vf[] = dbref.getMap().locateFeature(f);\r
+ if (vf!=null) {\r
+ for (int v=0;v<vf.length;v++)\r
+ {\r
+ Cache.log.debug("mapping to "+v+": "+vf[v].getBegin()+" - "+vf[v].getEnd());\r
+ seq.addSequenceFeature(vf[v]);\r
+ }\r
+ }\r
+ } else {\r
+ seq.addSequenceFeature(f);\r
+ }\r
+ }\r
+\r
+ featuresAdded(seq);\r
+ }\r
+ else\r
+ {\r
+ // System.out.println("No features found for " + seq.getName()\r
+ // + " from: " + e.getDasSource().getNickname());\r
+ }\r
+ responseComplete(dasSource, seq);\r
+\r
+ }\r
+ }\r
+\r
+ );\r
+\r
+ fetcher.start();\r
+ }\r
protected void createFeatureFetcher(final SequenceI seq,\r
final DasSource dasSource,\r
String id)\r
*/\r
String desc = new String();\r
if (dasfeature.containsKey("NOTE"))\r
+ {\r
desc += (String) dasfeature.get("NOTE");\r
+ }\r
\r
int start = 0, end = 0;\r
float score = 0f;\r