1 package jalview.ws.jws2;
3 import jalview.api.AlignCalcWorkerI;
4 import jalview.bin.Cache;
5 import jalview.bin.Console;
6 import jalview.gui.AlignFrame;
7 import jalview.gui.JvSwingUtils;
8 import jalview.util.MessageManager;
9 import jalview.ws.api.ServiceWithParameters;
10 import jalview.ws.jws2.dm.AAConSettings;
11 import jalview.ws.jws2.jabaws2.Jws2Instance;
12 import jalview.ws.params.AutoCalcSetting;
13 import jalview.ws.uimodel.AlignAnalysisUIText;
15 import java.awt.event.ActionEvent;
16 import java.awt.event.ActionListener;
17 import java.util.List;
19 import javax.swing.JCheckBoxMenuItem;
20 import javax.swing.JMenu;
21 import javax.swing.JMenuItem;
22 import javax.swing.event.MenuEvent;
23 import javax.swing.event.MenuListener;
25 public class Jws2ClientFactory
27 static boolean registerAAConWSInstance(final JMenu wsmenu,
28 final ServiceWithParameters service, final AlignFrame alignFrame)
30 final AlignAnalysisUIText aaui = service.getAlignAnalysisUI(); // null
32 // AlignAnalysisUIText.aaConGUI.get(service.serviceType.toString());
35 // not an instantaneous calculation GUI type service
38 // create the instaneous calculation GUI bits and update state if existing
39 // GUI elements already present
41 JCheckBoxMenuItem _aaConEnabled = null;
42 for (int i = 0; i < wsmenu.getItemCount(); i++)
44 JMenuItem item = wsmenu.getItem(i);
45 if (item instanceof JCheckBoxMenuItem
46 && item.getText().equals(aaui.getAAconToggle()))
48 _aaConEnabled = (JCheckBoxMenuItem) item;
51 // is there an aaCon worker already present - if so, set it to use the
52 // given service handle
54 List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
56 .getWorkersOfClass(aaui.getClient());
57 if (aaconClient != null && aaconClient.size() > 0)
59 SeqAnnotationServiceCalcWorker worker = (SeqAnnotationServiceCalcWorker) aaconClient
61 if (!worker.service.getHostURL().equals(service.getHostURL()))
63 // javax.swing.SwingUtilities.invokeLater(new Runnable()
68 removeCurrentAAConWorkerFor(aaui, alignFrame);
69 buildCurrentAAConWorkerFor(aaui, alignFrame, service);
76 // is there a service already registered ? there shouldn't be if we are
77 // being called correctly
78 if (_aaConEnabled == null)
80 final JCheckBoxMenuItem aaConEnabled = new JCheckBoxMenuItem(
81 aaui.getAAconToggle());
83 aaConEnabled.setToolTipText(
84 JvSwingUtils.wrapTooltip(true, aaui.getAAconToggleTooltip()));
85 aaConEnabled.addActionListener(new ActionListener()
88 public void actionPerformed(ActionEvent arg0)
91 List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
93 .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
94 if (aaconClient != null)
96 for (AlignCalcWorkerI worker : aaconClient)
98 if (((SeqAnnotationServiceCalcWorker) worker).getService()
99 .getClass().equals(aaui.getClient()))
101 removeCurrentAAConWorkerFor(aaui, alignFrame);
106 buildCurrentAAConWorkerFor(aaui, alignFrame);
110 wsmenu.add(aaConEnabled);
111 final JMenuItem modifyParams = new JMenuItem(
112 aaui.getAAeditSettings());
113 modifyParams.setToolTipText(JvSwingUtils.wrapTooltip(true,
114 aaui.getAAeditSettingsTooltip()));
115 modifyParams.addActionListener(new ActionListener()
119 public void actionPerformed(ActionEvent arg0)
121 showAAConAnnotationSettingsFor(aaui, alignFrame);
124 wsmenu.add(modifyParams);
125 wsmenu.addMenuListener(new MenuListener()
129 public void menuSelected(MenuEvent arg0)
131 // TODO: refactor to the implementing class.
132 if (alignFrame.getViewport().getAlignment().isNucleotide()
136 aaConEnabled.setEnabled(true);
137 modifyParams.setEnabled(true);
141 aaConEnabled.setEnabled(false);
142 modifyParams.setEnabled(false);
145 List<AlignCalcWorkerI> aaconClient = alignFrame.getViewport()
147 .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
149 boolean serviceEnabled = false;
150 if (aaconClient != null)
152 // NB code duplicatino again!
153 for (AlignCalcWorkerI _worker : aaconClient)
155 SeqAnnotationServiceCalcWorker worker = (SeqAnnotationServiceCalcWorker) _worker;
156 // this could be cleaner ?
157 if (worker.hasService()
159 .equals(worker.getService().getClass()))
161 serviceEnabled = true;
165 aaConEnabled.setSelected(serviceEnabled);
169 public void menuDeselected(MenuEvent arg0)
171 // TODO Auto-generated method stub
176 public void menuCanceled(MenuEvent arg0)
178 // TODO Auto-generated method stub
187 private static void showAAConAnnotationSettingsFor(
188 final AlignAnalysisUIText aaui, AlignFrame alignFrame)
191 * preferred settings Whether AACon is automatically recalculated Which
192 * AACon server to use What parameters to use
194 // could actually do a class search for this too
195 AutoCalcSetting fave = alignFrame.getViewport()
196 .getCalcIdSettingsFor(aaui.getCalcId());
199 fave = createDefaultAAConSettings(aaui);
201 new SequenceAnnotationWSClient(fave, alignFrame, true);
205 private static void buildCurrentAAConWorkerFor(
206 final AlignAnalysisUIText aaui, AlignFrame alignFrame)
208 buildCurrentAAConWorkerFor(aaui, alignFrame, null);
211 private static void buildCurrentAAConWorkerFor(
212 final AlignAnalysisUIText aaui, AlignFrame alignFrame,
213 ServiceWithParameters service)
216 * preferred settings Whether AACon is automatically recalculated Which
217 * AACon server to use What parameters to use
219 AutoCalcSetting fave = alignFrame.getViewport()
220 .getCalcIdSettingsFor(aaui.getCalcId());
223 fave = createDefaultAAConSettings(aaui, service);
227 if (service != null && !fave.getService().getHostURL()
228 .equals(service.getHostURL()))
230 Console.debug("Changing AACon service to " + service.getHostURL()
231 + " from " + fave.getService().getHostURL());
232 fave.setService(service);
235 new SequenceAnnotationWSClient(fave, alignFrame, false);
238 private static AutoCalcSetting createDefaultAAConSettings(
239 AlignAnalysisUIText aaui)
241 return createDefaultAAConSettings(aaui, null);
244 private static AutoCalcSetting createDefaultAAConSettings(
245 AlignAnalysisUIText aaui, ServiceWithParameters service)
249 // if (!service.getServiceType()
250 // .equals(compbio.ws.client.Services.AAConWS.toString()))
253 // "Ignoring invalid preferred service for AACon calculations (service
255 // + service.getServiceType() + ")");
260 // check service is actually in the list of currently avaialable
262 if (!PreferredServiceRegistry.getRegistry().contains(service))
271 // get the default service for AACon
272 service = PreferredServiceRegistry.getRegistry().getPreferredServiceFor(null,
273 aaui.getServiceType());
277 // TODO raise dialog box explaining error, and/or open the JABA
280 MessageManager.getString("error.no_aacon_service_found"));
282 return service instanceof Jws2Instance
283 ? new AAConSettings(true, service, null, null)
284 : new AutoCalcSetting(service, null, null, true);
287 private static void removeCurrentAAConWorkerFor(AlignAnalysisUIText aaui,
288 AlignFrame alignFrame)
290 alignFrame.getViewport().getCalcManager()
291 .removeWorkersOfClass(aaui.getClient());