JAL-3878 Separate gui elements from operations.
[jalview.git] / src / jalview / ws2 / operations / AnnotationOperation.java
index 31ac0a8..c1d2c7e 100644 (file)
@@ -1,25 +1,33 @@
 package jalview.ws2.operations;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CompletionStage;
 
+import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
+import javax.swing.event.MenuEvent;
+import javax.swing.event.MenuListener;
 
+import jalview.api.AlignCalcManagerI2;
 import jalview.api.AlignmentViewPanel;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.gui.AlignFrame;
 import jalview.gui.AlignViewport;
 import jalview.gui.WsJobParameters;
 import jalview.io.FeaturesFile;
+import jalview.util.Format;
 import jalview.util.MessageManager;
 import jalview.ws.params.ArgumentI;
+import jalview.ws.params.ParamDatastoreI;
 import jalview.ws.params.WsParamSetI;
 import jalview.ws2.MenuEntryProviderI;
 import jalview.ws2.ResultSupplier;
 import jalview.ws2.PollingTaskExecutor;
 import jalview.ws2.WebServiceI;
+import jalview.ws2.gui.AnnotationMenuBuilder;
 
 /**
  *
@@ -59,6 +67,12 @@ public class AnnotationOperation implements Operation
   {
     return service.getName();
   }
+  
+  @Override
+  public String getDescription()
+  {
+    return service.getDescription();
+  }
 
   @Override
   public String getTypeName()
@@ -71,6 +85,18 @@ public class AnnotationOperation implements Operation
   {
     return service.getHostName();
   }
+  
+  @Override
+  public boolean hasParameters()
+  {
+    return service.hasParameters();
+  }
+  
+  @Override
+  public ParamDatastoreI getParamStore()
+  {
+    return service.getParamStore();
+  }
 
   @Override
   public int getMinSequences()
@@ -139,57 +165,9 @@ public class AnnotationOperation implements Operation
   @Override
   public MenuEntryProviderI getMenuBuilder()
   {
-    return this::buildMenu;
+    return new AnnotationMenuBuilder(this);
   }
 
-  protected void buildMenu(JMenu parent, AlignFrame frame)
-  {
-    final var calcName = service.getName();
-    PollingTaskExecutor wsExecutor = frame.getViewport().getWSExecutor();
-    final var calcManager = frame.getViewport().getCalcManager();
-    {
-      var item = new JMenuItem(MessageManager.formatMessage(
-          "label.calcname_with_default_settings", calcName));
-      item.addActionListener((event) -> {
-        /* What is the purpose of AlignViewport and AlignmentViewPanel? */
-        AlignViewport viewport = frame.getCurrentView();
-        AlignmentViewPanel alignPanel = frame.alignPanel;
-        var worker = new AnnotationServiceWorker(this, service,
-            Collections.emptyList(), viewport, alignPanel, frame, frame,
-            calcManager);
-        if (isInteractive())
-          calcManager.registerWorker(worker);
-        else
-          calcManager.startWorker(worker);
-      });
-      parent.add(item);
-    }
-    if (service.hasParameters())
-    {
-      var item = new JMenuItem(
-          MessageManager.getString("label.edit_settings_and_run"));
-      item.setToolTipText(MessageManager.getString(
-          "label.view_and_change_parameters_before_running_calculation"));
-      item.addActionListener((event) -> {
-        openEditParamsDialog(service, null, null)
-            .thenAcceptAsync((arguments) -> {
-              if (arguments != null)
-              {
-                AlignViewport viewport = frame.getCurrentView();
-                AlignmentViewPanel alignPanel = frame.alignPanel;
-                var worker = new AnnotationServiceWorker(
-                    AnnotationOperation.this, service, arguments, viewport,
-                    alignPanel, frame, frame, calcManager);
-                if (isInteractive())
-                  calcManager.registerWorker(worker);
-                else
-                  calcManager.startWorker(worker);
-              }
-            });
-      });
-      parent.add(item);
-    }
-  }
 
   private CompletionStage<List<ArgumentI>> openEditParamsDialog(
       WebServiceI service, WsParamSetI preset, List<ArgumentI> arguments)