package jalview.ws2.operations;
-import java.io.IOException;
+import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
-import java.util.concurrent.CancellationException;
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.bin.Cache;
import jalview.datamodel.AlignmentAnnotation;
import jalview.gui.AlignFrame;
import jalview.gui.AlignViewport;
import jalview.gui.WsJobParameters;
-import jalview.io.AnnotationFile;
import jalview.io.FeaturesFile;
-import jalview.util.MathUtils;
+import jalview.util.Format;
import jalview.util.MessageManager;
-import jalview.workers.AlignCalcManager2;
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.WSJob;
-import jalview.ws2.WSJobStatus;
import jalview.ws2.PollingTaskExecutor;
import jalview.ws2.WebServiceI;
-import jalview.ws2.WebServiceWorkerI;
-import jalview.ws2.utils.WSJobList;
-
-import static java.lang.String.format;
+import jalview.ws2.gui.AnnotationMenuBuilder;
/**
- *
+ *
* @author mmwarowny
*
*/
final ResultSupplier<FeaturesFile> featuresSupplier;
+ boolean alignmentAnalysis = false;
+
+ boolean interactive = false;
+
+ private boolean isProtOperation = true;
+
+ private boolean isNucOperation = true;
+
+ /*
+ * Is it fine to get rid of AlignAnalysisUIText?
+ */
+
public AnnotationOperation(WebServiceI service,
ResultSupplier<List<AlignmentAnnotation>> annotSupplier,
ResultSupplier<FeaturesFile> featSupplier, String operationName)
}
@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
public boolean isInteractive()
{
- return false;
+ return interactive;
+ }
+
+ public void setInteractive(boolean value)
+ {
+ this.interactive = value;
}
@Override
public boolean isAlignmentAnalysis()
{
- return false;
+ return alignmentAnalysis;
+ }
+
+ public void setAlignmentAnalysis(boolean value)
+ {
+ this.alignmentAnalysis = value;
}
@Override
@Override
public MenuEntryProviderI getMenuBuilder()
{
- return this::buildMenu;
- }
-
- 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) -> {
- AlignViewport viewport = frame.getCurrentView();
- AlignmentViewPanel alignPanel = frame.alignPanel;
- var worker = new AnnotationServiceWorker(this, service,
- Collections.emptyList(), viewport, alignPanel, frame, frame,
- calcManager);
- calcManager.startWorker(worker);
- // TODO create and submit AnnotataionServiceWorker
- });
- 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);
- calcManager.startWorker(worker);
- }
- });
- });
- }
- }
-
- 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);
}
}