Merge branch 'develop' into update_212_Dec_merge_with_21125_chamges
[jalview.git] / src / jalview / ws / jws1 / Discoverer.java
index bee9fad..a5b73da 100644 (file)
@@ -20,8 +20,6 @@
  */
 package jalview.ws.jws1;
 
-import jalview.gui.JvOptionPane;
-import jalview.util.MessageManager;
 
 import java.net.URL;
 import java.util.Hashtable;
@@ -33,9 +31,24 @@ import ext.vamsas.IRegistryServiceLocator;
 import ext.vamsas.RegistryServiceSoapBindingStub;
 import ext.vamsas.ServiceHandle;
 import ext.vamsas.ServiceHandles;
+import jalview.bin.Cache;
+import jalview.bin.Console;
+import jalview.bin.ApplicationSingletonProvider;
+import jalview.bin.ApplicationSingletonProvider.ApplicationSingletonI;
+import jalview.gui.JvOptionPane;
+import jalview.util.MessageManager;
 
-public class Discoverer implements Runnable
+public class Discoverer implements Runnable, ApplicationSingletonI
 {
+  public static Discoverer getInstance()
+  {
+    return (Discoverer) ApplicationSingletonProvider.getInstance(Discoverer.class);
+  }
+
+  private Discoverer()
+  {
+    // use getInstance()
+  }
   ext.vamsas.IRegistry registry; // the root registry service.
 
   private java.beans.PropertyChangeSupport changeSupport = new java.beans.PropertyChangeSupport(
@@ -98,7 +111,7 @@ public class Discoverer implements Runnable
       // timeout
     } catch (Exception ex)
     {
-      jalview.bin.Cache.log.error(
+      Console.error(
               "Serious!  Service location failed\nfor URL :" + WsURL + "\n",
               ex);
 
@@ -110,23 +123,27 @@ public class Discoverer implements Runnable
     return server;
   }
 
-  static private java.net.URL RootServiceURL = null;
+  private java.net.URL RootServiceURL = null;
 
-  static public Vector<URL> ServiceURLList = null;
+  private Vector<URL> ServiceURLList = null;
 
-  static private boolean reallyDiscoverServices = true;
+  public Vector<URL> getServiceURLList() {
+    return ServiceURLList;
+  }
+  
+  private boolean reallyDiscoverServices = true;
 
-  public static java.util.Hashtable<String, Vector<ServiceHandle>> services = null;
+  private java.util.Hashtable<String, Vector<ServiceHandle>> services = null;
   // stored by
   // abstractServiceType
   // string
 
-  public static java.util.Vector<ServiceHandle> serviceList = null;
+  public java.util.Vector<ServiceHandle> serviceList = null;
 
-  static private Vector<URL> getDiscoveryURLS()
+  private Vector<URL> getDiscoveryURLS()
   {
     Vector<URL> urls = new Vector<>();
-    String RootServiceURLs = jalview.bin.Cache.getDefault("DISCOVERY_URLS",
+    String RootServiceURLs = Cache.getDefault("DISCOVERY_URLS",
             "http://www.compbio.dundee.ac.uk/JalviewWS/services/ServiceRegistry");
 
     try
@@ -144,23 +161,21 @@ public class Discoverer implements Runnable
           }
           else
           {
-            jalview.bin.Cache.log
-                    .info("Ignoring duplicate url in DISCOVERY_URLS list");
+            Console.info("Ignoring duplicate url in DISCOVERY_URLS list");
           }
         } catch (Exception ex)
         {
-          jalview.bin.Cache.log
-                  .warn("Problem whilst trying to make a URL from '"
-                          + ((url != null) ? url : "<null>") + "'");
-          jalview.bin.Cache.log.warn(
+          Console.warn("Problem whilst trying to make a URL from '"
+                  + ((url != null) ? url : "<null>") + "'");
+          Console.warn(
                   "This was probably due to a malformed comma separated list"
                           + " in the DISCOVERY_URLS entry of $(HOME)/.jalview_properties)");
-          jalview.bin.Cache.log.debug("Exception was ", ex);
+          Console.debug("Exception was ", ex);
         }
       }
     } catch (Exception ex)
     {
-      jalview.bin.Cache.log.warn(
+      Console.warn(
               "Error parsing comma separated list of urls in DISCOVERY_URLS.",
               ex);
     }
@@ -176,11 +191,17 @@ public class Discoverer implements Runnable
    */
   static public void doDiscovery()
   {
-    jalview.bin.Cache.log
+    getInstance().discovery();
+  }
+
+  private void discovery()
+  {
+    Console
             .debug("(Re)-Initialising the discovery URL list.");
     try
     {
-      reallyDiscoverServices = jalview.bin.Cache
+      Discoverer d = getInstance();
+      reallyDiscoverServices = Cache
               .getDefault("DISCOVERY_START", false);
       if (reallyDiscoverServices)
       {
@@ -188,7 +209,7 @@ public class Discoverer implements Runnable
       }
       else
       {
-        jalview.bin.Cache.log.debug("Setting default services");
+        Console.debug("Setting default services");
         services = new Hashtable<>();
         // Muscle, Clustal and JPred.
         ServiceHandle[] defServices = { new ServiceHandle("MsaWS",
@@ -239,16 +260,16 @@ public class Discoverer implements Runnable
     ServiceHandles shs = null;
     try
     {
-      jalview.bin.Cache.log.debug("Discovering services using " + location);
+      Console.debug("Discovering services using " + location);
       shs = locateWebService(location).getServices();
     } catch (org.apache.axis.AxisFault f)
     {
       // JBPNote - should do this a better way!
       if (f.getFaultReason().indexOf("(407)") > -1)
       {
-        if (jalview.gui.Desktop.desktop != null)
+        if (jalview.gui.Desktop.getDesktopPane() != null)
         {
-          JvOptionPane.showMessageDialog(jalview.gui.Desktop.desktop,
+          JvOptionPane.showMessageDialog(jalview.gui.Desktop.getDesktopPane(),
                   MessageManager.getString("label.set_proxy_settings"),
                   MessageManager
                           .getString("label.proxy_authorization_failed"),
@@ -257,13 +278,13 @@ public class Discoverer implements Runnable
       }
       else
       {
-        jalview.bin.Cache.log.warn("No Discovery service at " + location);
-        jalview.bin.Cache.log.debug("Axis Fault", f);
+        Console.warn("No Discovery service at " + location);
+        Console.debug("Axis Fault", f);
       }
     } catch (Exception e)
     {
-      jalview.bin.Cache.log.warn("No Discovery service at " + location);
-      jalview.bin.Cache.log.debug("Discovery Service General Exception", e);
+      Console.warn("No Discovery service at " + location);
+      Console.debug("Discovery Service General Exception", e);
     }
     if ((shs != null) && shs.getServices().length > 0)
     {
@@ -284,7 +305,7 @@ public class Discoverer implements Runnable
    *          Hashtable
    * @return boolean
    */
-  static private boolean buildServiceLists(ServiceHandle[] sh,
+  private boolean buildServiceLists(ServiceHandle[] sh,
           Vector<ServiceHandle> cat,
           Hashtable<String, Vector<ServiceHandle>> sscat)
   {
@@ -293,9 +314,9 @@ public class Discoverer implements Runnable
     {
       if (!cat.contains(sh[i]))
       {
-        jalview.bin.Cache.log.debug("A " + sh[i].getAbstractName()
-                + " service called " + sh[i].getName() + " exists at "
-                + sh[i].getEndpointURL() + "\n");
+        Console.debug("A " + sh[i].getAbstractName() + " service called "
+                + sh[i].getName() + " exists at " + sh[i].getEndpointURL()
+                + "\n");
         if (!sscat.containsKey(sh[i].getAbstractName()))
         {
           sscat.put(sh[i].getAbstractName(), cat = new Vector<>());
@@ -315,16 +336,15 @@ public class Discoverer implements Runnable
               disc_serv = new java.net.URL(sh[i].getEndpointURL());
               if (!ServiceURLList.contains(disc_serv))
               {
-                jalview.bin.Cache.log.debug(
+                Console.debug(
                         "Adding new discovery service at " + disc_serv);
                 ServiceURLList.add(disc_serv);
                 seenNewDiscovery = true;
               }
             } catch (Exception e)
             {
-              jalview.bin.Cache.log
-                      .debug("Ignoring bad discovery service URL "
-                              + sh[i].getEndpointURL(), e);
+              Console.debug("Ignoring bad discovery service URL "
+                      + sh[i].getEndpointURL(), e);
             }
           }
         }
@@ -341,8 +361,7 @@ public class Discoverer implements Runnable
     int s_url = 0;
     if (ServiceURLList == null)
     {
-      jalview.bin.Cache.log
-              .debug("No service endpoints to use for service discovery.");
+      Console.debug("No service endpoints to use for service discovery.");
       return;
     }
     while (s_url < ServiceURLList.size())
@@ -355,8 +374,7 @@ public class Discoverer implements Runnable
       }
       else
       {
-        jalview.bin.Cache.log.warn("No services at "
-                + (ServiceURLList.get(s_url))
+        Console.warn("No services at " + (ServiceURLList.get(s_url))
                 + " - check DISCOVERY_URLS property in .jalview_properties");
       }
       s_url++;
@@ -379,26 +397,40 @@ public class Discoverer implements Runnable
   @Override
   public void run()
   {
-    final Discoverer discoverer = this;
-    Thread discoverThread = new Thread()
-    {
-      @Override
-      public void run()
-      {
-        Discoverer.doDiscovery();
-        discoverer.discoverServices();
-      }
-    };
-    discoverThread.start();
+    Console.info("Discovering jws1 services");
+    Discoverer.doDiscovery();
+    discoverServices();
   }
 
   /**
    * binding service abstract name to handler class
    */
-  private static Hashtable<String, WS1Client> serviceClientBindings;
+  private Hashtable<String, WS1Client> serviceClientBindings;
 
   public static WS1Client getServiceClient(ServiceHandle sh)
   {
+    return getInstance().getClient(sh);
+  }
+  
+  /**
+   * notes on discovery service 1. need to allow multiple discovery source urls.
+   * 2. user interface to add/control list of urls in preferences notes on
+   * wsclient discovery 1. need a classpath property with list of additional
+   * plugin directories 2. optional config to cite specific bindings between
+   * class name and Abstract service name. 3. precedence for automatic discovery
+   * by using getAbstractName for WSClient - user added plugins override default
+   * plugins ? notes on wsclient gui code for gui attachment now moved to
+   * wsclient implementation. Needs more abstraction but approach seems to work.
+   * is it possible to 'generalise' the data retrieval calls further ? current
+   * methods are very specific (gatherForMSA or gatherForSeqOrMsaSecStrPred),
+   * new methods for conservation (group or alignment), treecalc (aligned
+   * profile), seqannot (sequences selected from dataset, annotation back to
+   * dataset).
+   * 
+   */
+
+  private WS1Client getClient(ServiceHandle sh)
+  {
     if (serviceClientBindings == null)
     {
       // get a list from Config or create below
@@ -421,20 +453,8 @@ public class Discoverer implements Runnable
     }
     return instance;
   }
-  /**
-   * notes on discovery service 1. need to allow multiple discovery source urls.
-   * 2. user interface to add/control list of urls in preferences notes on
-   * wsclient discovery 1. need a classpath property with list of additional
-   * plugin directories 2. optional config to cite specific bindings between
-   * class name and Abstract service name. 3. precedence for automatic discovery
-   * by using getAbstractName for WSClient - user added plugins override default
-   * plugins ? notes on wsclient gui code for gui attachment now moved to
-   * wsclient implementation. Needs more abstraction but approach seems to work.
-   * is it possible to 'generalise' the data retrieval calls further ? current
-   * methods are very specific (gatherForMSA or gatherForSeqOrMsaSecStrPred),
-   * new methods for conservation (group or alignment), treecalc (aligned
-   * profile), seqannot (sequences selected from dataset, annotation back to
-   * dataset).
-   * 
-   */
+  public static Hashtable<String, Vector<ServiceHandle>> getServices()
+  {
+    return getInstance().services;
+  }
 }