+\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