1 package jalview.ws2.operations;
3 import java.util.Collections;
5 import java.util.concurrent.CompletionStage;
7 import javax.swing.JMenu;
8 import javax.swing.JMenuItem;
10 import jalview.api.AlignmentViewPanel;
11 import jalview.datamodel.AlignmentAnnotation;
12 import jalview.gui.AlignFrame;
13 import jalview.gui.AlignViewport;
14 import jalview.gui.WsJobParameters;
15 import jalview.io.FeaturesFile;
16 import jalview.util.MessageManager;
17 import jalview.ws.params.ArgumentI;
18 import jalview.ws.params.WsParamSetI;
19 import jalview.ws2.MenuEntryProviderI;
20 import jalview.ws2.ResultSupplier;
21 import jalview.ws2.PollingTaskExecutor;
22 import jalview.ws2.WebServiceI;
29 public class AnnotationOperation implements Operation
31 final WebServiceI service;
33 final String typeName;
35 final ResultSupplier<List<AlignmentAnnotation>> annotationSupplier;
37 final ResultSupplier<FeaturesFile> featuresSupplier;
39 boolean alignmentAnalysis = false;
41 boolean interactive = false;
43 public AnnotationOperation(WebServiceI service,
44 ResultSupplier<List<AlignmentAnnotation>> annotSupplier,
45 ResultSupplier<FeaturesFile> featSupplier, String operationName)
47 this.service = service;
48 this.annotationSupplier = annotSupplier;
49 this.featuresSupplier = featSupplier;
50 this.typeName = operationName;
54 public String getName()
56 return service.getName();
60 public String getTypeName()
66 public String getHostName()
68 return service.getHostName();
72 public int getMinSequences()
78 public int getMaxSequences()
80 return Integer.MAX_VALUE;
84 public boolean canSubmitGaps()
90 public boolean isProteinOperation()
96 public boolean isNucleotideOperation()
102 public boolean isInteractive()
107 public void setInteractive(boolean value)
109 this.interactive = value;
113 public boolean isAlignmentAnalysis()
115 return alignmentAnalysis;
118 public void setAlignmentAnalysis(boolean value)
120 this.alignmentAnalysis = value;
124 public boolean getFilterNonStandardSymbols()
130 public boolean getNeedsAlignedSequences()
136 public MenuEntryProviderI getMenuBuilder()
138 return this::buildMenu;
141 protected void buildMenu(JMenu parent, AlignFrame frame)
143 final var calcName = service.getName();
144 PollingTaskExecutor wsExecutor = frame.getViewport().getWSExecutor();
145 final var calcManager = frame.getViewport().getCalcManager();
147 var item = new JMenuItem(MessageManager.formatMessage(
148 "label.calcname_with_default_settings", calcName));
149 item.addActionListener((event) -> {
150 AlignViewport viewport = frame.getCurrentView();
151 AlignmentViewPanel alignPanel = frame.alignPanel;
152 var worker = new AnnotationServiceWorker(this, service,
153 Collections.emptyList(), viewport, alignPanel, frame, frame,
156 calcManager.registerWorker(worker);
158 calcManager.startWorker(worker);
162 if (service.hasParameters())
164 var item = new JMenuItem(
165 MessageManager.getString("label.edit_settings_and_run"));
166 item.setToolTipText(MessageManager.getString(
167 "label.view_and_change_parameters_before_running_calculation"));
168 item.addActionListener((event) -> {
169 openEditParamsDialog(service, null, null)
170 .thenAcceptAsync((arguments) -> {
171 if (arguments != null)
173 AlignViewport viewport = frame.getCurrentView();
174 AlignmentViewPanel alignPanel = frame.alignPanel;
175 var worker = new AnnotationServiceWorker(
176 AnnotationOperation.this, service, arguments, viewport,
177 alignPanel, frame, frame, calcManager);
179 calcManager.registerWorker(worker);
181 calcManager.startWorker(worker);
189 private CompletionStage<List<ArgumentI>> openEditParamsDialog(
190 WebServiceI service, WsParamSetI preset, List<ArgumentI> arguments)
192 WsJobParameters jobParams;
193 if (preset == null && arguments != null && arguments.size() > 0)
194 jobParams = new WsJobParameters(service.getParamStore(), preset,
197 jobParams = new WsJobParameters(service.getParamStore(), preset,
201 jobParams.setName(MessageManager.getString(
202 "label.adjusting_parameters_for_calculation"));
204 var stage = jobParams.showRunDialog();
205 return stage.thenApply((startJob) -> {
208 if (jobParams.getPreset() == null)
209 return jobParams.getJobParams();
211 return jobParams.getPreset().getArguments();