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())
120 if ((this.preset = jobParams.getPreset())==null)
122 paramset = jobParams.getJobParams();
124 paramset = null; // no user supplied parameters.
128 if ((wsInfo = setWebService(sh, false)) == null)
130 JOptionPane.showMessageDialog(Desktop.desktop,
131 "The Multiple Sequence Alignment Service named "
132 + sh.serviceType + " is unknown",
133 "Internal Jalview Error", JOptionPane.WARNING_MESSAGE);
137 startMsaWSClient(altitle, msa, submitGaps, preserveOrder, seqdataset);
144 // add a class reference to the list
147 private void startMsaWSClient(String altitle, AlignmentView msa,
148 boolean submitGaps, boolean preserveOrder, Alignment seqdataset)
150 // if (!locateWebService())
155 wsInfo.setProgressText(((submitGaps) ? "Re-alignment" : "Alignment")
156 + " of " + altitle + "\nJob details\n");
157 String jobtitle = WebServiceName.toLowerCase();
158 if (jobtitle.endsWith("alignment"))
161 && (!jobtitle.endsWith("realignment") || jobtitle
162 .indexOf("profile") == -1))
164 int pos = jobtitle.indexOf("alignment");
165 jobtitle = WebServiceName.substring(0, pos) + "re-alignment of "
170 jobtitle = WebServiceName + " of " + altitle;
175 jobtitle = WebServiceName + (submitGaps ? " re" : " ")
176 + "alignment of " + altitle;
179 MsaWSThread msathread = new MsaWSThread(server, preset, paramset,
180 WsURL, wsInfo, alignFrame, WebServiceName, jobtitle, msa,
181 submitGaps, preserveOrder, seqdataset);
182 wsInfo.setthisService(msathread);
186 protected String getServiceActionKey()
191 protected String getServiceActionDescription()
193 return "Multiple Sequence Alignment";
197 * look at ourselves and work out if we are a service that can take a profile
200 * @return true if we can send gapped sequences to the alignment service
202 private boolean canSubmitGaps()
204 // TODO: query service or extract service handle props to check if we can
206 return (WebServiceName.indexOf("lustal") > -1); // cheat!
209 public void attachWSMenuEntry(JMenu rmsawsmenu,
210 final Jws2Instance service, final AlignFrame alignFrame)
212 setWebService(service, true); // headless
213 boolean finished = true, submitGaps = false;
214 JMenu msawsmenu = rmsawsmenu;
215 String svcname = WebServiceName;
216 if (svcname.endsWith("WS"))
218 svcname = svcname.substring(0,svcname.length()-2);
220 String calcName = svcname + " ";
223 msawsmenu = new JMenu(svcname);
224 rmsawsmenu.add(msawsmenu);
230 if (submitGaps == true)
232 msawsmenu = new JMenu("profile " + svcname);
233 rmsawsmenu.add(msawsmenu);
235 final boolean withGaps = submitGaps;
236 JMenuItem method = new JMenuItem(calcName + "Defaults");
237 method.setToolTipText("Align with default settings");
239 method.addActionListener(new ActionListener()
241 public void actionPerformed(ActionEvent e)
243 AlignmentView msa = alignFrame.gatherSequencesForAlignment();
244 new MsaWSClient(service, alignFrame.getTitle(), msa, withGaps,
245 true, alignFrame.getViewport().getAlignment()
246 .getDataset(), alignFrame);
250 msawsmenu.add(method);
251 method = new JMenuItem(calcName + "Edit and run ...");
252 method.setToolTipText("View and change the parameters before alignment.");
254 method.addActionListener(new ActionListener()
256 public void actionPerformed(ActionEvent e)
258 AlignmentView msa = alignFrame.gatherSequencesForAlignment();
259 new MsaWSClient(service, null, null, true, alignFrame.getTitle(),
260 msa, withGaps, true, alignFrame.getViewport()
261 .getAlignment().getDataset(), alignFrame);
265 msawsmenu.add(method);
266 PresetManager presets = service.getPresets();
267 if (presets != null && presets.getPresets().size() > 0)
269 JMenu presetlist = new JMenu(calcName + "Presets");
271 for (final Preset preset : (List<Preset>) presets.getPresets())
273 final JMenuItem methodR = new JMenuItem(preset.getName());
274 methodR.setToolTipText("<html><p>"+preset.getDescription()+"</p></html>");
275 methodR.addActionListener(new ActionListener()
277 public void actionPerformed(ActionEvent e)
279 AlignmentView msa = alignFrame.gatherSequencesForAlignment();
280 new MsaWSClient(service, preset, alignFrame.getTitle(), msa,
281 false, true, alignFrame.getViewport().getAlignment()
282 .getDataset(), alignFrame);
287 presetlist.add(methodR);
289 msawsmenu.add(presetlist);
291 if (!submitGaps && canSubmitGaps())