JAL-3878 Add jpred operation and worker to the services.
[jalview.git] / src / jalview / ws2 / operations / OperationStub.java
1 package jalview.ws2.operations;
2
3 import java.util.List;
4 import java.util.concurrent.CompletionStage;
5
6 import javax.swing.JMenu;
7 import javax.swing.JMenuItem;
8
9 import jalview.bin.Cache;
10 import jalview.gui.AlignFrame;
11 import jalview.gui.WsJobParameters;
12 import jalview.util.MessageManager;
13 import jalview.ws.params.ArgumentI;
14 import jalview.ws.params.ParamDatastoreI;
15 import jalview.ws.params.WsParamSetI;
16 import jalview.ws2.WebServiceI;
17 import jalview.ws2.gui.MenuEntryProviderI;
18
19 public class OperationStub extends AbstractOperation
20 {
21
22   public OperationStub(WebServiceI service, String typeName)
23   {
24     super(service, typeName);
25   }
26
27   @Override
28   public MenuEntryProviderI getMenuBuilder()
29   {
30     return this::buildMenu;
31   }
32
33   public void buildMenu(JMenu parent, AlignFrame frame)
34   {
35     {
36       var item = new JMenuItem(MessageManager.formatMessage(
37           "label.calcname_with_default_settings", getName()));
38       item.addActionListener((event) -> {
39         Cache.log.info(String.format("Starting service %s.", getName()));
40       });
41       parent.add(item);
42     }
43     if (hasParameters())
44     {
45       var item = new JMenuItem(
46           MessageManager.getString("label.edit_settings_and_run"));
47       item.setToolTipText(MessageManager.getString(
48           "label.view_and_change_parameters_before_running_calculation"));
49       item.addActionListener((event) -> {
50         openEditParamsDialog(getParamStore(), null, null)
51             .thenAcceptAsync((arguments) -> {
52               if (arguments != null)
53               {
54                 Cache.log.info(String.format("Starting service %s with custom parameters.", getName()));
55               }
56             });
57       });
58       parent.add(item);
59     }
60   }
61
62
63   private CompletionStage<List<ArgumentI>> openEditParamsDialog(
64           ParamDatastoreI paramStore, WsParamSetI preset,
65           List<ArgumentI> arguments)
66   {
67     WsJobParameters jobParams;
68     if (preset == null && arguments != null && arguments.size() > 0)
69       jobParams = new WsJobParameters(paramStore, preset, arguments);
70     else
71       jobParams = new WsJobParameters(paramStore, preset, null);
72     if (preset != null)
73     {
74       jobParams.setName(MessageManager.getString(
75           "label.adjusting_parameters_for_calculation"));
76     }
77     var stage = jobParams.showRunDialog();
78     return stage.thenApply((startJob) -> {
79       if (startJob)
80       {
81         if (jobParams.getPreset() == null)
82         {
83           return jobParams.getJobParams();
84         }
85         else
86         {
87           return jobParams.getPreset().getArguments();
88         }
89       }
90       else
91       {
92         return null;
93       }
94     });
95   }
96   
97 }