1 package jalview.ws.jws2;
3 import jalview.api.AlignCalcManagerI2;
4 import jalview.api.AlignCalcWorkerI;
5 import jalview.bin.Cache;
6 import jalview.bin.Console;
7 import jalview.gui.AlignFrame;
8 import jalview.gui.JvSwingUtils;
9 import jalview.util.MessageManager;
10 import jalview.ws.api.ServiceWithParameters;
11 import jalview.ws.jws2.dm.AAConSettings;
12 import jalview.ws.jws2.jabaws2.Jws2Instance;
13 import jalview.ws.params.AutoCalcSetting;
14 import jalview.ws.uimodel.AlignAnalysisUIText;
16 import java.awt.event.ActionEvent;
17 import java.awt.event.ActionListener;
18 import java.util.List;
20 import javax.swing.JCheckBoxMenuItem;
21 import javax.swing.JMenu;
22 import javax.swing.JMenuItem;
23 import javax.swing.event.MenuEvent;
24 import javax.swing.event.MenuListener;
26 public class Jws2ClientFactory
28 static boolean registerAAConWSInstance(final JMenu wsmenu,
29 final ServiceWithParameters service, final AlignFrame alignFrame)
31 final AlignAnalysisUIText aaui = service.getAlignAnalysisUI(); // null
33 // AlignAnalysisUIText.aaConGUI.get(service.serviceType.toString());
36 // not an instantaneous calculation GUI type service
39 // create the instaneous calculation GUI bits and update state if existing
40 // GUI elements already present
42 JCheckBoxMenuItem _aaConEnabled = null;
43 for (int i = 0; i < wsmenu.getItemCount(); i++)
45 JMenuItem item = wsmenu.getItem(i);
46 if (item instanceof JCheckBoxMenuItem
47 && item.getText().equals(aaui.getAAconToggle()))
49 _aaConEnabled = (JCheckBoxMenuItem) item;
52 // is there an aaCon worker already present - if so, set it to use the
53 // given service handle
55 AlignCalcManagerI2 mger = alignFrame.getViewport()
59 List<AlignCalcWorkerI> aaconClient = mger
60 .getWorkersOfClass(aaui.getClient());
61 if (aaconClient != null && aaconClient.size() > 0)
63 SeqAnnotationServiceCalcWorker worker = (SeqAnnotationServiceCalcWorker) aaconClient
65 if (!worker.service.getHostURL().equals(service.getHostURL()))
67 // javax.swing.SwingUtilities.invokeLater(new Runnable()
72 removeCurrentAAConWorkerFor(aaui, alignFrame);
73 buildCurrentAAConWorkerFor(aaui, alignFrame, service);
81 // is there a service already registered ? there shouldn't be if we are
82 // being called correctly
83 if (_aaConEnabled == null)
85 final JCheckBoxMenuItem aaConEnabled = new JCheckBoxMenuItem(
86 aaui.getAAconToggle());
88 aaConEnabled.setToolTipText(
89 JvSwingUtils.wrapTooltip(true, aaui.getAAconToggleTooltip()));
90 aaConEnabled.addActionListener(new ActionListener()
93 public void actionPerformed(ActionEvent arg0)
96 List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
98 .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
99 if (aaconClient != null)
101 for (AlignCalcWorkerI worker : aaconClient)
103 if (((SeqAnnotationServiceCalcWorker) worker).getService()
104 .getClass().equals(aaui.getClient()))
106 removeCurrentAAConWorkerFor(aaui, alignFrame);
111 buildCurrentAAConWorkerFor(aaui, alignFrame);
115 wsmenu.add(aaConEnabled);
116 final JMenuItem modifyParams = new JMenuItem(
117 aaui.getAAeditSettings());
118 modifyParams.setToolTipText(JvSwingUtils.wrapTooltip(true,
119 aaui.getAAeditSettingsTooltip()));
120 modifyParams.addActionListener(new ActionListener()
124 public void actionPerformed(ActionEvent arg0)
126 showAAConAnnotationSettingsFor(aaui, alignFrame);
129 wsmenu.add(modifyParams);
130 wsmenu.addMenuListener(new MenuListener()
134 public void menuSelected(MenuEvent arg0)
136 // TODO: refactor to the implementing class.
137 if (alignFrame.getViewport().getAlignment().isNucleotide()
141 aaConEnabled.setEnabled(true);
142 modifyParams.setEnabled(true);
146 aaConEnabled.setEnabled(false);
147 modifyParams.setEnabled(false);
150 List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
152 .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
154 boolean serviceEnabled = false;
155 if (aaconClient != null)
157 // NB code duplicatino again!
158 for (AlignCalcWorkerI _worker : aaconClient)
160 SeqAnnotationServiceCalcWorker worker = (SeqAnnotationServiceCalcWorker) _worker;
161 // this could be cleaner ?
162 if (worker.hasService()
164 .equals(worker.getService().getClass()))
166 serviceEnabled = true;
170 aaConEnabled.setSelected(serviceEnabled);
174 public void menuDeselected(MenuEvent arg0)
176 // TODO Auto-generated method stub
181 public void menuCanceled(MenuEvent arg0)
183 // TODO Auto-generated method stub
192 private static void showAAConAnnotationSettingsFor(
193 final AlignAnalysisUIText aaui, AlignFrame alignFrame)
196 * preferred settings Whether AACon is automatically recalculated Which
197 * AACon server to use What parameters to use
199 // could actually do a class search for this too
200 AutoCalcSetting fave = alignFrame.getViewport()
201 .getCalcIdSettingsFor(aaui.getCalcId());
204 fave = createDefaultAAConSettings(aaui);
206 new SequenceAnnotationWSClient(fave, alignFrame, true);
210 private static void buildCurrentAAConWorkerFor(
211 final AlignAnalysisUIText aaui, AlignFrame alignFrame)
213 buildCurrentAAConWorkerFor(aaui, alignFrame, null);
216 private static void buildCurrentAAConWorkerFor(
217 final AlignAnalysisUIText aaui, AlignFrame alignFrame,
218 ServiceWithParameters service)
221 * preferred settings Whether AACon is automatically recalculated Which
222 * AACon server to use What parameters to use
224 AutoCalcSetting fave = alignFrame.getViewport()
225 .getCalcIdSettingsFor(aaui.getCalcId());
228 fave = createDefaultAAConSettings(aaui, service);
232 if (service != null && !fave.getService().getHostURL()
233 .equals(service.getHostURL()))
235 Console.debug("Changing AACon service to " + service.getHostURL()
236 + " from " + fave.getService().getHostURL());
237 fave.setService(service);
240 new SequenceAnnotationWSClient(fave, alignFrame, false);
243 private static AutoCalcSetting createDefaultAAConSettings(
244 AlignAnalysisUIText aaui)
246 return createDefaultAAConSettings(aaui, null);
249 private static AutoCalcSetting createDefaultAAConSettings(
250 AlignAnalysisUIText aaui, ServiceWithParameters service)
254 // if (!service.getServiceType()
255 // .equals(compbio.ws.client.Services.AAConWS.toString()))
258 // "Ignoring invalid preferred service for AACon calculations (service
260 // + service.getServiceType() + ")");
265 // check service is actually in the list of currently avaialable
267 if (!PreferredServiceRegistry.getRegistry().contains(service))
276 // get the default service for AACon
277 service = PreferredServiceRegistry.getRegistry().getPreferredServiceFor(null,
278 aaui.getServiceType());
282 // TODO raise dialog box explaining error, and/or open the JABA
285 MessageManager.getString("error.no_aacon_service_found"));
287 return service instanceof Jws2Instance
288 ? new AAConSettings(true, service, null, null)
289 : new AutoCalcSetting(service, null, null, true);
292 private static void removeCurrentAAConWorkerFor(AlignAnalysisUIText aaui,
293 AlignFrame alignFrame)
295 alignFrame.getViewport().getCalcManager()
296 .removeWorkersOfClass(aaui.getClient());