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;
/**
*
{
return service.getName();
}
+
+ @Override
+ public String getDescription()
+ {
+ return service.getDescription();
+ }
@Override
public String getTypeName()
{
return service.getHostName();
}
+
+ @Override
+ public boolean hasParameters()
+ {
+ return service.hasParameters();
+ }
+
+ @Override
+ public ParamDatastoreI getParamStore()
+ {
+ return service.getParamStore();
+ }
@Override
public int getMinSequences()
@Override
public MenuEntryProviderI getMenuBuilder()
{
- if (isInteractive())
- return this::buildInteractiveMenu;
- else
- return this::buildClassicMenu;
- }
-
- protected void buildClassicMenu(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) -> {
- var worker = createWorker(Collections.emptyList(), frame, calcManager);
- 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)
- {
- var worker = createWorker(arguments, frame, calcManager);
- calcManager.startWorker(worker);
- }
- });
- });
- parent.add(item);
- }
- }
-
- protected void buildInteractiveMenu(JMenu parent, AlignFrame frame)
- {
- final var calcName = service.getName();
- final var calcManager = frame.getViewport().getCalcManager();
- final var arguments = new ArrayList<ArgumentI>();
- final JCheckBoxMenuItem runItem;
- {
- // TODO use MessageManager and set tool tip text
- runItem = new JCheckBoxMenuItem(
- String.format("%s calculations", calcName));
- runItem.addActionListener((event) -> {
- calcManager.removeWorkersForName(calcName);
- var worker = createWorker(arguments, frame, calcManager);
- calcManager.registerWorker(worker);
- });
- parent.add(runItem);
- }
- JMenuItem _editItem = null;
- if (service.hasParameters())
- {
- // TODO use MessageManager and set tool tip text
- _editItem = new JMenuItem(
- String.format("Edit %s settings", calcName));
- _editItem.addActionListener((event) -> {
- openEditParamsDialog(service, null, null)
- .thenAcceptAsync((args) -> {
- if (arguments != null)
- {
- arguments.clear();
- arguments.addAll(args);
- calcManager.removeWorkersForName(calcName);
- var worker = createWorker(arguments, frame, calcManager);
- calcManager.registerWorker(worker);
- }
- });
- });
- parent.add(_editItem);
- }
- final var editItem = _editItem;
-
- parent.addMenuListener(new MenuListener()
- {
- @Override
- public void menuSelected(MenuEvent e)
- {
- var isNuc = frame.getViewport().getAlignment().isNucleotide();
- var menuEnabled = (isNuc && isNucleotideOperation()) ||
- (!isNuc && isProteinOperation());
- runItem.setEnabled(menuEnabled);
- if (editItem != null)
- editItem.setEnabled(menuEnabled);
- boolean currentlyRunning = calcManager.getWorkersForName(calcName).size() > 0;
- runItem.setSelected(currentlyRunning);
- }
-
- @Override
- public void menuDeselected(MenuEvent e) {}
-
- @Override
- public void menuCanceled(MenuEvent e) {}
- });
+ return new AnnotationMenuBuilder(this);
}
- private AnnotationServiceWorker createWorker(
- List<ArgumentI> arguments, AlignFrame frame, AlignCalcManagerI2 calcManager)
- {
- /* What is the purpose of AlignViewport and AlignmentViewPanel? */
- AlignViewport viewport = frame.getCurrentView();
- AlignmentViewPanel alignPanel = frame.alignPanel;
- return new AnnotationServiceWorker(this, service,
- arguments, viewport, alignPanel, frame, frame,
- calcManager);
- }
private CompletionStage<List<ArgumentI>> openEditParamsDialog(
WebServiceI service, WsParamSetI preset, List<ArgumentI> arguments)