1 package jalview.ws.jws2;
3 import jalview.api.AlignCalcWorkerI;
4 import jalview.bin.Cache;
5 import jalview.gui.AlignFrame;
6 import jalview.gui.JvSwingUtils;
7 import jalview.util.MessageManager;
8 import jalview.ws.api.ServiceWithParameters;
9 import jalview.ws.jws2.dm.AAConSettings;
10 import jalview.ws.params.AutoCalcSetting;
11 import jalview.ws.uimodel.AlignAnalysisUIText;
13 import java.awt.event.ActionEvent;
14 import java.awt.event.ActionListener;
15 import java.util.List;
17 import javax.swing.JCheckBoxMenuItem;
18 import javax.swing.JMenu;
19 import javax.swing.JMenuItem;
20 import javax.swing.event.MenuEvent;
21 import javax.swing.event.MenuListener;
23 public class Jws2ClientFactory
25 static boolean registerAAConWSInstance(final JMenu wsmenu,
26 final ServiceWithParameters service, final AlignFrame alignFrame)
28 final AlignAnalysisUIText aaui = service.getAlignAnalysisUI(); // null
30 // AlignAnalysisUIText.aaConGUI.get(service.serviceType.toString());
33 // not an instantaneous calculation GUI type service
36 // create the instaneous calculation GUI bits and update state if existing
37 // GUI elements already present
39 JCheckBoxMenuItem _aaConEnabled = null;
40 for (int i = 0; i < wsmenu.getItemCount(); i++)
42 JMenuItem item = wsmenu.getItem(i);
43 if (item instanceof JCheckBoxMenuItem
44 && item.getText().equals(aaui.getAAconToggle()))
46 _aaConEnabled = (JCheckBoxMenuItem) item;
49 // is there an aaCon worker already present - if so, set it to use the
50 // given service handle
52 List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
54 .getRegisteredWorkersOfClass(aaui.getClient());
55 if (aaconClient != null && aaconClient.size() > 0)
57 SeqAnnotationServiceCalcWorker worker = (SeqAnnotationServiceCalcWorker) aaconClient
59 if (!worker.service.getHostURL().equals(service.getHostURL()))
61 // javax.swing.SwingUtilities.invokeLater(new Runnable()
66 removeCurrentAAConWorkerFor(aaui, alignFrame);
67 buildCurrentAAConWorkerFor(aaui, alignFrame, service);
74 // is there a service already registered ? there shouldn't be if we are
75 // being called correctly
76 if (_aaConEnabled == null)
78 final JCheckBoxMenuItem aaConEnabled = new JCheckBoxMenuItem(
79 aaui.getAAconToggle());
81 aaConEnabled.setToolTipText(
82 JvSwingUtils.wrapTooltip(true, aaui.getAAconToggleTooltip()));
83 aaConEnabled.addActionListener(new ActionListener()
86 public void actionPerformed(ActionEvent arg0)
88 List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
90 .getRegisteredWorkersOfClass(aaui.getClient());
91 if (aaconClient != null && aaconClient.size() > 0)
93 removeCurrentAAConWorkerFor(aaui, alignFrame);
97 buildCurrentAAConWorkerFor(aaui, alignFrame);
103 wsmenu.add(aaConEnabled);
104 final JMenuItem modifyParams = new JMenuItem(
105 aaui.getAAeditSettings());
106 modifyParams.setToolTipText(JvSwingUtils.wrapTooltip(true,
107 aaui.getAAeditSettingsTooltip()));
108 modifyParams.addActionListener(new ActionListener()
112 public void actionPerformed(ActionEvent arg0)
114 showAAConAnnotationSettingsFor(aaui, alignFrame);
117 wsmenu.add(modifyParams);
118 wsmenu.addMenuListener(new MenuListener()
122 public void menuSelected(MenuEvent arg0)
124 // TODO: refactor to the implementing class.
125 if (alignFrame.getViewport().getAlignment().isNucleotide()
129 aaConEnabled.setEnabled(true);
130 modifyParams.setEnabled(true);
134 aaConEnabled.setEnabled(false);
135 modifyParams.setEnabled(false);
138 List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
139 .getCalcManager().getRegisteredWorkersOfClass(
140 SeqAnnotationServiceCalcWorker.class);
142 boolean serviceEnabled = false;
143 if (aaconClient != null)
145 for (AlignCalcWorkerI _worker : aaconClient)
147 SeqAnnotationServiceCalcWorker worker = (SeqAnnotationServiceCalcWorker) _worker;
148 // this could be cleaner ?
149 if (worker.hasService()
151 .equals(worker.getService().getClass()))
153 serviceEnabled = true;
157 aaConEnabled.setSelected(serviceEnabled);
161 public void menuDeselected(MenuEvent arg0)
163 // TODO Auto-generated method stub
168 public void menuCanceled(MenuEvent arg0)
170 // TODO Auto-generated method stub
179 private static void showAAConAnnotationSettingsFor(
180 final AlignAnalysisUIText aaui, AlignFrame alignFrame)
183 * preferred settings Whether AACon is automatically recalculated Which
184 * AACon server to use What parameters to use
186 // could actually do a class search for this too
187 AutoCalcSetting fave = alignFrame.getViewport()
188 .getCalcIdSettingsFor(aaui.getCalcId());
191 fave = createDefaultAAConSettings(aaui);
193 new SequenceAnnotationWSClient(fave, alignFrame, true);
197 private static void buildCurrentAAConWorkerFor(
198 final AlignAnalysisUIText aaui, AlignFrame alignFrame)
200 buildCurrentAAConWorkerFor(aaui, alignFrame, null);
203 private static void buildCurrentAAConWorkerFor(
204 final AlignAnalysisUIText aaui, AlignFrame alignFrame,
205 ServiceWithParameters service)
208 * preferred settings Whether AACon is automatically recalculated Which
209 * AACon server to use What parameters to use
211 AutoCalcSetting fave = alignFrame.getViewport()
212 .getCalcIdSettingsFor(aaui.getCalcId());
215 fave = createDefaultAAConSettings(aaui, service);
219 if (service != null && !fave.getService().getHostURL()
220 .equals(service.getHostURL()))
222 Cache.log.debug("Changing AACon service to " + service.getHostURL()
223 + " from " + fave.getService().getHostURL());
224 fave.setService(service);
227 new SequenceAnnotationWSClient(fave, alignFrame, false);
230 private static AutoCalcSetting createDefaultAAConSettings(
231 AlignAnalysisUIText aaui)
233 return createDefaultAAConSettings(aaui, null);
236 private static AutoCalcSetting createDefaultAAConSettings(
237 AlignAnalysisUIText aaui, ServiceWithParameters service)
241 if (!service.getServiceType()
242 .equals(compbio.ws.client.Services.AAConWS.toString()))
245 "Ignoring invalid preferred service for AACon calculations (service type was "
246 + service.getServiceType() + ")");
251 // check service is actually in the list of currently avaialable
253 if (!Jws2Discoverer.getDiscoverer().getServices().contains(service))
262 // get the default service for AACon
263 service = Jws2Discoverer.getDiscoverer().getPreferredServiceFor(null,
264 aaui.getServiceType());
268 // TODO raise dialog box explaining error, and/or open the JABA
271 MessageManager.getString("error.no_aacon_service_found"));
273 return new AAConSettings(true, service, null, null);
276 private static void removeCurrentAAConWorkerFor(AlignAnalysisUIText aaui,
277 AlignFrame alignFrame)
279 alignFrame.getViewport().getCalcManager()
280 .removeRegisteredWorkersOfClass(aaui.getClient());