Merge branch 'develop' into update_212_Dec_merge_with_21125_chamges
[jalview.git] / src / jalview / ws / jws2 / Jws2ClientFactory.java
index 6a177dd..4d78bd7 100644 (file)
@@ -2,11 +2,14 @@ package jalview.ws.jws2;
 
 import jalview.api.AlignCalcWorkerI;
 import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.gui.AlignFrame;
 import jalview.gui.JvSwingUtils;
 import jalview.util.MessageManager;
+import jalview.ws.api.ServiceWithParameters;
 import jalview.ws.jws2.dm.AAConSettings;
 import jalview.ws.jws2.jabaws2.Jws2Instance;
+import jalview.ws.params.AutoCalcSetting;
 import jalview.ws.uimodel.AlignAnalysisUIText;
 
 import java.awt.event.ActionEvent;
@@ -22,7 +25,7 @@ import javax.swing.event.MenuListener;
 public class Jws2ClientFactory
 {
   static boolean registerAAConWSInstance(final JMenu wsmenu,
-      final Jws2Instance service, final AlignFrame alignFrame)
+          final ServiceWithParameters service, final AlignFrame alignFrame)
   {
     final AlignAnalysisUIText aaui = service.getAlignAnalysisUI(); // null
                                                                         // ; //
@@ -50,7 +53,7 @@ public class Jws2ClientFactory
     {
       List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
               .getCalcManager()
-              .getRegisteredWorkersOfClass(aaui.getClient());
+              .getWorkersOfClass(aaui.getClient());
       if (aaconClient != null && aaconClient.size() > 0)
       {
         SeqAnnotationServiceCalcWorker worker = (SeqAnnotationServiceCalcWorker) aaconClient
@@ -84,18 +87,23 @@ public class Jws2ClientFactory
         @Override
         public void actionPerformed(ActionEvent arg0)
         {
+
           List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
                   .getCalcManager()
-                  .getRegisteredWorkersOfClass(aaui.getClient());
-          if (aaconClient != null && aaconClient.size() > 0)
-          {
-            removeCurrentAAConWorkerFor(aaui, alignFrame);
-          }
-          else
+                  .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
+          if (aaconClient != null)
           {
-            buildCurrentAAConWorkerFor(aaui, alignFrame);
-
+            for (AlignCalcWorkerI worker : aaconClient)
+            {
+              if (((SeqAnnotationServiceCalcWorker) worker).getService()
+                      .getClass().equals(aaui.getClient()))
+              {
+                removeCurrentAAConWorkerFor(aaui, alignFrame);
+                return;
+              }
+            }
           }
+          buildCurrentAAConWorkerFor(aaui, alignFrame);
         }
 
       });
@@ -135,12 +143,13 @@ public class Jws2ClientFactory
             return;
           }
           List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
-                  .getCalcManager().getRegisteredWorkersOfClass(
-                          SeqAnnotationServiceCalcWorker.class);
+                  .getCalcManager()
+                  .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
 
           boolean serviceEnabled = false;
           if (aaconClient != null)
           {
+            // NB code duplicatino again!
             for (AlignCalcWorkerI _worker : aaconClient)
             {
               SeqAnnotationServiceCalcWorker worker = (SeqAnnotationServiceCalcWorker) _worker;
@@ -183,7 +192,7 @@ public class Jws2ClientFactory
      * AACon server to use What parameters to use
      */
     // could actually do a class search for this too
-    AAConSettings fave = (AAConSettings) alignFrame.getViewport()
+    AutoCalcSetting fave = alignFrame.getViewport()
             .getCalcIdSettingsFor(aaui.getCalcId());
     if (fave == null)
     {
@@ -201,13 +210,13 @@ public class Jws2ClientFactory
 
   private static void buildCurrentAAConWorkerFor(
           final AlignAnalysisUIText aaui, AlignFrame alignFrame,
-          Jws2Instance service)
+          ServiceWithParameters service)
   {
     /*
      * preferred settings Whether AACon is automatically recalculated Which
      * AACon server to use What parameters to use
      */
-    AAConSettings fave = (AAConSettings) alignFrame.getViewport()
+    AutoCalcSetting fave = alignFrame.getViewport()
             .getCalcIdSettingsFor(aaui.getCalcId());
     if (fave == null)
     {
@@ -218,7 +227,7 @@ public class Jws2ClientFactory
       if (service != null && !fave.getService().getHostURL()
               .equals(service.getHostURL()))
       {
-        Cache.log.debug("Changing AACon service to " + service.getHostURL()
+        Console.debug("Changing AACon service to " + service.getHostURL()
                 + " from " + fave.getService().getHostURL());
         fave.setService(service);
       }
@@ -226,30 +235,31 @@ public class Jws2ClientFactory
     new SequenceAnnotationWSClient(fave, alignFrame, false);
   }
 
-  private static AAConSettings createDefaultAAConSettings(
+  private static AutoCalcSetting createDefaultAAConSettings(
           AlignAnalysisUIText aaui)
   {
     return createDefaultAAConSettings(aaui, null);
   }
 
-  private static AAConSettings createDefaultAAConSettings(
-          AlignAnalysisUIText aaui, Jws2Instance service)
+  private static AutoCalcSetting createDefaultAAConSettings(
+          AlignAnalysisUIText aaui, ServiceWithParameters service)
   {
     if (service != null)
     {
-      if (!service.getServiceType()
-              .equals(compbio.ws.client.Services.AAConWS.toString()))
-      {
-        Cache.log.warn(
-                "Ignoring invalid preferred service for AACon calculations (service type was "
-                        + service.getServiceType() + ")");
-        service = null;
-      }
-      else
+      // if (!service.getServiceType()
+      // .equals(compbio.ws.client.Services.AAConWS.toString()))
+      // {
+      // Console.warn(
+      // "Ignoring invalid preferred service for AACon calculations (service
+      // type was "
+      // + service.getServiceType() + ")");
+      // service = null;
+      // }
+      // else
       {
         // check service is actually in the list of currently avaialable
         // services
-        if (!Jws2Discoverer.getDiscoverer().getServices().contains(service))
+        if (!PreferredServiceRegistry.getRegistry().contains(service))
         {
           // it isn't ..
           service = null;
@@ -259,7 +269,7 @@ public class Jws2ClientFactory
     if (service == null)
     {
       // get the default service for AACon
-      service = Jws2Discoverer.getDiscoverer().getPreferredServiceFor(null,
+      service = PreferredServiceRegistry.getRegistry().getPreferredServiceFor(null,
               aaui.getServiceType());
     }
     if (service == null)
@@ -269,13 +279,15 @@ public class Jws2ClientFactory
       throw new Error(
               MessageManager.getString("error.no_aacon_service_found"));
     }
-    return new AAConSettings(true, service, null, null);
+    return service instanceof Jws2Instance
+            ? new AAConSettings(true, service, null, null)
+            : new AutoCalcSetting(service, null, null, true);
   }
 
   private static void removeCurrentAAConWorkerFor(AlignAnalysisUIText aaui,
           AlignFrame alignFrame)
   {
     alignFrame.getViewport().getCalcManager()
-            .removeRegisteredWorkersOfClass(aaui.getClient());
+            .removeWorkersOfClass(aaui.getClient());
   }
-}
\ No newline at end of file
+}