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.jws2.jabaws2.Jws2Instance;
11 import jalview.ws.params.AutoCalcSetting;
12 import jalview.ws.uimodel.AlignAnalysisUIText;
14 import java.awt.event.ActionEvent;
15 import java.awt.event.ActionListener;
16 import java.util.List;
18 import javax.swing.JCheckBoxMenuItem;
19 import javax.swing.JMenu;
20 import javax.swing.JMenuItem;
21 import javax.swing.event.MenuEvent;
22 import javax.swing.event.MenuListener;
24 public class Jws2ClientFactory
26 static boolean registerAAConWSInstance(final JMenu wsmenu,
27 final ServiceWithParameters service, final AlignFrame alignFrame)
29 final AlignAnalysisUIText aaui = service.getAlignAnalysisUI(); // null
31 // AlignAnalysisUIText.aaConGUI.get(service.serviceType.toString());
34 // not an instantaneous calculation GUI type service
37 // create the instaneous calculation GUI bits and update state if existing
38 // GUI elements already present
40 JCheckBoxMenuItem _aaConEnabled = null;
41 for (int i = 0; i < wsmenu.getItemCount(); i++)
43 JMenuItem item = wsmenu.getItem(i);
44 if (item instanceof JCheckBoxMenuItem
45 && item.getText().equals(aaui.getAAconToggle()))
47 _aaConEnabled = (JCheckBoxMenuItem) item;
50 // is there an aaCon worker already present - if so, set it to use the
51 // given service handle
53 List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
55 .getWorkersOfClass(aaui.getClient());
56 if (aaconClient != null && aaconClient.size() > 0)
58 SeqAnnotationServiceCalcWorker worker = (SeqAnnotationServiceCalcWorker) aaconClient
60 if (!worker.service.getHostURL().equals(service.getHostURL()))
62 // javax.swing.SwingUtilities.invokeLater(new Runnable()
67 removeCurrentAAConWorkerFor(aaui, alignFrame);
68 buildCurrentAAConWorkerFor(aaui, alignFrame, service);
75 // is there a service already registered ? there shouldn't be if we are
76 // being called correctly
77 if (_aaConEnabled == null)
79 final JCheckBoxMenuItem aaConEnabled = new JCheckBoxMenuItem(
80 aaui.getAAconToggle());
82 aaConEnabled.setToolTipText(
83 JvSwingUtils.wrapTooltip(true, aaui.getAAconToggleTooltip()));
84 aaConEnabled.addActionListener(new ActionListener()
87 public void actionPerformed(ActionEvent arg0)
90 List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
92 .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
93 if (aaconClient != null)
95 for (AlignCalcWorkerI worker : aaconClient)
97 if (((SeqAnnotationServiceCalcWorker) worker).getService()
98 .getClass().equals(aaui.getClient()))
100 removeCurrentAAConWorkerFor(aaui, alignFrame);
105 buildCurrentAAConWorkerFor(aaui, alignFrame);
109 wsmenu.add(aaConEnabled);
110 final JMenuItem modifyParams = new JMenuItem(
111 aaui.getAAeditSettings());
112 modifyParams.setToolTipText(JvSwingUtils.wrapTooltip(true,
113 aaui.getAAeditSettingsTooltip()));
114 modifyParams.addActionListener(new ActionListener()
118 public void actionPerformed(ActionEvent arg0)
120 showAAConAnnotationSettingsFor(aaui, alignFrame);
123 wsmenu.add(modifyParams);
124 wsmenu.addMenuListener(new MenuListener()
128 public void menuSelected(MenuEvent arg0)
130 // TODO: refactor to the implementing class.
131 if (alignFrame.getViewport().getAlignment().isNucleotide()
135 aaConEnabled.setEnabled(true);
136 modifyParams.setEnabled(true);
140 aaConEnabled.setEnabled(false);
141 modifyParams.setEnabled(false);
144 List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
146 .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
148 boolean serviceEnabled = false;
149 if (aaconClient != null)
151 // NB code duplicatino again!
152 for (AlignCalcWorkerI _worker : aaconClient)
154 SeqAnnotationServiceCalcWorker worker = (SeqAnnotationServiceCalcWorker) _worker;
155 // this could be cleaner ?
156 if (worker.hasService()
158 .equals(worker.getService().getClass()))
160 serviceEnabled = true;
164 aaConEnabled.setSelected(serviceEnabled);
168 public void menuDeselected(MenuEvent arg0)
170 // TODO Auto-generated method stub
175 public void menuCanceled(MenuEvent arg0)
177 // TODO Auto-generated method stub
186 private static void showAAConAnnotationSettingsFor(
187 final AlignAnalysisUIText aaui, AlignFrame alignFrame)
190 * preferred settings Whether AACon is automatically recalculated Which
191 * AACon server to use What parameters to use
193 // could actually do a class search for this too
194 AutoCalcSetting fave = alignFrame.getViewport()
195 .getCalcIdSettingsFor(aaui.getCalcId());
198 fave = createDefaultAAConSettings(aaui);
200 new SequenceAnnotationWSClient(fave, alignFrame, true);
204 private static void buildCurrentAAConWorkerFor(
205 final AlignAnalysisUIText aaui, AlignFrame alignFrame)
207 buildCurrentAAConWorkerFor(aaui, alignFrame, null);
210 private static void buildCurrentAAConWorkerFor(
211 final AlignAnalysisUIText aaui, AlignFrame alignFrame,
212 ServiceWithParameters service)
215 * preferred settings Whether AACon is automatically recalculated Which
216 * AACon server to use What parameters to use
218 AutoCalcSetting fave = alignFrame.getViewport()
219 .getCalcIdSettingsFor(aaui.getCalcId());
222 fave = createDefaultAAConSettings(aaui, service);
226 if (service != null && !fave.getService().getHostURL()
227 .equals(service.getHostURL()))
229 Cache.log.debug("Changing AACon service to " + service.getHostURL()
230 + " from " + fave.getService().getHostURL());
231 fave.setService(service);
234 new SequenceAnnotationWSClient(fave, alignFrame, false);
237 private static AutoCalcSetting createDefaultAAConSettings(
238 AlignAnalysisUIText aaui)
240 return createDefaultAAConSettings(aaui, null);
243 private static AutoCalcSetting createDefaultAAConSettings(
244 AlignAnalysisUIText aaui, ServiceWithParameters service)
248 // if (!service.getServiceType()
249 // .equals(compbio.ws.client.Services.AAConWS.toString()))
252 // "Ignoring invalid preferred service for AACon calculations (service
254 // + service.getServiceType() + ")");
259 // check service is actually in the list of currently avaialable
261 if (!PreferredServiceRegistry.getRegistry().contains(service))
270 // get the default service for AACon
271 service = PreferredServiceRegistry.getRegistry().getPreferredServiceFor(null,
272 aaui.getServiceType());
276 // TODO raise dialog box explaining error, and/or open the JABA
279 MessageManager.getString("error.no_aacon_service_found"));
281 return service instanceof Jws2Instance
282 ? new AAConSettings(true, service, null, null)
283 : new AutoCalcSetting(service, null, null, true);
286 private static void removeCurrentAAConWorkerFor(AlignAnalysisUIText aaui,
287 AlignFrame alignFrame)
289 alignFrame.getViewport().getCalcManager()
290 .removeWorkersOfClass(aaui.getClient());