c1d2c7e2f9be7c7f4e9c2c03c7c2d1ce95f27bfc
[jalview.git] / src / jalview / ws2 / operations / AnnotationOperation.java
1 package jalview.ws2.operations;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6 import java.util.concurrent.CompletionStage;
7
8 import javax.swing.JCheckBoxMenuItem;
9 import javax.swing.JMenu;
10 import javax.swing.JMenuItem;
11 import javax.swing.event.MenuEvent;
12 import javax.swing.event.MenuListener;
13
14 import jalview.api.AlignCalcManagerI2;
15 import jalview.api.AlignmentViewPanel;
16 import jalview.datamodel.AlignmentAnnotation;
17 import jalview.gui.AlignFrame;
18 import jalview.gui.AlignViewport;
19 import jalview.gui.WsJobParameters;
20 import jalview.io.FeaturesFile;
21 import jalview.util.Format;
22 import jalview.util.MessageManager;
23 import jalview.ws.params.ArgumentI;
24 import jalview.ws.params.ParamDatastoreI;
25 import jalview.ws.params.WsParamSetI;
26 import jalview.ws2.MenuEntryProviderI;
27 import jalview.ws2.ResultSupplier;
28 import jalview.ws2.PollingTaskExecutor;
29 import jalview.ws2.WebServiceI;
30 import jalview.ws2.gui.AnnotationMenuBuilder;
31
32 /**
33  *
34  * @author mmwarowny
35  *
36  */
37 public class AnnotationOperation implements Operation
38 {
39   final WebServiceI service;
40
41   final String typeName;
42
43   final ResultSupplier<List<AlignmentAnnotation>> annotationSupplier;
44
45   final ResultSupplier<FeaturesFile> featuresSupplier;
46
47   boolean alignmentAnalysis = false;
48
49   boolean interactive = false;
50
51   /*
52    * Is it fine to get rid of AlignAnalysisUIText?
53    */
54
55   public AnnotationOperation(WebServiceI service,
56       ResultSupplier<List<AlignmentAnnotation>> annotSupplier,
57       ResultSupplier<FeaturesFile> featSupplier, String operationName)
58   {
59     this.service = service;
60     this.annotationSupplier = annotSupplier;
61     this.featuresSupplier = featSupplier;
62     this.typeName = operationName;
63   }
64
65   @Override
66   public String getName()
67   {
68     return service.getName();
69   }
70   
71   @Override
72   public String getDescription()
73   {
74     return service.getDescription();
75   }
76
77   @Override
78   public String getTypeName()
79   {
80     return typeName;
81   }
82
83   @Override
84   public String getHostName()
85   {
86     return service.getHostName();
87   }
88   
89   @Override
90   public boolean hasParameters()
91   {
92     return service.hasParameters();
93   }
94   
95   @Override
96   public ParamDatastoreI getParamStore()
97   {
98     return service.getParamStore();
99   }
100
101   @Override
102   public int getMinSequences()
103   {
104     return 0;
105   }
106
107   @Override
108   public int getMaxSequences()
109   {
110     return Integer.MAX_VALUE;
111   }
112
113   @Override
114   public boolean canSubmitGaps()
115   {
116     return false;
117   }
118
119   @Override
120   public boolean isProteinOperation()
121   {
122     return true;
123   }
124
125   @Override
126   public boolean isNucleotideOperation()
127   {
128     return true;
129   }
130
131   @Override
132   public boolean isInteractive()
133   {
134     return interactive;
135   }
136
137   public void setInteractive(boolean value)
138   {
139     this.interactive = value;
140   }
141
142   @Override
143   public boolean isAlignmentAnalysis()
144   {
145     return alignmentAnalysis;
146   }
147
148   public void setAlignmentAnalysis(boolean value)
149   {
150     this.alignmentAnalysis = value;
151   }
152
153   @Override
154   public boolean getFilterNonStandardSymbols()
155   {
156     return false;
157   }
158
159   @Override
160   public boolean getNeedsAlignedSequences()
161   {
162     return false;
163   }
164
165   @Override
166   public MenuEntryProviderI getMenuBuilder()
167   {
168     return new AnnotationMenuBuilder(this);
169   }
170
171
172   private CompletionStage<List<ArgumentI>> openEditParamsDialog(
173       WebServiceI service, WsParamSetI preset, List<ArgumentI> arguments)
174   {
175     WsJobParameters jobParams;
176     if (preset == null && arguments != null && arguments.size() > 0)
177       jobParams = new WsJobParameters(service.getParamStore(), preset,
178           arguments);
179     else
180       jobParams = new WsJobParameters(service.getParamStore(), preset,
181           null);
182     if (preset != null)
183     {
184       jobParams.setName(MessageManager.getString(
185           "label.adjusting_parameters_for_calculation"));
186     }
187     var stage = jobParams.showRunDialog();
188     return stage.thenApply((startJob) -> {
189       if (startJob)
190       {
191         if (jobParams.getPreset() == null)
192           return jobParams.getJobParams();
193         else
194           return jobParams.getPreset().getArguments();
195       }
196       else
197       {
198         return null;
199       }
200     });
201   }
202
203 }