/*\r
-* Jalview - A Sequence Alignment Editor and Viewer\r
-* Copyright (C) 2005 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
-* as published by the Free Software Foundation; either version 2\r
-* of the License, or (at your option) any later version.\r
-*\r
-* This program is distributed in the hope that it will be useful,\r
-* but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
-* GNU General Public License for more details.\r
-*\r
-* You should have received a copy of the GNU General Public License\r
-* along with this program; if not, write to the Free Software\r
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\r
-*/\r
+ * Jalview - A Sequence Alignment Editor and Viewer\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
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\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.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
-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
-\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
-\r
+import jalview.datamodel.*;\r
+import jalview.gui.*;\r
\r
/**\r
* DOCUMENT ME!\r
* @author $author$\r
* @version $Revision$\r
*/\r
-public class DasSequenceFeatureFetcher implements Runnable\r
+public class DasSequenceFeatureFetcher\r
{\r
- final AlignmentI dataset;\r
- final AlignFrame af;\r
+ SequenceI[] sequences;\r
+ AlignFrame af;\r
+ FeatureSettings fsettings;\r
StringBuffer sbuffer = new StringBuffer();\r
+ Vector selectedSources;\r
+ boolean cancelled = false;\r
\r
-\r
+ long startTime;\r
\r
/**\r
* Creates a new SequenceFeatureFetcher object.\r
+ * Uses default\r
*\r
* @param align DOCUMENT ME!\r
* @param ap DOCUMENT ME!\r
*/\r
- public DasSequenceFeatureFetcher(AlignmentI align,\r
- AlignFrame af)\r
+ public DasSequenceFeatureFetcher(SequenceI[] sequences,\r
+ FeatureSettings fsettings,\r
+ Vector selectedSources)\r
{\r
- this.dataset = align.getDataset();\r
- this.af = af;\r
+ this.selectedSources = selectedSources;\r
+ this.sequences = sequences;\r
+ this.af = fsettings.af;\r
+ this.fsettings = fsettings;\r
\r
- Thread thread = new Thread(this);\r
- thread.start();\r
- }\r
- /**\r
- * creates a jalview sequence feature from a das feature document\r
- * @param dasfeature\r
- * @return sequence feature object created using dasfeature information\r
- */\r
- SequenceFeature newSequenceFeature(Map dasfeature, String nickname)\r
+ int uniprotCount = 0;\r
+ for (int i = 0; i < selectedSources.size(); i++)\r
+ {\r
+ DasSource source = (DasSource) selectedSources.elementAt(i);\r
+ DasCoordinateSystem[] coords = source.getCoordinateSystem();\r
+ for (int c = 0; c < coords.length; c++)\r
+ {\r
+ if (coords[c].getName().indexOf("UniProt") > -1)\r
+ {\r
+ uniprotCount++;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ int refCount = 0;\r
+ for (int i = 0; i < sequences.length; i++)\r
+ {\r
+ DBRefEntry[] dbref = sequences[i].getDBRef();\r
+ if (dbref != null)\r
+ {\r
+ for (int j = 0; j < dbref.length; j++)\r
+ {\r
+ if (dbref[j].getSource()\r
+ .equals(jalview.datamodel.DBRefSource.UNIPROT))\r
+ {\r
+ refCount++;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ if (refCount < sequences.length && uniprotCount > 0)\r
+ {\r
+\r
+ int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,\r
+ "Do you want Jalview to find\n"\r
+ + "Uniprot Accession ids for given sequence names?",\r
+ "Find Uniprot Accession Ids",\r
+ JOptionPane.YES_NO_OPTION,\r
+ JOptionPane.QUESTION_MESSAGE);\r
+\r
+ if (reply == JOptionPane.YES_OPTION)\r
+ {\r
+ Thread thread = new Thread(new FetchDBRefs());\r
+ thread.start();\r
+ }\r
+ else\r
+ {\r
+ startFetching();\r
+ }\r
+ }\r
+ else\r
+ {\r
+ startFetching();\r
+ }\r
+\r
+ }\r
+\r
+ class FetchDBRefs\r
+ implements Runnable\r
{\r
- try {\r
- /**\r
- * Different qNames for a DAS Feature - are string keys to the HashMaps in features\r
- * "METHOD") ||\r
- qName.equals("TYPE") ||\r
- qName.equals("START") ||\r
- qName.equals("END") ||\r
- qName.equals("NOTE") ||\r
- qName.equals("LINK") ||\r
- qName.equals("SCORE")\r
- */\r
- String desc = new String();\r
- if (dasfeature.containsKey("NOTE"))\r
- desc+=(String) dasfeature.get("NOTE");\r
-\r
-\r
- int start = 0, end = 0;\r
- float score = 0f;\r
-\r
- try{ start = Integer.parseInt( dasfeature.get("START").toString()); }\r
- catch( Exception ex){}\r
- try{ end = Integer.parseInt( dasfeature.get("END").toString()); }\r
- catch (Exception ex){}\r
- try{ score = Integer.parseInt( dasfeature.get("SCORE").toString()); }\r
- catch (Exception ex){}\r
-\r
-\r
- SequenceFeature f = new SequenceFeature(\r
- (String) dasfeature.get("TYPE"),\r
- desc,\r
- start,\r
- end,\r
- score,\r
- nickname);\r
-\r
- if (dasfeature.containsKey("LINK"))\r
- {\r
- f.addLink(f.getType()+" "+f.begin+"_"+f.end\r
- +"|"+ dasfeature.get("LINK"));\r
- }\r
- // (String) dasfeature.get("ID"),\r
- //// (String) dasfeature.get("METHOD"),\r
- // (String) dasfeature.get("SCORE"),\r
- // null\r
- // );\r
-\r
- // System.out.println(nickname+" "+f.getType()+" "+f.begin+" "+f.end);\r
- return f;\r
- }\r
- catch (Exception e) {\r
- e.printStackTrace();\r
- Cache.log.debug("Failed to parse "+dasfeature.toString(), e);\r
- return null;\r
- }\r
+ public void run()\r
+ {\r
+ new DBRefFetcher(\r
+ af.getViewport().getAlignment(), af).fetchDBRefs(true);\r
+ startFetching();\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
- protected void createFeatureFetcher(final Sequence seq,\r
- final String sourceUrl,\r
- String id,\r
- String nickname) {\r
- //////////////\r
- /// fetch DAS features\r
- final Das1Source source = new Das1Source();\r
- source.setUrl(sourceUrl);\r
- source.setNickname(nickname);\r
-\r
-\r
- Cache.log.debug("new Das Feature Fetcher for " + id + " querying " +\r
- sourceUrl);\r
- if (id != null && id.length() > 0)\r
+\r
+\r
+ /**\r
+ * Spawns a number of dasobert Fetcher threads to add features to sequences in the dataset\r
+ */\r
+ void startFetching()\r
+ {\r
+ cancelled = false;\r
+ startTime = System.currentTimeMillis();\r
+ af.setProgressBar("Fetching DAS Sequence Features", startTime);\r
+\r
+ DasSource[] sources = new jalview.gui.DasSourceBrowser().getDASSource();\r
+\r
+ if (selectedSources == null || selectedSources.size() == 0)\r
+ {\r
+ String active = jalview.bin.Cache.getDefault("DAS_ACTIVE_SOURCE",\r
+ "uniprot");\r
+ StringTokenizer st = new StringTokenizer(active, "\t");\r
+ Vector selectedSources = new Vector();\r
+ String token;\r
+ while (st.hasMoreTokens())\r
+ {\r
+ token = st.nextToken();\r
+ for (int i = 0; i < sources.length; i++)\r
+ {\r
+ if (sources[i].getNickname().equals(token))\r
+ {\r
+ selectedSources.addElement(sources[i]);\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ if (selectedSources == null || selectedSources.size() == 0)\r
+ {\r
+ System.out.println("No DAS Sources active");\r
+ af.setProgressBar("No DAS Sources Active", startTime);\r
+ return;\r
+ }\r
+\r
+ sourcesRemaining = selectedSources.size();\r
+ //Now sending requests one at a time to each server\r
+ for (int sourceIndex = 0;\r
+ sourceIndex < selectedSources.size()\r
+ && !cancelled;\r
+ sourceIndex++)\r
+ {\r
+ DasSource dasSource = (DasSource) selectedSources.elementAt(\r
+ sourceIndex);\r
+\r
+ nextSequence(dasSource, sequences[0]);\r
+ }\r
+ }\r
+\r
+ public void cancel()\r
+ {\r
+ af.setProgressBar("DAS Feature Fetching Cancelled", startTime);\r
+ cancelled = true;\r
+ }\r
+\r
+ int sourcesRemaining=0;\r
+ void responseComplete(DasSource dasSource, SequenceI seq)\r
+ {\r
+ if (seq != null)\r
+ {\r
+ for (int seqIndex = 0;\r
+ seqIndex < sequences.length-1\r
+ && !cancelled; seqIndex++)\r
+ {\r
+ if (sequences[seqIndex] == seq)\r
+ {\r
+ nextSequence(dasSource, sequences[++seqIndex]);\r
+ return;\r
+ }\r
+ }\r
+ }\r
+\r
+ sourcesRemaining --;\r
+\r
+ if(sourcesRemaining==0)\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
+\r
+ }\r
+\r
+ void featuresAdded(SequenceI seq)\r
+ {\r
+ af.getFeatureRenderer().featuresAdded();\r
+\r
+ int start = af.getViewport().getStartSeq();\r
+ int end = af.getViewport().getEndSeq();\r
+ int index;\r
+ for(index=start; index<end; index++)\r
+ {\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
+ {\r
+ DBRefEntry[] uprefs = jalview.util.DBRefUtils.selectRefs(seq.getDBRef(),\r
+ new String[]\r
{\r
- FeatureThread fetcher = new FeatureThread(id\r
- // + ":" + seq.getStart() + "," +seq.getEnd()\r
- , source);\r
+ // jalview.datamodel.DBRefSource.PDB,\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
- fetcher.addFeatureListener(new FeatureListener()\r
+ boolean dasCoordSysFound = false;\r
+\r
+ if (uprefs != null)\r
+ {\r
+ // do any of these ids match the source's coordinate system ?\r
+ for (int j = 0; j < uprefs.length; j++)\r
+ {\r
+ DasCoordinateSystem cs[] = dasSource.getCoordinateSystem();\r
+\r
+ for(int csIndex=0; csIndex<cs.length; csIndex++)\r
{\r
- public void comeBackLater(FeatureEvent e)\r
+ if (cs.length > 0 && jalview.util.DBRefUtils\r
+ .isDasCoordinateSystem(cs[csIndex].getName(), uprefs[j]))\r
{\r
- Cache.log.debug("das source " + e.getDasSource().getNickname() +\r
- " asked us to come back in " + e.getComeBackLater() +\r
- " secs.");\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
\r
- public void newFeatures(FeatureEvent e)\r
- {\r
- Das1Source ds = e.getDasSource();\r
+ if(!dasCoordSysFound)\r
+ {\r
+ String id = null;\r
+ // try and use the name as the sequence id\r
+ if (seq.getName().indexOf("|") > -1)\r
+ {\r
+ id = seq.getName().substring(\r
+ seq.getName().lastIndexOf("|") + 1);\r
+ }\r
+ else\r
+ {\r
+ id = seq.getName();\r
+ }\r
+ if (id != null)\r
+ {\r
+ // Should try to call a general feature fetcher that\r
+ // queries many sources with name to discover applicable ID references\r
+ createFeatureFetcher(seq,\r
+ dasSource,\r
+ id);\r
+ }\r
+ }\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
\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
\r
- seq.addSequenceFeature(f);\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
- );\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
- //NOTE alignPanel listener will be called after the previous\r
- //anonymous listener!!!\r
- fetcher.addFeatureListener(af);\r
+ }\r
+ }\r
\r
- fetcher.start();\r
- }\r
- }\r
- /**\r
- * Spawns a number of dasobert Fetcher threads to add features to sequences in the dataset\r
- */\r
- public void run()\r
+ );\r
+\r
+ fetcher.start();\r
+ }\r
+ protected void createFeatureFetcher(final SequenceI seq,\r
+ final DasSource dasSource,\r
+ String id)\r
{\r
- long startTime = System.currentTimeMillis();\r
- af.setProgressBar("Fetching DAS Sequence Features", startTime);\r
+ //////////////\r
+ /// fetch DAS features\r
+ final Das1Source source = new Das1Source();\r
+ source.setUrl(dasSource.getUrl());\r
+ source.setNickname(dasSource.getNickname());\r
\r
- DasSource [] sources = new jalview.gui.DasSourceBrowser().getDASSource();\r
+ Cache.log.debug("new Das Feature Fetcher for " + id + " querying " +\r
+ dasSource.getUrl());\r
\r
- String active = jalview.bin.Cache.getDefault("DAS_ACTIVE_SOURCE", "uniprot");\r
- StringTokenizer st = new StringTokenizer(active, "\t");\r
- Vector selectedSources = new Vector();\r
- String token;\r
- while (st.hasMoreTokens())\r
+ if (id != null && id.length() > 0)\r
{\r
- token = st.nextToken();\r
- for(int i=0; i<sources.length; i++)\r
+ FeatureThread fetcher = new FeatureThread(id\r
+ // + ":" + start + "," + end,\r
+ , source);\r
+\r
+ fetcher.addFeatureListener(new FeatureListener()\r
{\r
- if(sources[i].getNickname().equals(token))\r
+ public void comeBackLater(FeatureEvent e)\r
{\r
- selectedSources.addElement(sources[i]);\r
- break;\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
- }\r
\r
+ public void newFeatures(FeatureEvent e)\r
+ {\r
\r
- if(selectedSources == null || selectedSources.size()==0)\r
- {\r
- System.out.println("No DAS Sources active");\r
- af.setProgressBar("No DAS Sources Active", startTime);\r
- return;\r
- }\r
+ Das1Source ds = e.getDasSource();\r
\r
- try\r
- {\r
- int seqIndex = 0;\r
- Vector sequences = dataset.getSequences();\r
- while (seqIndex < sequences.size())\r
- {\r
- Sequence sequence = (Sequence) sequences.get(seqIndex);\r
- Vector uprefs = jalview.util.DBRefUtils.selectRefs(sequence.getDBRef(),\r
- new String[] {\r
- jalview.datamodel.DBRefSource.PDB,\r
- jalview.datamodel.DBRefSource.UNIPROT});\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
- for(int sourceIndex=0; sourceIndex<selectedSources.size(); sourceIndex++)\r
+ if (features.length > 0)\r
{\r
- DasSource dasSource = (DasSource)selectedSources.elementAt(sourceIndex);\r
-\r
- if (uprefs != null)\r
+ for (int i = 0; i < features.length; i++)\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
- {\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
- for (int l=0; l<cs.length; l++)\r
- {\r
- if (jalview.util.DBRefUtils.isDasCoordinateSystem(cs[l].getName(), (DBRefEntry)\r
- uprefs.get(j)))\r
- {\r
- Cache.log.debug("Launched fetcher for coordinate system " +\r
- cs[l].getName());\r
+ SequenceFeature f = newSequenceFeature(features[i],\r
+ source.getNickname());\r
\r
-\r
- createFeatureFetcher(sequence,\r
- dasSource.getUrl(),\r
- ( (DBRefEntry) uprefs.get(j)).\r
- getAccessionId(),\r
- dasSource.getNickname());\r
- }\r
- }\r
- }\r
- }\r
- else\r
- {\r
- String id = null;\r
- // try and use the name as the sequence id\r
- if (sequence.getName().indexOf("|") > -1)\r
- {\r
- id = sequence.getName().substring(\r
- sequence.getName().lastIndexOf("|") + 1);\r
- }\r
- else\r
- {\r
- id = sequence.getName();\r
- }\r
- if (id != null)\r
- {\r
- // Should try to call a general feature fetcher that queries many sources with name to discover applicable ID references\r
- createFeatureFetcher(sequence,\r
- dasSource.getUrl(),\r
- id,\r
- dasSource.getNickname());\r
- }\r
+ seq.addSequenceFeature(f);\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
- seqIndex++;\r
+ );\r
+\r
+ fetcher.start();\r
}\r
+ }\r
+\r
+ /**\r
+ * creates a jalview sequence feature from a das feature document\r
+ * @param dasfeature\r
+ * @return sequence feature object created using dasfeature information\r
+ */\r
+ SequenceFeature newSequenceFeature(Map dasfeature, String nickname)\r
+ {\r
+ try\r
+ {\r
+ /**\r
+ * Different qNames for a DAS Feature - are string keys to the HashMaps in features\r
+ * "METHOD") ||\r
+ qName.equals("TYPE") ||\r
+ qName.equals("START") ||\r
+ qName.equals("END") ||\r
+ qName.equals("NOTE") ||\r
+ qName.equals("LINK") ||\r
+ qName.equals("SCORE")\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
+\r
+ try\r
+ {\r
+ start = Integer.parseInt(dasfeature.get("START").toString());\r
+ }\r
+ catch (Exception ex)\r
+ {}\r
+ try\r
+ {\r
+ end = Integer.parseInt(dasfeature.get("END").toString());\r
+ }\r
+ catch (Exception ex)\r
+ {}\r
+ try\r
+ {\r
+ score = Integer.parseInt(dasfeature.get("SCORE").toString());\r
+ }\r
+ catch (Exception ex)\r
+ {}\r
+\r
+ SequenceFeature f = new SequenceFeature(\r
+ (String) dasfeature.get("TYPE"),\r
+ desc,\r
+ start,\r
+ end,\r
+ score,\r
+ nickname);\r
+\r
+ if (dasfeature.containsKey("LINK"))\r
+ {\r
+ f.addLink(f.getType() + " " + f.begin + "_" + f.end\r
+ + "|" + dasfeature.get("LINK"));\r
+ }\r
+\r
+ return f;\r
}\r
- catch (Exception ex)\r
+ catch (Exception e)\r
{\r
- ex.printStackTrace();\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
- af.setProgressBar("DAS Feature Fetching Complete", startTime);\r
}\r
\r
-\r
public static DasSource[] getDASSources()\r
{\r
DasSourceReaderImpl reader = new DasSourceReaderImpl();\r
\r
- String registryURL =jalview.bin.Cache.getDefault("DAS_REGISTRY_URL",\r
- "http://www.spice-3d.org/dasregistry/das1/sources"\r
- );\r
+ String registryURL = jalview.bin.Cache.getDefault("DAS_REGISTRY_URL",\r
+ DasSourceBrowser.DEFAULT_REGISTRY\r
+ );\r
\r
try\r
{\r
ex.printStackTrace();\r
return null;\r
}\r
-\r
}\r
-}\r
\r
+}\r
\r