JAL-3210 Barebones gradle/buildship/eclipse. See README
[jalview.git] / src / jalview / ws / seqfetcher / ASequenceFetcher.java
index e205e76..2a27cce 100644 (file)
@@ -36,7 +36,6 @@ import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Stack;
 import java.util.Vector;
 
@@ -46,7 +45,7 @@ public class ASequenceFetcher
   /*
    * set of databases we can retrieve entries from
    */
-  protected Hashtable<String, Map<String, DbSourceProxyRoot>> fetchableDbs;
+  protected Hashtable<String, Map<String, DbSourceProxy>> fetchableDbs;
 
   /*
    * comparator to sort by tier (0/1/2) and name
@@ -58,6 +57,8 @@ public class ASequenceFetcher
    */
   protected ASequenceFetcher()
   {
+    super();
+
     /*
      * comparator to sort proxies by tier and name
      */
@@ -304,7 +305,7 @@ public class ASequenceFetcher
   public List<DbSourceProxy> getSourceProxy(String db)
   {
     db = DBRefUtils.getCanonicalName(db);
-    Map<String, DbSourceProxyRoot> dblist = fetchableDbs.get(db);
+    Map<String, DbSourceProxy> dblist = fetchableDbs.get(db);
     if (dblist == null)
     {
       return new ArrayList<>();
@@ -313,75 +314,27 @@ public class ASequenceFetcher
     /*
      * sort so that primary sources precede secondary
      */
-    List<DbSourceProxy> dbs = new ArrayList<>();
-    for (Entry<String, DbSourceProxyRoot> entry : dblist.entrySet())
-    {
-      DbSourceProxyRoot proxy = entry.getValue();
-      if (proxy instanceof DbRoot)
-      {
-        proxy = setProxy((DbRoot) proxy, dblist);
-      }
-      dbs.add((DbSourceProxy) proxy);
-    }
+    List<DbSourceProxy> dbs = new ArrayList<>(dblist.values());
     Collections.sort(dbs, proxyComparator);
     return dbs;
   }
 
-  class DbRoot implements DbSourceProxyRoot
-  {
-
-    private String sourceName;
-
-    private String className;
-
-    DbRoot(String sourceName, String className)
-    {
-      this.sourceName = sourceName;
-      this.className = className;
-    }
-
-    @Override
-    public String getDbSource()
-    {
-      return sourceName;
-    }
-
-    /**
-     * lazy class creation
-     * 
-     * @return the actual proxy object
-     */
-    public DbSourceProxy getProxy()
-    {
-      try
-      {
-        System.err.println("ASeqFetch " + className);
-        return (DbSourceProxy) Class.forName(className).newInstance();
-      } catch (Exception e)
-      {
-        // Serious problems if this happens.
-        throw new Error(MessageManager.getString(
-                "error.dbrefsource_implementation_exception"), e);
-      }
-    }
-
-  }
-
   /**
    * constructs an instance of the proxy and registers it as a valid dbrefsource
    * 
-   * @param dbSourceProxyClass
+   * @param dbSourceProxy
    *          reference for class implementing
    *          jalview.ws.seqfetcher.DbSourceProxy
    */
   protected void addDBRefSourceImpl(
-          Class<? extends DbSourceProxy> dbSourceProxyClass)
+          Class<? extends DbSourceProxy> dbSourceProxy)
           throws IllegalArgumentException
   {
     DbSourceProxy proxy = null;
     try
     {
-      proxy = dbSourceProxyClass.getConstructor().newInstance();
+      DbSourceProxy proxyObj = dbSourceProxy.getConstructor().newInstance();
+      proxy = proxyObj;
     } catch (IllegalArgumentException e)
     {
       throw e;
@@ -394,18 +347,13 @@ public class ASequenceFetcher
     addDbRefSourceImpl(proxy);
   }
 
-  public void addDBRefSourceImpl(String sourceName, String className)
-  {
-    addDbRefSourceImpl(new DbRoot(sourceName, className));
-  }
-
   /**
    * add the properly initialised DbSourceProxy object 'proxy' to the list of
    * sequence fetchers
    * 
    * @param proxy
    */
-  void addDbRefSourceImpl(DbSourceProxyRoot proxy)
+  protected void addDbRefSourceImpl(DbSourceProxy proxy)
   {
     if (proxy != null)
     {
@@ -413,31 +361,25 @@ public class ASequenceFetcher
       {
         fetchableDbs = new Hashtable<>();
       }
-      String key = proxy.getDbSource();
-      Map<String, DbSourceProxyRoot> slist = fetchableDbs.get(key);
+      Map<String, DbSourceProxy> slist = fetchableDbs
+              .get(proxy.getDbSource());
       if (slist == null)
       {
-        fetchableDbs.put(key, slist = new Hashtable<>());
-      }
-      if (proxy instanceof DbRoot)
-      {
-        slist.put("", proxy);
-      }
-      else
-      {
-        slist.put(((DbSourceProxy) proxy).getDbName(), proxy);
+        fetchableDbs.put(proxy.getDbSource(),
+                slist = new Hashtable<>());
       }
+      slist.put(proxy.getDbName(), proxy);
     }
   }
 
   /**
    * select sources which are implemented by instances of the given class
    * 
-   * @param class1
+   * @param class
    *          that implements DbSourceProxy
    * @return null or vector of source names for fetchers
    */
-  public String[] getDbInstances(Class<?> class1)
+  public String[] getDbInstances(Class class1)
   {
     if (!DbSourceProxy.class.isAssignableFrom(class1))
     {
@@ -450,25 +392,20 @@ public class ASequenceFetcher
     {
       return null;
     }
+    String[] sources = null;
     Vector<String> src = new Vector<>();
-    for (String dbSource : fetchableDbs.keySet())
+    Enumeration<String> dbs = fetchableDbs.keys();
+    while (dbs.hasMoreElements())
     {
-      Map<String, DbSourceProxyRoot> dblist = fetchableDbs.get(dbSource);
-      for (Entry<String, DbSourceProxyRoot> entry : dblist.entrySet())
+      String dbn = dbs.nextElement();
+      for (DbSourceProxy dbp : fetchableDbs.get(dbn).values())
       {
-        DbSourceProxyRoot proxy = entry.getValue();
-        if (proxy instanceof DbRoot)
+        if (class1.isAssignableFrom(dbp.getClass()))
         {
-          proxy = setProxy((DbRoot) proxy, dblist);
-        }
-        Class<?> c = proxy.getClass();
-        if (class1 == c || class1.isAssignableFrom(c))
-        {
-          src.addElement(dbSource);
+          src.addElement(dbn);
         }
       }
     }
-    String[] sources = null;
     if (src.size() > 0)
     {
       src.copyInto(sources = new String[src.size()]);
@@ -476,24 +413,10 @@ public class ASequenceFetcher
     return sources;
   }
 
-  private DbSourceProxyRoot setProxy(DbRoot root,
-          Map<String, DbSourceProxyRoot> dblist)
-  {
-    DbSourceProxy proxy = root.getProxy();
-    // Time to create the actual proxy
-    dblist.remove("");
-    dblist.put(proxy.getDbName(), proxy);
-    return proxy;
-  }
-
-  public DbSourceProxy[] getDbSourceProxyInstances(Class<?> class1)
+  public DbSourceProxy[] getDbSourceProxyInstances(Class class1)
   {
-    if (fetchableDbs == null)
-    {
-      return null;
-    }
     List<DbSourceProxy> prlist = new ArrayList<>();
-    for (String fetchable : fetchableDbs.keySet())
+    for (String fetchable : getSupportedDb())
     {
       for (DbSourceProxy pr : getSourceProxy(fetchable))
       {