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;
/*
* 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
*/
protected ASequenceFetcher()
{
+ super();
+
/*
* comparator to sort proxies by tier and name
*/
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<>();
/*
* 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;
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)
{
{
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))
{
{
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()]);
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))
{