X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fseqfetcher%2FASequenceFetcher.java;h=09a7a95f3d3fdf8ea04e86d9378ccc1e2da3cf74;hb=d904a499f1863e96cd699e0c5f7f0f81710e8ad9;hp=c63e148a3293b4afafd74fb1f46d9f64130559f6;hpb=994985c6ff0ea1ebadb8e184e8090dbb780e3c10;p=jalview.git diff --git a/src/jalview/ws/seqfetcher/ASequenceFetcher.java b/src/jalview/ws/seqfetcher/ASequenceFetcher.java index c63e148..09a7a95 100644 --- a/src/jalview/ws/seqfetcher/ASequenceFetcher.java +++ b/src/jalview/ws/seqfetcher/ASequenceFetcher.java @@ -23,11 +23,13 @@ import jalview.datamodel.SequenceI; import jalview.util.DBRefUtils; import java.util.ArrayList; +import java.util.Collection; import java.util.Enumeration; import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Stack; import java.util.Vector; @@ -37,7 +39,7 @@ public class ASequenceFetcher /** * set of databases we can retrieve entries from */ - protected Hashtable> FETCHABLEDBS; + protected Hashtable> FETCHABLEDBS; public ASequenceFetcher() { @@ -259,7 +261,26 @@ public class ASequenceFetcher */ public List getSourceProxy(String db) { - List dbs = FETCHABLEDBS.get(db); + List dbs; + Map dblist = FETCHABLEDBS.get(db); + if (dblist==null) {return new ArrayList();}; + if (dblist.size()>1) { + DbSourceProxy[] l=dblist.values().toArray(new DbSourceProxy[0]); + int i=0; + String[] nm=new String[l.length]; + for (DbSourceProxy s:l) + { + nm[i++]=s.getDbName().toLowerCase(); + } + jalview.util.QuickSort.sort(nm,l); + dbs = new ArrayList(); + for (i=l.length-1;i>=0; i--) + { + dbs.add(l[i]); + } + } else { + dbs = new ArrayList(dblist.values()); + } return dbs; } @@ -311,15 +332,15 @@ public class ASequenceFetcher { if (FETCHABLEDBS == null) { - FETCHABLEDBS = new Hashtable>(); + FETCHABLEDBS = new Hashtable>(); } - List slist = FETCHABLEDBS.get(proxy.getDbSource()); + Map slist = FETCHABLEDBS.get(proxy.getDbSource()); if (slist == null) { FETCHABLEDBS.put(proxy.getDbSource(), - slist = new ArrayList()); + slist = new Hashtable()); } - slist.add(proxy); + slist.put(proxy.getDbName(),proxy); } } @@ -373,7 +394,7 @@ public class ASequenceFetcher while (dbs.hasMoreElements()) { String dbn = (String) dbs.nextElement(); - for (DbSourceProxy dbp : FETCHABLEDBS.get(dbn)) + for (DbSourceProxy dbp : FETCHABLEDBS.get(dbn).values()) { if (class1.isAssignableFrom(dbp.getClass())) { @@ -387,4 +408,20 @@ public class ASequenceFetcher } return sources; } + public DbSourceProxy[] getDbSourceProxyInstances( + Class class1) + { + ArrayList prlist=new ArrayList(); + for (String fetchable:getSupportedDb()) + for (DbSourceProxy pr:getSourceProxy(fetchable)) + { + if (class1.isInstance(pr)) {prlist.add(pr);} + } + if (prlist.size()==0) + { + return null; + } + return prlist.toArray(new DbSourceProxy[0]); + } + }