/*\r
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)\r
- * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)\r
+ * Copyright (C) 2009 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 jalview.bin.Cache;\r
import jalview.datamodel.*;\r
import jalview.gui.*;\r
+import jalview.util.UrlLink;\r
\r
/**\r
* DOCUMENT ME!\r
this(sequences, fsettings, selectedSources, true, true);\r
}\r
\r
- public DasSequenceFeatureFetcher(SequenceI[] sequences,\r
- FeatureSettings fsettings, Vector selectedSources,\r
+ public DasSequenceFeatureFetcher(SequenceI[] oursequences,\r
+ FeatureSettings fsettings, Vector ourselectedSources,\r
boolean checkDbrefs, boolean promptFetchDbrefs)\r
{\r
- this.selectedSources = selectedSources;\r
- this.sequences = sequences;\r
+ this.selectedSources = new Vector(); \r
+ Enumeration sources = ourselectedSources.elements();\r
+ // filter both sequences and sources to eliminate duplicates\r
+ while (sources.hasMoreElements())\r
+ {\r
+ Object src = sources.nextElement();\r
+ if (!selectedSources.contains(src)) { \r
+ selectedSources.addElement(src); \r
+ };\r
+ }\r
+ Vector sqs = new Vector();\r
+ for (int i=0; i<oursequences.length; i++)\r
+ {\r
+ if (!sqs.contains(oursequences[i]))\r
+ {\r
+ sqs.addElement(oursequences[i]);\r
+ }\r
+ }\r
+ sequences = new SequenceI[sqs.size()];\r
+ for (int i=0; i<sequences.length; i++) {\r
+ sequences[i] = (SequenceI) sqs.elementAt(i);\r
+ }\r
if (fsettings != null)\r
{\r
this.fsettings = fsettings;\r
this.af = fsettings.af;\r
- af.getViewport().setShowSequenceFeatures(true);\r
+ af.setShowSeqFeatures(true);\r
}\r
int uniprotCount = 0;\r
for (int i = 0; i < selectedSources.size(); i++)\r
af.setProgressBar("Fetching DAS Sequence Features", startTime);\r
}\r
\r
- DasSource[] sources = new jalview.gui.DasSourceBrowser().getDASSource();\r
\r
if (selectedSources == null || selectedSources.size() == 0)\r
{\r
+ try {\r
+ DasSource[] sources = new jalview.gui.DasSourceBrowser().getDASSource();\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
+ selectedSources = new Vector();\r
String token;\r
while (st.hasMoreTokens())\r
{\r
}\r
}\r
}\r
+ } catch (Exception ex)\r
+ {\r
+ debug("Exception whilst setting default feature sources from registry and local preferences.",ex);\r
+ }\r
}\r
\r
if (selectedSources == null || selectedSources.size() == 0)\r
}\r
\r
/**\r
- * examine the given sequence feature to determine if it should actually\r
- * be turned into sequence annotation or database cross references rather\r
- * than a simple sequence feature. \r
- * @param seq the sequence to annotate\r
- * @param f the jalview sequence feature generated from the DAS feature \r
- * @param map the sequence feature attributes\r
- * @param source the source that emitted the feature\r
+ * examine the given sequence feature to determine if it should actually be\r
+ * turned into sequence annotation or database cross references rather than a\r
+ * simple sequence feature.\r
+ * \r
+ * @param seq\r
+ * the sequence to annotate\r
+ * @param f\r
+ * the jalview sequence feature generated from the DAS feature\r
+ * @param map\r
+ * the sequence feature attributes\r
+ * @param source\r
+ * the source that emitted the feature\r
* @return true if feature was consumed as another kind of annotation.\r
*/\r
- protected boolean parseSeqFeature(SequenceI seq, SequenceFeature f, Map map,\r
- Das1Source source)\r
+ protected boolean parseSeqFeature(SequenceI seq, SequenceFeature f,\r
+ Map map, Das1Source source)\r
{\r
- // check if source has biosapiens or other sequence ontology label\r
- if (f.getType()!=null && (f.getType().equalsIgnoreCase("DBXREF")\r
- || f.getType().equalsIgnoreCase("DBREF")))\r
+ SequenceI mseq = seq;\r
+ while (seq.getDatasetSequence()!=null)\r
{\r
- // try to parse the accession out\r
- \r
- DBRefEntry dbr = new DBRefEntry();\r
- dbr.setVersion(source.getNickname());\r
- StringTokenizer st = new StringTokenizer(f.getDescription(),":");\r
- if (st.hasMoreTokens())\r
+ seq = seq.getDatasetSequence();\r
+ }\r
+ if (f.getType() != null)\r
+ {\r
+ String type = f.getType();\r
+ if (type.equalsIgnoreCase("protein_name"))\r
{\r
- dbr.setSource(st.nextToken());\r
+ // parse name onto the alignment sequence or the dataset sequence.\r
+ if (seq.getDescription()==null || seq.getDescription().trim().length() == 0)\r
+ {\r
+ // could look at the note series to pick out the first long name, for the moment just use the whole description string \r
+ seq.setDescription(f.getDescription());\r
+ }\r
+ if (mseq.getDescription()==null || mseq.getDescription().trim().length() == 0)\r
+ {\r
+ // could look at the note series to pick out the first long name, for the moment just use the whole description string \r
+ mseq.setDescription(f.getDescription());\r
+ }\r
+ return true;\r
}\r
- if (st.hasMoreTokens())\r
+ // check if source has biosapiens or other sequence ontology label\r
+ if (type.equalsIgnoreCase("DBXREF") || type.equalsIgnoreCase("DBREF"))\r
{\r
- dbr.setAccessionId(st.nextToken());\r
+ // try to parse the accession out\r
+\r
+ DBRefEntry dbr = new DBRefEntry();\r
+ dbr.setVersion(source.getNickname());\r
+ StringTokenizer st = new StringTokenizer(f.getDescription(), ":");\r
+ if (st.hasMoreTokens())\r
+ {\r
+ dbr.setSource(st.nextToken());\r
+ }\r
+ if (st.hasMoreTokens())\r
+ {\r
+ dbr.setAccessionId(st.nextToken());\r
+ }\r
+ seq.addDBRef(dbr);\r
+ \r
+ if (f.links != null && f.links.size() > 0)\r
+ {\r
+ // feature is also appended to enable links to be seen.\r
+ // TODO: consider extending dbrefs to have their own links ?\r
+ // TODO: new feature: extract dbref links from DAS servers and add the URL pattern to the list of DB name associated links in the user's preferences ?\r
+ // for the moment - just fix up the existing feature so it displays correctly.\r
+ // f.setType(dbr.getSource());\r
+ //f.setDescription();\r
+ f.setValue("linkonly", Boolean.TRUE);\r
+ //f.setDescription("");\r
+ Vector newlinks = new Vector();\r
+ Enumeration it = f.links.elements();\r
+ while (it.hasMoreElements())\r
+ {\r
+ String elm;\r
+ UrlLink urllink = new UrlLink(elm = (String)it.nextElement());\r
+ if (urllink.isValid()) {\r
+ urllink.setLabel(f.getDescription());\r
+ newlinks.addElement(urllink.toString());\r
+ } else {\r
+ // couldn't parse the link properly. Keep it anyway - just in case.\r
+ debug("couldn't parse link string - "+elm);\r
+ newlinks.addElement(elm);\r
+ }\r
+ }\r
+ f.links = newlinks;\r
+ seq.addSequenceFeature(f);\r
+ }\r
+ return true;\r
}\r
- seq.addDBRef(dbr);\r
- return true;\r
}\r
return false;\r
}\r
try\r
{\r
Object scr = dasfeature.get("SCORE");\r
- if (scr!=null)\r
- {score = (float) Double.parseDouble(scr.toString());\r
- \r
- }\r
+ if (scr != null)\r
+ {\r
+ score = (float) Double.parseDouble(scr.toString());\r
+\r
+ }\r
} catch (Exception ex)\r
{\r
}\r