Replaced by AnnotationFile
[jalview.git] / src / jalview / io / DasSequenceFeatureFetcher.java
index 99a2b70..d0bc92d 100755 (executable)
@@ -30,12 +30,16 @@ import org.biojava.dasobert.das.FeatureThread;
 import org.biojava.dasobert.dasregistry.Das1Source;\r
 import org.biojava.dasobert.eventmodel.FeatureEvent;\r
 import org.biojava.dasobert.eventmodel.FeatureListener;\r
-import org.biojava.services.das.registry.DasRegistryAxisClient;\r
-import org.biojava.services.das.registry.DasSource;\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 jalview.bin.Cache;\r
 \r
+import jalview.bin.Cache;\r
 \r
 \r
 /**\r
@@ -47,7 +51,7 @@ import jalview.bin.Cache;
 public class DasSequenceFeatureFetcher implements Runnable\r
 {\r
   final AlignmentI dataset;\r
-  final AlignmentPanel ap;\r
+  final AlignFrame af;\r
   StringBuffer sbuffer = new StringBuffer();\r
 \r
 \r
@@ -58,10 +62,11 @@ public class DasSequenceFeatureFetcher implements Runnable
    * @param align DOCUMENT ME!\r
    * @param ap DOCUMENT ME!\r
    */\r
-  public DasSequenceFeatureFetcher(AlignmentI align, AlignmentPanel ap)\r
+  public DasSequenceFeatureFetcher(AlignmentI align,\r
+                                   AlignFrame af)\r
   {\r
     this.dataset = align.getDataset();\r
-    this.ap = ap;\r
+    this.af = af;\r
 \r
     Thread thread = new Thread(this);\r
     thread.start();\r
@@ -149,8 +154,9 @@ public class DasSequenceFeatureFetcher implements Runnable
                           sourceUrl);\r
           if (id != null && id.length() > 0)\r
           {\r
-            FeatureThread fetcher = new FeatureThread(id + ":" + seq.getStart() + "," +seq.getEnd()\r
-                , source);\r
+            FeatureThread fetcher = new FeatureThread(id\r
+            //   +  ":" + seq.getStart() + "," +seq.getEnd()\r
+                 , source);\r
 \r
             fetcher.addFeatureListener(new FeatureListener()\r
             {\r
@@ -170,41 +176,24 @@ public class DasSequenceFeatureFetcher implements Runnable
                 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
-\r
-                    SequenceFeature f = newSequenceFeature(features[i],\r
+                      SequenceFeature f = newSequenceFeature(features[i],\r
                         source.getNickname());\r
 \r
-                    if (seq.sequenceFeatures != null)\r
-                    {\r
-                      for (int j = 0; (f != null) && j < seq.sequenceFeatures.length;\r
-                           j++)\r
-                      {\r
-                        if (seq.sequenceFeatures[j].equals(f))\r
-                        {\r
-                          f = null;\r
-                        }\r
-                      }\r
-                    }\r
-                    if (f != null)\r
-                    {\r
                       seq.addSequenceFeature(f);\r
-                    }\r
                   }\r
                 }\r
               }\r
-\r
             }\r
 \r
             );\r
 \r
             //NOTE alignPanel listener will be called after the previous\r
             //anonymous listener!!!\r
-            fetcher.addFeatureListener(ap);\r
+            fetcher.addFeatureListener(af);\r
 \r
             fetcher.start();\r
          }\r
@@ -214,6 +203,9 @@ public class DasSequenceFeatureFetcher implements Runnable
    */\r
   public void run()\r
   {\r
+    long startTime = System.currentTimeMillis();\r
+    af.setProgressBar("Fetching DAS Sequence Features", startTime);\r
+\r
     DasSource [] sources = new jalview.gui.DasSourceBrowser().getDASSource();\r
 \r
     String active = jalview.bin.Cache.getDefault("DAS_ACTIVE_SOURCE", "uniprot");\r
@@ -232,15 +224,12 @@ public class DasSequenceFeatureFetcher implements Runnable
         }\r
       }\r
     }\r
- // DasSource test = new DasSource();\r
- // test.setUrl("http://localhost:8080/das/gffdb/");\r
-  //test.setNickname("Trixkid");\r
- // selectedSources.addElement(test);\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
@@ -251,7 +240,10 @@ public class DasSequenceFeatureFetcher implements Runnable
       while (seqIndex < sequences.size())\r
       {\r
           Sequence sequence = (Sequence) sequences.get(seqIndex);\r
-          Vector uprefs = jalview.util.DBRefUtils.selectRefs(sequence.getDBRef(), new String[]  {"DBREF"});\r
+          Vector uprefs = jalview.util.DBRefUtils.selectRefs(sequence.getDBRef(),\r
+              new String[]  {\r
+              jalview.datamodel.DBRefSource.PDB,\r
+              jalview.datamodel.DBRefSource.UNIPROT});\r
 \r
           for(int sourceIndex=0; sourceIndex<selectedSources.size(); sourceIndex++)\r
           {\r
@@ -260,13 +252,27 @@ public class DasSequenceFeatureFetcher implements Runnable
             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, k = uprefs.size(); j < k; j++)\r
+              for (int j = 0;  j < uprefs.size(); j++)\r
               {\r
 \r
-                createFeatureFetcher(sequence,\r
-                                     dasSource.getUrl(),\r
-                                     ( (DBRefEntry) uprefs.get(j)).getAccessionId(),\r
-                                     dasSource.getNickname());\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
+\r
+\r
+                    createFeatureFetcher(sequence,\r
+                                         dasSource.getUrl(),\r
+                                         ( (DBRefEntry) uprefs.get(j)).\r
+                                         getAccessionId(),\r
+                                         dasSource.getNickname());\r
+                  }\r
+                }\r
               }\r
             }\r
             else\r
@@ -300,33 +306,54 @@ public class DasSequenceFeatureFetcher implements Runnable
     {\r
       ex.printStackTrace();\r
     }\r
+\r
+    af.setProgressBar("DAS Feature Fetching Complete", startTime);\r
   }\r
 \r
 \r
- public static DasSource[] getDASSources()\r
+  public static DasSource[] getDASSources()\r
   {\r
-    try\r
-    {\r
-      String registryURL = jalview.bin.Cache.getDefault("DAS_REGISTRY_URL",\r
-          "http://servlet.sanger.ac.uk/dasregistry/services/das_registry");\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
 \r
+    try\r
+    {\r
       URL url = new URL(registryURL);\r
 \r
-      DasRegistryAxisClient client = new DasRegistryAxisClient(url);\r
+      DasSource[] sources = reader.readDasSource(url);\r
 \r
-      DasSource[] services = client.listServices();\r
+      List das1sources = new ArrayList();\r
+      for (int i = 0; i < sources.length; i++)\r
+      {\r
+        DasSource ds = sources[i];\r
+        if (ds instanceof Das2Source)\r
+        {\r
+          Das2Source d2s = (Das2Source) ds;\r
+          if (d2s.hasDas1Capabilities())\r
+          {\r
+            Das1Source d1s = DasSourceConverter.toDas1Source(d2s);\r
+            das1sources.add(d1s);\r
+          }\r
 \r
-      return services;\r
+        }\r
+        else if (ds instanceof Das1Source)\r
+        {\r
+          das1sources.add( (Das1Source) ds);\r
+        }\r
+      }\r
+\r
+      return (Das1Source[]) das1sources.toArray(new Das1Source[das1sources.size()]);\r
     }\r
     catch (Exception ex)\r
     {\r
       ex.printStackTrace();\r
+      return null;\r
     }\r
-    return null;\r
 \r
   }\r
-\r
 }\r
 \r
 \r