import jalview.util.DBRefUtils;\r
\r
import java.util.ArrayList;\r
+import java.util.Collection;\r
import java.util.Enumeration;\r
import java.util.HashSet;\r
import java.util.Hashtable;\r
import java.util.Iterator;\r
import java.util.List;\r
+import java.util.Map;\r
import java.util.Stack;\r
import java.util.Vector;\r
\r
/**\r
* set of databases we can retrieve entries from\r
*/\r
- protected Hashtable<String, List<DbSourceProxy>> FETCHABLEDBS;\r
+ protected Hashtable<String, Map<String, DbSourceProxy>> FETCHABLEDBS;\r
\r
public ASequenceFetcher()\r
{\r
*/\r
public List<DbSourceProxy> getSourceProxy(String db)\r
{\r
- List<DbSourceProxy> dbs = FETCHABLEDBS.get(db);\r
+ List<DbSourceProxy> dbs;\r
+ Map<String,DbSourceProxy> dblist = FETCHABLEDBS.get(db);\r
+ if (dblist==null) {return new ArrayList<DbSourceProxy>();};\r
+ if (dblist.size()>1) {\r
+ DbSourceProxy[] l=dblist.values().toArray(new DbSourceProxy[0]);\r
+ int i=0;\r
+ String[] nm=new String[l.length];\r
+ for (DbSourceProxy s:l)\r
+ {\r
+ nm[i++]=s.getDbName().toLowerCase();\r
+ }\r
+ jalview.util.QuickSort.sort(nm,l);\r
+ dbs = new ArrayList<DbSourceProxy>();\r
+ for (i=l.length-1;i>=0; i--)\r
+ {\r
+ dbs.add(l[i]);\r
+ }\r
+ } else {\r
+ dbs = new ArrayList<DbSourceProxy>(dblist.values());\r
+ }\r
return dbs;\r
}\r
\r
{\r
if (FETCHABLEDBS == null)\r
{\r
- FETCHABLEDBS = new Hashtable<String, List<DbSourceProxy>>();\r
+ FETCHABLEDBS = new Hashtable<String, Map<String,DbSourceProxy>>();\r
}\r
- List<DbSourceProxy> slist = FETCHABLEDBS.get(proxy.getDbSource());\r
+ Map<String,DbSourceProxy> slist = FETCHABLEDBS.get(proxy.getDbSource());\r
if (slist == null)\r
{\r
FETCHABLEDBS.put(proxy.getDbSource(),\r
- slist = new ArrayList<DbSourceProxy>());\r
+ slist = new Hashtable<String,DbSourceProxy>());\r
}\r
- slist.add(proxy);\r
+ slist.put(proxy.getDbName(),proxy);\r
}\r
}\r
\r
while (dbs.hasMoreElements())\r
{\r
String dbn = (String) dbs.nextElement();\r
- for (DbSourceProxy dbp : FETCHABLEDBS.get(dbn))\r
+ for (DbSourceProxy dbp : FETCHABLEDBS.get(dbn).values())\r
{\r
if (class1.isAssignableFrom(dbp.getClass()))\r
{\r
}\r
return sources;\r
}\r
+ public DbSourceProxy[] getDbSourceProxyInstances(\r
+ Class class1)\r
+ {\r
+ ArrayList<DbSourceProxy> prlist=new ArrayList<DbSourceProxy>();\r
+ for (String fetchable:getSupportedDb())\r
+ for (DbSourceProxy pr:getSourceProxy(fetchable))\r
+ {\r
+ if (class1.isInstance(pr)) {prlist.add(pr);}\r
+ }\r
+ if (prlist.size()==0)\r
+ {\r
+ return null;\r
+ }\r
+ return prlist.toArray(new DbSourceProxy[0]);\r
+ }\r
+\r
}\r