{\r
for (int i = 0; i < features.length; i++)\r
{\r
+ // standard DAS feature-> jalview sequence feature transformation\r
SequenceFeature f = newSequenceFeature(features[i], source\r
.getNickname());\r
- if (dbref.getMap() != null && f.getBegin() > 0\r
- && f.getEnd() > 0)\r
+ if (!parseSeqFeature(seq, f, features[i], source))\r
{\r
- debug("mapping from " + f.getBegin() + " - " + f.getEnd());\r
- SequenceFeature vf[] = null;\r
-\r
- try\r
- {\r
- vf = dbref.getMap().locateFeature(f);\r
- } catch (Exception ex)\r
+ if (dbref.getMap() != null && f.getBegin() > 0\r
+ && f.getEnd() > 0)\r
{\r
- Cache.log\r
- .info("Error in 'experimental' mapping of features. Please try to reproduce and then report info to help@jalview.org.");\r
- Cache.log.info("Mapping feature from " + f.getBegin()\r
- + " to " + f.getEnd() + " in dbref "\r
- + dbref.getAccessionId() + " in "\r
- + dbref.getSource());\r
- Cache.log.info("using das Source " + ds.getUrl());\r
- Cache.log.info("Exception", ex);\r
- }\r
+ debug("mapping from " + f.getBegin() + " - " + f.getEnd());\r
+ SequenceFeature vf[] = null;\r
\r
- if (vf != null)\r
- {\r
- for (int v = 0; v < vf.length; v++)\r
+ try\r
+ {\r
+ vf = dbref.getMap().locateFeature(f);\r
+ } catch (Exception ex)\r
+ {\r
+ Cache.log\r
+ .info("Error in 'experimental' mapping of features. Please try to reproduce and then report info to jalview-discuss@jalview.org.");\r
+ Cache.log.info("Mapping feature from " + f.getBegin()\r
+ + " to " + f.getEnd() + " in dbref "\r
+ + dbref.getAccessionId() + " in "\r
+ + dbref.getSource());\r
+ Cache.log.info("using das Source " + ds.getUrl());\r
+ Cache.log.info("Exception", ex);\r
+ }\r
+\r
+ if (vf != null)\r
{\r
- debug("mapping to " + v + ": " + vf[v].getBegin() + " - "\r
- + vf[v].getEnd());\r
- seq.addSequenceFeature(vf[v]);\r
+ for (int v = 0; v < vf.length; v++)\r
+ {\r
+ debug("mapping to " + v + ": " + vf[v].getBegin()\r
+ + " - " + vf[v].getEnd());\r
+ seq.addSequenceFeature(vf[v]);\r
+ }\r
}\r
}\r
- }\r
- else\r
- {\r
- seq.addSequenceFeature(f);\r
+ else\r
+ {\r
+ seq.addSequenceFeature(f);\r
+ }\r
}\r
}\r
-\r
featuresAdded(seq);\r
}\r
else\r
{\r
for (int i = 0; i < features.length; i++)\r
{\r
+ // standard DAS feature-> jalview sequence feature transformation\r
SequenceFeature f = newSequenceFeature(features[i], source\r
.getNickname());\r
-\r
- seq.addSequenceFeature(f);\r
+ if (!parseSeqFeature(seq, f, features[i], source))\r
+ {\r
+ // just add as a simple sequence feature\r
+ seq.addSequenceFeature(f);\r
+ }\r
}\r
\r
featuresAdded(seq);\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
+ * @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
+ {\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
+ {\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
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+\r
+ /**\r
* creates a jalview sequence feature from a das feature document\r
* \r
* @param dasfeature\r
}\r
try\r
{\r
- score = (float) Double.parseDouble(dasfeature.get("SCORE").toString());\r
+ Object scr = dasfeature.get("SCORE");\r
+ if (scr!=null)\r
+ {score = (float) Double.parseDouble(scr.toString());\r
+ \r
+ }\r
} catch (Exception ex)\r
{\r
}\r
if (dasfeature.containsKey("LINK"))\r
{\r
// Do not put feature extent in link text for non-positional features\r
- if (f.begin==0 && f.end==0)\r
- { f.addLink(f.getType()+"|"\r
- + dasfeature.get("LINK"));\r
- } else {\r
+ if (f.begin == 0 && f.end == 0)\r
+ {\r
+ f.addLink(f.getType() + "|" + dasfeature.get("LINK"));\r
+ }\r
+ else\r
+ {\r
f.addLink(f.getType() + " " + f.begin + "_" + f.end + "|"\r
- + dasfeature.get("LINK"));\r
+ + dasfeature.get("LINK"));\r
}\r
}\r
\r