package jalview.ws2.operations; import java.util.ArrayList; import java.util.Collections; import java.util.List; 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.datamodel.AlignmentAnnotation; import jalview.gui.AlignFrame; import jalview.gui.AlignViewport; import jalview.gui.WsJobParameters; import jalview.io.FeaturesFile; 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; /** * * @author mmwarowny * */ public class AnnotationOperation implements Operation { final WebServiceI service; final String typeName; final ResultSupplier> annotationSupplier; final ResultSupplier featuresSupplier; boolean alignmentAnalysis = false; boolean interactive = false; /* * Is it fine to get rid of AlignAnalysisUIText? */ public AnnotationOperation(WebServiceI service, ResultSupplier> annotSupplier, ResultSupplier featSupplier, String operationName) { this.service = service; this.annotationSupplier = annotSupplier; this.featuresSupplier = featSupplier; this.typeName = operationName; } @Override public String getName() { return service.getName(); } @Override public String getDescription() { return service.getDescription(); } @Override public String getTypeName() { return typeName; } @Override public String getHostName() { return service.getHostName(); } @Override public boolean hasParameters() { return service.hasParameters(); } @Override public ParamDatastoreI getParamStore() { return service.getParamStore(); } @Override public int getMinSequences() { return 0; } @Override public int getMaxSequences() { return Integer.MAX_VALUE; } @Override public boolean canSubmitGaps() { return false; } @Override public boolean isProteinOperation() { return true; } @Override public boolean isNucleotideOperation() { return true; } @Override public boolean isInteractive() { return interactive; } public void setInteractive(boolean value) { this.interactive = value; } @Override public boolean isAlignmentAnalysis() { return alignmentAnalysis; } public void setAlignmentAnalysis(boolean value) { this.alignmentAnalysis = value; } @Override public boolean getFilterNonStandardSymbols() { return false; } @Override public boolean getNeedsAlignedSequences() { return false; } @Override public MenuEntryProviderI getMenuBuilder() { return new AnnotationMenuBuilder(this); } private CompletionStage> openEditParamsDialog( WebServiceI service, WsParamSetI preset, List 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; } }); } }