2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5)
3 * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
11 * Jalview is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty
13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
18 package jalview.ws.jws2;
20 import java.awt.event.ActionEvent;
21 import java.awt.event.ActionListener;
22 import java.util.List;
26 import jalview.datamodel.*;
28 import compbio.data.msa.MsaWS;
29 import compbio.metadata.Argument;
30 import compbio.metadata.Preset;
31 import compbio.metadata.PresetManager;
32 import jalview.ws.jws2.Jws2Discoverer.Jws2Instance;
40 public class MsaWSClient extends Jws2Client
43 * server is a WSDL2Java generated stub for an archetypal MsaWSI service.
47 AlignFrame alignFrame;
49 private Preset preset;
51 private List<Argument> paramset;
53 public MsaWSClient(Jws2Discoverer.Jws2Instance sh, String altitle,
54 jalview.datamodel.AlignmentView msa, boolean submitGaps,
55 boolean preserveOrder, Alignment seqdataset,
56 AlignFrame _alignFrame)
58 this(sh, null, null, false, altitle, msa, submitGaps, preserveOrder,
59 seqdataset, _alignFrame);
60 // TODO Auto-generated constructor stub
63 public MsaWSClient(Jws2Discoverer.Jws2Instance sh, Preset preset,
64 String altitle, jalview.datamodel.AlignmentView msa,
65 boolean submitGaps, boolean preserveOrder, Alignment seqdataset,
66 AlignFrame _alignFrame)
68 this(sh, preset, null, false, altitle, msa, submitGaps, preserveOrder,
69 seqdataset, _alignFrame);
70 // TODO Auto-generated constructor stub
74 * Creates a new MsaWSClient object that uses a service given by an externally
75 * retrieved ServiceHandle
78 * service handle of type AbstractName(MsaWS)
85 * @param preserveOrder
89 public MsaWSClient(Jws2Discoverer.Jws2Instance sh, Preset preset,
90 List<Argument> arguments, boolean editParams, String altitle,
91 jalview.datamodel.AlignmentView msa, boolean submitGaps,
92 boolean preserveOrder, Alignment seqdataset,
93 AlignFrame _alignFrame)
96 alignFrame = _alignFrame;
97 if (!(sh.service instanceof MsaWS))
99 // redundant at mo - but may change
103 "The Service called \n"
105 + "\nis not a \nMultiple Sequence Alignment Service !",
106 "Internal Jalview Error", JOptionPane.WARNING_MESSAGE);
111 this.preset = preset;
112 this.paramset = arguments;
115 WsJobParameters jobParams = new WsJobParameters(sh, preset);
116 if (!jobParams.showRunDialog())
121 paramset = jobParams.getJobParams();
124 if ((wsInfo = setWebService(sh, false)) == null)
126 JOptionPane.showMessageDialog(Desktop.desktop,
127 "The Multiple Sequence Alignment Service named "
128 + sh.serviceType + " is unknown",
129 "Internal Jalview Error", JOptionPane.WARNING_MESSAGE);
133 startMsaWSClient(altitle, msa, submitGaps, preserveOrder, seqdataset);
140 // add a class reference to the list
143 private void startMsaWSClient(String altitle, AlignmentView msa,
144 boolean submitGaps, boolean preserveOrder, Alignment seqdataset)
146 // if (!locateWebService())
151 wsInfo.setProgressText(((submitGaps) ? "Re-alignment" : "Alignment")
152 + " of " + altitle + "\nJob details\n");
153 String jobtitle = WebServiceName.toLowerCase();
154 if (jobtitle.endsWith("alignment"))
157 && (!jobtitle.endsWith("realignment") || jobtitle
158 .indexOf("profile") == -1))
160 int pos = jobtitle.indexOf("alignment");
161 jobtitle = WebServiceName.substring(0, pos) + "re-alignment of "
166 jobtitle = WebServiceName + " of " + altitle;
171 jobtitle = WebServiceName + (submitGaps ? " re" : " ")
172 + "alignment of " + altitle;
175 MsaWSThread msathread = new MsaWSThread(server, preset, paramset,
176 WsURL, wsInfo, alignFrame, WebServiceName, jobtitle, msa,
177 submitGaps, preserveOrder, seqdataset);
178 wsInfo.setthisService(msathread);
182 protected String getServiceActionKey()
187 protected String getServiceActionDescription()
189 return "Multiple Sequence Alignment";
193 * look at ourselves and work out if we are a service that can take a profile
196 * @return true if we can send gapped sequences to the alignment service
198 private boolean canSubmitGaps()
200 // TODO: query service or extract service handle props to check if we can
202 return (WebServiceName.indexOf("lustal") > -1); // cheat!
205 public void attachWSMenuEntry(JMenu rmsawsmenu,
206 final Jws2Instance service, final AlignFrame alignFrame)
208 setWebService(service, true); // headless
209 boolean finished = true, submitGaps = false;
210 JMenu msawsmenu = rmsawsmenu;
211 String svcname = WebServiceName;
212 if (svcname.endsWith("WS"))
214 svcname = svcname.substring(0,svcname.length()-2);
216 String calcName = svcname + " ";
219 msawsmenu = new JMenu(svcname);
220 rmsawsmenu.add(msawsmenu);
226 if (submitGaps == true)
228 msawsmenu = new JMenu("profile " + svcname);
229 rmsawsmenu.add(msawsmenu);
231 final boolean withGaps = submitGaps;
232 JMenuItem method = new JMenuItem(calcName + "Defaults");
233 method.setToolTipText("Align with default settings");
235 method.addActionListener(new ActionListener()
237 public void actionPerformed(ActionEvent e)
239 AlignmentView msa = alignFrame.gatherSequencesForAlignment();
240 new MsaWSClient(service, alignFrame.getTitle(), msa, withGaps,
241 true, alignFrame.getViewport().getAlignment()
242 .getDataset(), alignFrame);
246 msawsmenu.add(method);
247 method = new JMenuItem(calcName + "Edit and run ...");
248 method.setToolTipText("View and change the parameters before alignment.");
250 method.addActionListener(new ActionListener()
252 public void actionPerformed(ActionEvent e)
254 AlignmentView msa = alignFrame.gatherSequencesForAlignment();
255 new MsaWSClient(service, null, null, true, alignFrame.getTitle(),
256 msa, withGaps, true, alignFrame.getViewport()
257 .getAlignment().getDataset(), alignFrame);
261 msawsmenu.add(method);
262 PresetManager presets = service.getPresets();
263 if (presets != null && presets.getPresets().size() > 0)
265 JMenu presetlist = new JMenu(calcName + "Presets");
267 for (final Preset preset : (List<Preset>) presets.getPresets())
269 final JMenuItem methodR = new JMenuItem(preset.getName());
270 methodR.setToolTipText("<html><p>"+preset.getDescription()+"</p></html>");
271 methodR.addActionListener(new ActionListener()
273 public void actionPerformed(ActionEvent e)
275 AlignmentView msa = alignFrame.gatherSequencesForAlignment();
276 new MsaWSClient(service, preset, alignFrame.getTitle(), msa,
277 false, true, alignFrame.getViewport().getAlignment()
278 .getDataset(), alignFrame);
283 presetlist.add(methodR);
285 msawsmenu.add(presetlist);
287 if (!submitGaps && canSubmitGaps())