Merge branch 'Jalview-JS/develop' into merge_js_develop
[jalview.git] / src / jalview / ws / jws2 / SequenceAnnotationWSClient.java
index 67e3338..6939db4 100644 (file)
@@ -25,8 +25,8 @@ import jalview.gui.AlignFrame;
 import jalview.gui.Desktop;
 import jalview.gui.JvSwingUtils;
 import jalview.util.MessageManager;
-import jalview.ws.jws2.dm.AAConSettings;
-import jalview.ws.jws2.jabaws2.Jws2Instance;
+import jalview.ws.api.ServiceWithParameters;
+import jalview.ws.params.AutoCalcSetting;
 import jalview.ws.params.WsParamSetI;
 import jalview.ws.uimodel.AlignAnalysisUIText;
 
@@ -51,7 +51,7 @@ public class SequenceAnnotationWSClient extends Jws2Client
     // TODO Auto-generated constructor stub
   }
 
-  public SequenceAnnotationWSClient(final Jws2Instance sh,
+  public SequenceAnnotationWSClient(final ServiceWithParameters sh,
           AlignFrame alignFrame, WsParamSetI preset, boolean editParams)
   {
     super(alignFrame, preset, null);
@@ -61,7 +61,7 @@ public class SequenceAnnotationWSClient extends Jws2Client
   // dan think. Do I need to change this method to run RNAalifold through the
   // GUI
 
-  public void initSequenceAnnotationWSClient(final Jws2Instance sh,
+  public void initSequenceAnnotationWSClient(final ServiceWithParameters sh,
           AlignFrame alignFrame, WsParamSetI preset, boolean editParams)
   {
     // dan changed! dan test. comment out if conditional
@@ -82,9 +82,24 @@ public class SequenceAnnotationWSClient extends Jws2Client
       // columns
 
       List<AlignCalcWorkerI> clnts = alignFrame.getViewport()
-              .getCalcManager().getRegisteredWorkersOfClass(clientClass);
-      AbstractJabaCalcWorker worker;
-      if (clnts == null || clnts.size() == 0)
+              .getCalcManager()
+              .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
+
+      SeqAnnotationServiceCalcWorker worker = null;
+      if (clnts != null)
+      {
+        for (AlignCalcWorkerI _worker : clnts)
+        {
+          worker = (SeqAnnotationServiceCalcWorker) _worker;
+          if (worker.hasService()
+                  && worker.getService().getClass().equals(clientClass))
+          {
+            break;
+          }
+          worker = null;
+        }
+      }
+      if (worker == null)
       {
         if (!processParams(sh, editParams))
         {
@@ -92,12 +107,8 @@ public class SequenceAnnotationWSClient extends Jws2Client
         }
         try
         {
-          worker = (AbstractJabaCalcWorker) (clientClass
-                  .getConstructor(new Class[]
-                  { Jws2Instance.class, AlignFrame.class, WsParamSetI.class,
-                      List.class })
-                  .newInstance(new Object[]
-                  { sh, alignFrame, this.preset, paramset }));
+          worker = new SeqAnnotationServiceCalcWorker(sh, alignFrame, this.preset,
+                  paramset);
         } catch (Exception x)
         {
           x.printStackTrace();
@@ -105,13 +116,13 @@ public class SequenceAnnotationWSClient extends Jws2Client
                   MessageManager.getString("error.implementation_error"),
                   x);
         }
-        alignFrame.getViewport().getCalcManager().registerWorker(worker);
-        alignFrame.getViewport().getCalcManager().startWorker(worker);
-
+        alignFrame.getViewport().getCalcManager().registerWorker(worker); // also
+                                                                          // starts
+                                                                          // the
+                                                                          // worker
       }
       else
       {
-        worker = (AbstractJabaCalcWorker) clnts.get(0);
         if (editParams)
         {
           paramset = worker.getArguments();
@@ -128,7 +139,7 @@ public class SequenceAnnotationWSClient extends Jws2Client
         worker.updateParameters(this.preset, paramset);
       }
     }
-    if (sh.action.toLowerCase().contains("disorder"))
+    if (!sh.isInteractiveUpdate())
     {
       // build IUPred style client. take sequences, returns annotation per
       // sequence.
@@ -138,14 +149,14 @@ public class SequenceAnnotationWSClient extends Jws2Client
       }
 
       alignFrame.getViewport().getCalcManager().startWorker(
-              new AADisorderClient(sh, alignFrame, preset, paramset));
+              new SeqAnnotationServiceCalcWorker(sh, alignFrame, preset, paramset));
     }
   }
 
-  public SequenceAnnotationWSClient(AAConSettings fave,
+  public SequenceAnnotationWSClient(AutoCalcSetting fave,
           AlignFrame alignFrame, boolean b)
   {
-    super(alignFrame, fave.getPreset(), fave.getJobArgset());
+    super(alignFrame, fave.getPreset(), fave.getArgumentSet());
     initSequenceAnnotationWSClient(fave.getService(), alignFrame,
             fave.getPreset(), b);
   }
@@ -156,18 +167,24 @@ public class SequenceAnnotationWSClient extends Jws2Client
    * @see jalview.ws.jws2.Jws2Client#attachWSMenuEntry(javax.swing.JMenu,
    * jalview.ws.jws2.jabaws2.Jws2Instance, jalview.gui.AlignFrame)
    */
-  public void attachWSMenuEntry(JMenu wsmenu, final Jws2Instance service,
+  @Override
+  public void attachWSMenuEntry(JMenu wsmenu,
+          final ServiceWithParameters service,
           final AlignFrame alignFrame)
   {
-    if (registerAAConWSInstance(wsmenu, service, alignFrame))
+    if (Jws2ClientFactory.registerAAConWSInstance(wsmenu,
+            service, alignFrame))
     {
       // Alignment dependent analysis calculation WS gui
       return;
     }
     boolean hasparams = service.hasParameters();
-    // Assume name ends in WS
-    String calcName = service.serviceType.substring(0,
-            service.serviceType.length() - 2);
+    String calcName = service.getName();
+    if (calcName.endsWith("WS"))
+    {
+      // Remove "WS" suffix
+      calcName = calcName.substring(0, calcName.length() - 2);
+    }
 
     JMenuItem annotservice = new JMenuItem(MessageManager.formatMessage(
             "label.calcname_with_default_settings", new String[]
@@ -178,7 +195,8 @@ public class SequenceAnnotationWSClient extends Jws2Client
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        new SequenceAnnotationWSClient(service, alignFrame, null, false);
+        new SequenceAnnotationWSClient(service, alignFrame,
+                null, false);
       }
     });
     wsmenu.add(annotservice);
@@ -193,9 +211,11 @@ public class SequenceAnnotationWSClient extends Jws2Client
 
       annotservice.addActionListener(new ActionListener()
       {
+        @Override
         public void actionPerformed(ActionEvent e)
         {
-          new SequenceAnnotationWSClient(service, alignFrame, null, true);
+          new SequenceAnnotationWSClient(service, alignFrame,
+                  null, true);
         }
       });
       wsmenu.add(annotservice);
@@ -217,9 +237,11 @@ public class SequenceAnnotationWSClient extends Jws2Client
                   + "</strong><br/>" + preset.getDescription()));
           methodR.addActionListener(new ActionListener()
           {
+            @Override
             public void actionPerformed(ActionEvent e)
             {
-              new SequenceAnnotationWSClient(service, alignFrame, preset,
+              new SequenceAnnotationWSClient(service,
+                      alignFrame, preset,
                       false);
             }
 
@@ -234,7 +256,7 @@ public class SequenceAnnotationWSClient extends Jws2Client
     {
       annotservice = new JMenuItem(
               MessageManager.getString("label.view_documentation"));
-      if (service.docUrl != null)
+      if (service != null && service.hasDocumentationUrl())
       {
         annotservice.addActionListener(new ActionListener()
         {
@@ -242,13 +264,14 @@ public class SequenceAnnotationWSClient extends Jws2Client
           @Override
           public void actionPerformed(ActionEvent arg0)
           {
-            Desktop.getInstance().showUrl(service.docUrl);
+            Desktop.getInstance().showUrl(service.getDocumentationUrl());
           }
         });
         annotservice.setToolTipText(
                 JvSwingUtils.wrapTooltip(true, MessageManager.formatMessage(
                         "label.view_service_doc_url", new String[]
-                        { service.docUrl, service.docUrl })));
+                        { service.getDocumentationUrl(),
+                            service.getDocumentationUrl() })));
         wsmenu.add(annotservice);
       }
     }