package jalview.ws2.operations;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletionStage;
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;
/**
*
boolean interactive = false;
+ private boolean isProtOperation = true;
+
+ private boolean isNucOperation = true;
+
/*
* Is it fine to get rid of AlignAnalysisUIText?
*/
}
@Override
+ public String getDescription()
+ {
+ return service.getDescription();
+ }
+
+ @Override
public String getTypeName()
{
return typeName;
}
@Override
+ public boolean hasParameters()
+ {
+ return service.hasParameters();
+ }
+
+ @Override
+ public ParamDatastoreI getParamStore()
+ {
+ return service.getParamStore();
+ }
+
+ @Override
public int getMinSequences()
{
return 0;
@Override
public boolean isProteinOperation()
{
- return true;
+ return isProtOperation;
+ }
+
+ public void setProteinOperation(boolean value)
+ {
+ isProtOperation = value;
}
@Override
public boolean isNucleotideOperation()
{
- return true;
+ return isNucOperation;
+ }
+
+ public void setNucleotideOperation(boolean value)
+ {
+ isNucOperation = value;
}
@Override
@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 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(Collections.emptyList(), 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((arguments) -> {
- if (arguments != null)
- {
- 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) {}
- });
- }
-
- 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)
- {
- WsJobParameters jobParams;
- if (preset == null && arguments != null && arguments.size() > 0)
- jobParams = new WsJobParameters(service.getParamStore(), preset,
- arguments);
- else
- jobParams = new WsJobParameters(service.getParamStore(), preset,
- null);
- if (preset != null)
- {
- jobParams.setName(MessageManager.getString(
- "label.adjusting_parameters_for_calculation"));
- }
- var stage = jobParams.showRunDialog();
- return stage.thenApply((startJob) -> {
- if (startJob)
- {
- if (jobParams.getPreset() == null)
- return jobParams.getJobParams();
- else
- return jobParams.getPreset().getArguments();
- }
- else
- {
- return null;
- }
- });
+ return new AnnotationMenuBuilder(this);
}
}