JAL-1075, JAL-1061, JAL-1064 - introduced second tier of 'fetch database' menu hierar...
[jalview.git] / src / jalview / ws / SequenceFetcher.java
index 077ce14..b1d3f3c 100644 (file)
@@ -22,6 +22,7 @@ import jalview.datamodel.AlignmentI;
 import jalview.datamodel.DBRefSource;\r
 import jalview.datamodel.SequenceI;\r
 import jalview.ws.dbsources.das.api.jalviewSourceI;\r
+import jalview.ws.dbsources.das.datamodel.DasSequenceSource;\r
 import jalview.ws.seqfetcher.ASequenceFetcher;\r
 import jalview.ws.seqfetcher.DbSourceProxy;\r
 \r
@@ -63,12 +64,86 @@ public class SequenceFetcher extends ASequenceFetcher
   }\r
 \r
   /**\r
-   * return an ordered list of database sources suitable for using in a GUI\r
-   * element\r
+   * return an ordered list of database sources where non-das database classes\r
+   * appear before das database classes\r
    */\r
   public String[] getOrderedSupportedSources()\r
   {\r
     String[] srcs = this.getSupportedDb();\r
+    ArrayList<String> dassrc = new ArrayList<String>(), nondas = new ArrayList<String>();\r
+    for (int i = 0; i < srcs.length; i++)\r
+    {\r
+      boolean das = false,skip=false;\r
+      String nm;\r
+      for (DbSourceProxy dbs : getSourceProxy(srcs[i]))\r
+      {\r
+        // Skip the alignment databases for the moment - they're not useful for verifying a single sequence against its reference source\r
+        if (dbs.isA(DBRefSource.ALIGNMENTDB))\r
+        {\r
+          skip=true;\r
+        } else {\r
+          nm = dbs.getDbName();\r
+          if (getSourceProxy(srcs[i]) instanceof jalview.ws.dbsources.das.datamodel.DasSequenceSource)\r
+          {\r
+            if (nm.startsWith("das:"))\r
+            {\r
+              nm = nm.substring(4);\r
+              das = true;\r
+            }\r
+            break;\r
+          }\r
+        }\r
+      }\r
+      if (skip)\r
+      {\r
+        continue;\r
+      }\r
+      if (das)\r
+      {\r
+        dassrc.add(srcs[i]);\r
+      }\r
+      else\r
+      {\r
+        nondas.add(srcs[i]);\r
+      }\r
+    }\r
+    String[] tosort = nondas.toArray(new String[0]), sorted = nondas\r
+            .toArray(new String[0]);\r
+    for (int j = 0, jSize = sorted.length; j < jSize; j++)\r
+    {\r
+      tosort[j] = tosort[j].toLowerCase();\r
+    }\r
+    jalview.util.QuickSort.sort(tosort, sorted);\r
+    // construct array with all sources listed\r
+\r
+    srcs = new String[sorted.length + dassrc.size()];\r
+    int i = 0;\r
+    for (int j = sorted.length - 1; j >= 0; j--, i++)\r
+    {\r
+      srcs[i] = sorted[j];\r
+      sorted[j] = null;\r
+    }\r
+\r
+    sorted = dassrc.toArray(new String[0]);\r
+    tosort = dassrc.toArray(new String[0]);\r
+    for (int j = 0, jSize = sorted.length; j < jSize; j++)\r
+    {\r
+      tosort[j] = tosort[j].toLowerCase();\r
+    }\r
+    jalview.util.QuickSort.sort(tosort, sorted);\r
+    for (int j = sorted.length - 1; j >= 0; j--, i++)\r
+    {\r
+      srcs[i] = sorted[j];\r
+    }\r
+    return srcs;\r
+  }\r
+\r
+  /**\r
+   * return plaintext databse list suitable for using in a GUI element\r
+   */\r
+  public String[] _getOrderedSupportedSources()\r
+  {\r
+    String[] srcs = this.getSupportedDb();\r
     ArrayList dassrc = new ArrayList(), nondas = new ArrayList();\r
     for (int i = 0; i < srcs.length; i++)\r
     {\r
@@ -347,4 +422,5 @@ public class SequenceFetcher extends ASequenceFetcher
       }\r
     }\r
   }\r
+\r
 }\r