-package jalview.ws2;
-
-import java.util.List;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.Collections;
-
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.ToolTipManager;
-
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.AlignmentView;
-import jalview.datamodel.SequenceI;
-import jalview.gui.AlignFrame;
-import jalview.gui.JvSwingUtils;
-import jalview.gui.WsJobParameters;
-import jalview.util.MathUtils;
-import jalview.util.MessageManager;
-import jalview.ws.params.ArgumentI;
-import jalview.ws.params.WsParamSetI;
-import static java.lang.String.format;
-
-
-class MsaWSWorker implements WebServiceWorkerI
-{
- private long uid = MathUtils.getUID();
-
- JalviewWebServiceI<List<SequenceI>> service;
-
- private final AlignmentView msa;
-
- private final AlignmentI seqdataset;
-
- private boolean submitGaps = false;
-
- private boolean preserveOrder = false;
-
- private List<ArgumentI> parameters = Collections.emptyList();
-
- MsaWSWorker(JalviewWebServiceI<List<SequenceI>> service, AlignmentView msa,
- boolean submitGaps, boolean preserveOrder, AlignmentI seqdataset)
- {
- this.service = service;
- this.msa = msa;
- this.seqdataset = seqdataset;
- this.submitGaps = submitGaps;
- this.preserveOrder = preserveOrder;
- }
-
- @Override public long getUID() {
- return uid;
- };
-
- void setParameters(List<ArgumentI> parameters)
- {
- this.parameters = parameters;
- }
-
- @Override
- public WSJobID startJob(WSJob job) {
- return new WSJobID(service.getName(), service.getClass().toString(), "0");
- }
-
- @Override
- public List<WSJob> getJobs() {
- return Collections.emptyList();
- }
-
- @Override
- public boolean pollJob(WSJob job) {
- return false;
- }
-
-}
-
-public class MsaMenuEntryProvider implements MenuEntryProviderI
-{
- WebServiceExecutor executor;
-
- public MsaMenuEntryProvider(WebServiceExecutor executor)
- {
- this.executor = executor;
- }
-
- @Override
- public void buildMenu(JMenu parent, JalviewWebServiceI service, AlignFrame frame)
- {
- if (service.canSubmitGaps())
- {
- var alignSubmenu = new JMenu(service.getName());
- buildMenu(alignSubmenu, service, frame, false);
- parent.add(alignSubmenu);
- var realignSubmenu = new JMenu(MessageManager.formatMessage(
- "label.realign_with_params", service.getName()));
- realignSubmenu.setToolTipText(MessageManager
- .getString("label.align_sequences_to_existing_alignment"));
- buildMenu(realignSubmenu, service, frame, true);
- parent.add(realignSubmenu);
- }
- else
- {
- buildMenu(parent, service, frame, false);
- }
- }
-
- private void buildMenu(JMenu parent, JalviewWebServiceI<List<SequenceI>> service,
- AlignFrame frame, boolean submitGaps)
- {
- final String action = submitGaps ? "Align" : "Realign";
- final var calcName = service.getName();
-
- {
- var item = new JMenuItem(MessageManager.formatMessage(
- "label.calcname_with_default_settings", calcName));
- item.setToolTipText(MessageManager.formatMessage(
- "label.action_with_default_settings", action));
- item.addActionListener((event) -> {
- AlignmentView msa = frame.gatherSequencesForAlignment();
- AlignmentI dataset = frame.getViewport().getAlignment().getDataset();
- if (msa != null)
- {
- executor.submit(new MsaWSWorker(service, msa, submitGaps, true, dataset));
- }
- });
- 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_alignment"));
- item.addActionListener((event) -> {
- AlignmentView msa = frame.gatherSequencesForAlignment();
- AlignmentI dataset = frame.getViewport().getAlignment().getDataset();
- if (msa != null)
- {
- var parameters = openEditParamsDialog(service, null, null);
- if (parameters != null)
- {
- var thread = new MsaWSWorker(service, msa, submitGaps, true, dataset);
- thread.setParameters(parameters);
- executor.submit(thread);
- }
- }
- });
- parent.add(item);
- }
-
- var presets = service.getParamStore().getPresets();
- if (presets != null && presets.size() > 0)
- {
- final var presetList = new JMenu(MessageManager.formatMessage(
- "label.run_with_preset_params", calcName));
- final var showToolTipFor = ToolTipManager.sharedInstance().getDismissDelay();
- for (final var preset : presets)
- {
- var item = new JMenuItem(preset.getName());
- final int QUICK_TOOLTIP = 1500;
- item.addMouseListener(new MouseAdapter()
- {
- @Override public void mouseEntered(MouseEvent e)
- {
- ToolTipManager.sharedInstance().setDismissDelay(QUICK_TOOLTIP);
- }
- @Override public void mouseExited(MouseEvent e)
- {
- ToolTipManager.sharedInstance().setDismissDelay(showToolTipFor);
- }
- });
- String tooltip = JvSwingUtils.wrapTooltip(true, format(
- "<strong>%s</strong><br/>%s",
- MessageManager.getString(preset.isModifiable() ?
- "label.user_preset" : "label.service_preset"),
- preset.getDescription()));
- item.setToolTipText(tooltip);
- item.addActionListener((event) -> {
- AlignmentView msa = frame.gatherSequencesForAlignment();
- AlignmentI dataset = frame.getViewport().getAlignment().getDataset();
- if (msa != null)
- {
- var thread = new MsaWSWorker(service, msa, submitGaps, true, dataset);
- thread.setParameters(preset.getArguments());
- executor.submit(thread);
- }
- });
- presetList.add(item);
- }
- parent.add(presetList);
- }
-
- }
-
- private List<ArgumentI> openEditParamsDialog(JalviewWebServiceI 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 (!jobParams.showRunDialog())
- // cancelled
- return null;
- if (jobParams.getPreset() == null)
- return jobParams.getJobParams();
- else
- return jobParams.getPreset().getArguments();
- }
-}