removed all dasobert code and begun to replace with Jdas calls.
[jalview.git] / src / jalview / gui / DasSourceBrowser.java
index c623530..6e77a6b 100755 (executable)
  */\r
 package jalview.gui;\r
 \r
+import java.security.interfaces.DSAKey;\r
+import java.text.ParseException;\r
 import java.util.*;\r
+import java.util.List;\r
 \r
 import java.awt.*;\r
 import java.awt.event.*;\r
@@ -25,14 +28,23 @@ import javax.swing.*;
 import javax.swing.event.*;\r
 import javax.swing.table.*;\r
 \r
-import org.biojava.dasobert.dasregistry.*;\r
+import org.biodas.jdas.dassources.Capabilities;\r
+import org.biodas.jdas.dassources.utils.DasTimeFormat;\r
+import org.biodas.jdas.schema.sources.CAPABILITY;\r
+import org.biodas.jdas.schema.sources.COORDINATES;\r
+import org.biodas.jdas.schema.sources.MAINTAINER;\r
+import org.biodas.jdas.schema.sources.PROP;\r
+import org.biodas.jdas.schema.sources.SOURCE;\r
+import org.biodas.jdas.schema.sources.SOURCES;\r
+import org.biodas.jdas.schema.sources.VERSION;\r
+\r
 import jalview.jbgui.*;\r
 import jalview.util.*;\r
 \r
 public class DasSourceBrowser extends GDasSourceBrowser implements\r
         Runnable, ListSelectionListener\r
 {\r
-  static DasSource[] dasSources = null;\r
+  static org.biodas.jdas.schema.sources.SOURCE[] dasSources = null;\r
 \r
   Hashtable localSources = null;\r
 \r
@@ -130,7 +142,7 @@ public class DasSourceBrowser extends GDasSourceBrowser implements
     Object[][] data = new Object[dSize][2];\r
     for (int i = 0; i < dSize; i++)\r
     {\r
-      data[i][0] = dasSources[i].getNickname();\r
+      data[i][0] = dasSources[i]. // what's equivalent of nickname\r
       data[i][1] = new Boolean(selectedSources.contains(dasSources[i]\r
               .getNickname()));\r
     }\r
@@ -369,41 +381,79 @@ public class DasSourceBrowser extends GDasSourceBrowser implements
     worker.start();\r
   }\r
 \r
-  private void setCapabilities(DasSource[] sources)\r
+  private boolean isLaterThan(String ref, String newer)\r
   {\r
-    Vector authority = new Vector();\r
-    Vector type = new Vector();\r
-    Vector label = new Vector();\r
-\r
-    authority.addElement("Any");\r
-    type.addElement("Any");\r
-    label.addElement("Any");\r
+    Date refdate=null,newdate=null;\r
+    try {\r
+      refdate=DasTimeFormat.fromDASString(ref);\r
+      \r
+    }\r
+    catch (ParseException x)\r
+    {\r
+      return false;\r
+    }\r
+    try {\r
+      newdate = DasTimeFormat.fromDASString(newer);\r
+    }\r
+    catch (ParseException e) {\r
+      // TODO: handle exception\r
+    }\r
+    if (refdate!=null)\r
+    {\r
+      if (newdate!=null)\r
+      {\r
+        return refdate.before(newdate);\r
+      }\r
+      return false;\r
+    }\r
+    if (newdate!=null)\r
+    {\r
+      return true;\r
+    }\r
+    // assume first instance of source is newest in list. - TODO: check if natural ordering of source versions is newest first or oldest first\r
+    return false;\r
+  }\r
+  private void setCapabilities(SOURCE[] sources)\r
+  {\r
+    Vector<String> authority = new Vector<String>();\r
+    Vector<String> type = new Vector<String>();\r
+    Vector<String> label = new Vector<String>();\r
+    Vector<String> taxIds=new Vector<String>();\r
+    authority.add("Any");\r
+    type.add("Any");\r
+    label.add("Any");\r
+    \r
 \r
     for (int i = 0; i < sources.length; i++)\r
     {\r
-      DasSource ds = sources[i];\r
-\r
-      DasCoordinateSystem[] dcs = ds.getCoordinateSystem();\r
-\r
-      for (int j = 0; j < dcs.length; j++)\r
+      SOURCE ds = sources[i];\r
+      VERSION latest=null;\r
+      for (VERSION v:ds.getVERSION()) {\r
+        if (latest==null || isLaterThan(latest.getCreated(),v.getCreated()))\r
+        {\r
+          // TODO: das 1.6 - should just get the first version - ignore other versions since not specified how to construct URL from version's URI + source URI\r
+          latest=v;\r
+        }\r
+      }\r
+      \r
+      for (COORDINATES cs: latest.getCOORDINATES())\r
       {\r
-        if (!type.contains(dcs[j].getCategory()))\r
+        if (!type.contains(cs.getSource()))\r
         {\r
-          type.addElement(dcs[j].getCategory());\r
+          type.add(cs.getSource()); // source==category\r
         }\r
 \r
-        if (!authority.contains(dcs[j].getName()))\r
+        if (!authority.contains(cs.getAuthority()))\r
         {\r
-          authority.addElement(dcs[j].getName());\r
+          authority.add(cs.getAuthority());\r
         }\r
       }\r
 \r
-      String[] slabels = ds.getLabels();\r
-      for (int s = 0; s < slabels.length; s++)\r
+      for (PROP slabel:latest.getPROP())\r
       {\r
-        if (!label.contains(slabels[s]))\r
+        if (slabel.getName().equalsIgnoreCase("LABEL") && !label.contains(slabel.getValue()))\r
         {\r
-          label.addElement(slabels[s]);\r
+          label.add(slabel.getValue());\r
         }\r
       }\r
 \r
@@ -412,6 +462,7 @@ public class DasSourceBrowser extends GDasSourceBrowser implements
     filter1.setListData(authority);\r
     filter2.setListData(type);\r
     filter3.setListData(label);\r
+    // filter4 taxIds\r
 \r
     javax.swing.SwingUtilities.invokeLater(new Runnable()\r
     {\r
@@ -432,9 +483,8 @@ public class DasSourceBrowser extends GDasSourceBrowser implements
     {\r
       int selectedRow = table.getSelectionModel().getMinSelectionIndex();\r
       nickname = table.getValueAt(selectedRow, 0).toString();\r
-      url = ((DasSource) localSources.get(nickname)).getUrl();\r
-      seqsrc = ((DasSource) localSources.get(nickname))\r
-              .hasCapability("sequence");\r
+      url = ((SOURCE) localSources.get(nickname)).getUri();\r
+      seqsrc = ((SOURCE) localSources.get(nickname)).getVERSION().get(0).getCAPABILITY().contains(Capabilities.SEQUENCE);\r
     }\r
 \r
     JTextField nametf = new JTextField(nickname, 40);\r
@@ -466,7 +516,32 @@ public class DasSourceBrowser extends GDasSourceBrowser implements
       urltf.setText(urltf.getText() + "/");\r
     }\r
 \r
-    Das1Source local = new Das1Source();\r
+    // build using pattern from test: sourcesclientImplTest\r
+    {\r
+      SOURCE source = new SOURCE();\r
+      String uri = "http://das.sanger.ac.uk/das/dummysource";\r
+      source.setUri("http://das.sanger.ac.uk/das/dummysource");\r
+      source.setDescription("Dummy Test Source, should not be in a working registry sources doc");\r
+      VERSION version = new VERSION();\r
+      version.setUri(uri);\r
+      COORDINATES coord = new COORDINATES();\r
+      coord.setAuthority("NCBI");\r
+      coord.setSource("Chromosome");\r
+      coord.setTaxid("9606");\r
+      coord.setVersion("35");\r
+      version.getCOORDINATES().add(coord);\r
+      CAPABILITY cap = new CAPABILITY();\r
+      cap.setQueryUri(uri + "features");\r
+      cap.setType("das1:" + Capabilities.FEATURES.getName());\r
+      version.getCAPABILITY().add(cap);\r
+      source.getVERSION().add(version);\r
+      MAINTAINER m = new MAINTAINER();\r
+      m.setEmail("jw12@sanger.ac.uk");\r
+      source.setMAINTAINER(m);\r
+      source.setTitle("dummy title");\r
+\r
+    }\r
+    SOURCE local = new Das1Source();\r
 \r
     local.setUrl(urltf.getText());\r
     local.setNickname(nametf.getText());\r