(JAL-974,JAL-975) new handler for JABAWS sequence and alignment annotation services
[jalview.git] / src / jalview / ws / jws2 / SequenceAnnotationWSClient.java
1 /**
2  * 
3  */
4 package jalview.ws.jws2;
5
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
8 import java.util.List;
9
10 import javax.swing.JMenu;
11 import javax.swing.JMenuItem;
12
13 import compbio.metadata.Argument;
14
15 import jalview.api.AlignCalcWorkerI;
16 import jalview.datamodel.AlignmentView;
17 import jalview.gui.AlignFrame;
18 import jalview.gui.JvSwingUtils;
19 import jalview.ws.jws2.jabaws2.Jws2Instance;
20 import jalview.ws.params.WsParamSetI;
21
22 /**
23  * @author jimp
24  * 
25  */
26 public class SequenceAnnotationWSClient extends Jws2Client
27 {
28
29   /**
30    * initialise a client so its attachWSMenuEntry method can be called.
31    */
32   public SequenceAnnotationWSClient()
33   {
34     // TODO Auto-generated constructor stub
35   }
36
37   public SequenceAnnotationWSClient(final Jws2Instance sh,
38           AlignFrame alignFrame, WsParamSetI preset, boolean editParams)
39   {
40     super(alignFrame, preset, null);
41     List<AlignCalcWorkerI> clnts = alignFrame.getViewport()
42             .getCalcManager()
43             .getRegisteredWorkersOfClass(AAConsClient.class);
44     if (clnts == null || clnts.size() == 0)
45     {
46       if (!processParams(sh, editParams))
47       {
48         return;
49       }
50       alignFrame
51               .getViewport()
52               .getCalcManager()
53               .registerWorker(
54                       new AAConsClient(sh, alignFrame, preset, paramset));
55     }
56     else
57     {
58       AAConsClient worker = (AAConsClient) clnts.get(0);
59       if (editParams)
60       {
61         paramset = worker.getArguments();
62         preset = worker.getPreset();
63       }
64
65       if (!processParams(sh, editParams, true))
66         return;
67       // reinstate worker if it was blacklisted (might have happened due to invalid parameters)
68       alignFrame.getViewport().getCalcManager().workerMayRun(worker);
69       worker.updateParameters(preset, paramset);
70
71     }
72   }
73
74   /*
75    * (non-Javadoc)
76    * 
77    * @see jalview.ws.jws2.Jws2Client#attachWSMenuEntry(javax.swing.JMenu,
78    * jalview.ws.jws2.jabaws2.Jws2Instance, jalview.gui.AlignFrame)
79    */
80   public void attachWSMenuEntry(JMenu wsmenu, final Jws2Instance service,
81           final AlignFrame alignFrame)
82   {
83     if (service.serviceType.toLowerCase().contains("aaconws"))
84     {
85       boolean hasparams = service.hasParameters();
86       String calcName = "AACons";
87       System.out.println("Making an aacons client!");
88       JMenuItem aacons = new JMenuItem("AACons Defaults");
89       aacons.addActionListener(new ActionListener()
90       {
91
92         @Override
93         public void actionPerformed(ActionEvent e)
94         {
95           new SequenceAnnotationWSClient(service, alignFrame, null, false);
96         }
97       });
98       wsmenu.add(aacons);
99       if (hasparams)
100       {
101         // only add these menu options if the service has user-modifiable
102         // arguments
103         aacons = new JMenuItem("Edit settings and run ...");
104         aacons.setToolTipText("View and change the parameters before alignment.");
105
106         aacons.addActionListener(new ActionListener()
107         {
108           public void actionPerformed(ActionEvent e)
109           {
110             new SequenceAnnotationWSClient(service, alignFrame, null, true);
111           }
112         });
113         wsmenu.add(aacons);
114         List<WsParamSetI> presets = service.getParamStore().getPresets();
115         if (presets != null && presets.size() > 0)
116         {
117           JMenu presetlist = new JMenu("Run " + calcName + "with preset");
118
119           for (final WsParamSetI preset : presets)
120           {
121             final JMenuItem methodR = new JMenuItem(preset.getName());
122             methodR.setToolTipText("<html><p>"
123                     + JvSwingUtils.wrapTooltip("<strong>"
124                             + (preset.isModifiable() ? "User Preset"
125                                     : "Service Preset") + "</strong><br/>"
126                             + preset.getDescription() + "</p>") + "</html>");
127             methodR.addActionListener(new ActionListener()
128             {
129               public void actionPerformed(ActionEvent e)
130               {
131                 new SequenceAnnotationWSClient(service, alignFrame, preset,
132                         false);
133               }
134
135             });
136             presetlist.add(methodR);
137           }
138           wsmenu.add(presetlist);
139         }
140       }
141
142     }
143   }
144 }