1 /* Copyright (c) 2011 Peter Troshin
\r
3 * JAva Bioinformatics Analysis Web Services (JABAWS) @version: 2.0
\r
5 * This library is free software; you can redistribute it and/or modify it under the terms of the
\r
6 * Apache License version 2 as published by the Apache Software Foundation
\r
8 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
\r
9 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache
\r
10 * License for more details.
\r
12 * A copy of the license is in apache_license.txt. It is also available here:
\r
13 * @see: http://www.apache.org/licenses/LICENSE-2.0.txt
\r
15 * Any republication or derived work distributed in source code form
\r
16 * must include this copyright and license notice.
\r
19 package compbio.ws.client;
\r
21 import java.net.URL;
\r
22 import java.util.Set;
\r
24 import javax.xml.bind.annotation.XmlAccessType;
\r
25 import javax.xml.bind.annotation.XmlAccessorType;
\r
26 import javax.xml.namespace.QName;
\r
27 import javax.xml.ws.Service;
\r
29 import compbio.data.msa.JABAService;
\r
30 import compbio.data.msa.MsaWS;
\r
31 import compbio.data.msa.SequenceAnnotation;
\r
34 * List of web services currently supported by JABAWS version 2
\r
37 public enum Services {
\r
39 * Make sure this class has NO references to runners or engines as it is a
\r
40 * part of minimal client package. Such things should go into ServicesUtil
\r
42 MafftWS, MuscleWS, ClustalWS, ClustalOWS, TcoffeeWS, ProbconsWS, AAConWS, JronnWS, DisemblWS, GlobPlotWS, IUPredWS, JpredWS, RNAalifoldWS;
\r
44 public static Services getService(String servName) {
\r
45 servName = servName.trim().toLowerCase();
\r
46 for (Services service : Services.values()) {
\r
47 if (service.toString().equalsIgnoreCase(servName)) {
\r
54 Service getService(URL url, String sqname) {
\r
55 QName qname = new QName(sqname, this.toString());
\r
56 return Service.create(url, qname);
\r
59 public static String toString(Set<Services> services) {
\r
60 if (services == null || services.isEmpty()) {
\r
61 return "No known services...\n";
\r
64 for (Services serv : services) {
\r
66 value += serv + "\n";
\r
68 value += "Unknown Service\n";
\r
74 Class<? extends JABAService> getServiceType() {
\r
82 return SequenceAnnotation.class;
\r
93 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");
\r
98 String getServiceNamespace() {
\r
100 case RNAalifoldWS :
\r
106 return JABAService.V2_SERVICE_NAMESPACE;
\r
114 return JABAService.SERVICE_NAMESPACE;
\r
116 throw new RuntimeException("Unrecognised JABAWS Namespace for service " + this +"!");
\r
120 JABAService getInterface(Service service) {
\r
121 assert service != null;
\r
123 QName portName = new QName(service.getServiceName().getNamespaceURI(), this.toString() + "Port");
\r
124 return service.getPort(portName, this.getServiceType());
\r
127 public String getServiceInfo() {
\r
130 return AACON_INFO.toString();
\r
132 return JPRED_INFO.toString();
\r
134 return CLUSTAL_OMEGA_INFO.toString();
\r
136 return CLUSTAL_INFO.toString();
\r
138 return DISEMBL_INFO.toString();
\r
140 return GLOBPLOT_INFO.toString();
\r
142 return IUPRED_INFO.toString();
\r
144 return JRONN_INFO.toString();
\r
146 return MAFFT_INFO.toString();
\r
148 return MUSCLE_INFO.toString();
\r
150 return PROBCONS_INFO.toString();
\r
152 return TCOFFEE_INFO.toString();
\r
153 case RNAalifoldWS :
\r
154 return RNAALIFOLD_INFO.toString();
\r
156 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");
\r
160 public String getServiceReference() {
\r
163 return AACON_INFO.getReference();
\r
165 return JPRED_INFO.getReference();
\r
167 return CLUSTAL_OMEGA_INFO.getReference();
\r
169 return CLUSTAL_INFO.getReference();
\r
171 return DISEMBL_INFO.getReference();
\r
173 return GLOBPLOT_INFO.getReference();
\r
175 return IUPRED_INFO.getReference();
\r
177 return JRONN_INFO.getReference();
\r
179 return MAFFT_INFO.getReference();
\r
181 return MUSCLE_INFO.getReference();
\r
183 return PROBCONS_INFO.getReference();
\r
185 return TCOFFEE_INFO.getReference();
\r
186 case RNAalifoldWS :
\r
187 return RNAALIFOLD_INFO.getReference();
\r
189 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");
\r
193 public String getServiceVersion() {
\r
196 return AACON_INFO.getVersion();
\r
198 return JPRED_INFO.getVersion();
\r
200 return CLUSTAL_OMEGA_INFO.getVersion();
\r
202 return CLUSTAL_INFO.getVersion();
\r
204 return DISEMBL_INFO.getVersion();
\r
206 return GLOBPLOT_INFO.getVersion();
\r
208 return IUPRED_INFO.getVersion();
\r
210 return JRONN_INFO.getVersion();
\r
212 return MAFFT_INFO.getVersion();
\r
214 return MUSCLE_INFO.getVersion();
\r
216 return PROBCONS_INFO.getVersion();
\r
218 return TCOFFEE_INFO.getVersion();
\r
219 case RNAalifoldWS :
\r
220 return RNAALIFOLD_INFO.getVersion();
\r
222 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");
\r
226 public String getServiceGroup() {
\r
229 return "annotation";
\r
231 return "annotation";
\r
233 return "alignment";
\r
235 return "alignment";
\r
245 return "alignment";
\r
247 return "alignment";
\r
249 return "alignment";
\r
251 return "alignment";
\r
252 case RNAalifoldWS :
\r
253 return "annotation";
\r
255 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");
\r
259 static ServiceInfo AACON_INFO = new ServiceInfo(AAConWS,
\r
260 "in preparation", "1.0", "http://www.compbio.dundee.ac.uk/aacon");
\r
262 static ServiceInfo JPRED_INFO = new ServiceInfo(JpredWS,
\r
263 "Cole C, Barber JD, Barton GJ.reparation" +
\r
264 "The Jpred 3 secondary structure prediction server\n" +
\r
265 "Nucl. Acids Res. (2008) 36 (suppl 2): W197-W201., doi: 10.1093/nar/gkn238",
\r
266 "3.0.3", "http://www.compbio.dundee.ac.uk/www-jpred");
\r
268 static ServiceInfo CLUSTAL_INFO = new ServiceInfo(ClustalWS,
\r
269 "Larkin MA, Blackshields G, Brown NP, Chenna R, McGettigan PA, McWilliam H, Valentin F, " +
\r
270 "Wallace IM, Wilm A, Lopez R, Thompson JD, Gibson TJ, Higgins DG.\n" +
\r
271 "(2007). Clustal W and Clustal X version 2.0. Bioinformatics, 23, 2947-2948.",
\r
272 "2.0.12", "http://www.clustal.org/clustal2/");
\r
274 static ServiceInfo CLUSTAL_OMEGA_INFO = new ServiceInfo(ClustalOWS,
\r
275 "Fast, scalable generation of high quality protein multiple sequence alignments using Clustal Omega\r\n"
\r
276 + "Fabian Sievers, Andreas Wilm, David Dineen, Toby J. Gibson, Kevin Karplus, Weizhong Li, Rodrigo Lopez, Hamish McWilliam, Michael Remmert, Johannes Söding, Julie D. Thompson, Desmond G. Higgins",
\r
277 "1.0.2", "http://www.clustal.org/omega");
\r
279 static ServiceInfo DISEMBL_INFO = new ServiceInfo(DisemblWS,
\r
280 "R. Linding, L.J. Jensen, F. Diella, P. Bork, T.J. Gibson and R.B. Russell\r\n"
\r
281 + "Protein disorder prediction: implications for structural proteomics\r\n"
\r
282 + "Structure Vol 11, Issue 11, 4 November 2003", "1.5",
\r
283 "http://dis.embl.de/");
\r
285 static ServiceInfo GLOBPLOT_INFO = new ServiceInfo(GlobPlotWS,
\r
286 "Rune Linding, Robert B. Russell, Victor Neduva and Toby J. Gibson " +
\r
287 "'GlobPlot: exploring protein sequences for globularity and disorder.' " +
\r
288 "Nucl. Acids Res. (2003) 31 (13): 3701-3708. doi: 10.1093/nar/gkg519\r\n",
\r
289 "2.3", "http://globplot.embl.de/");
\r
291 static ServiceInfo IUPRED_INFO = new ServiceInfo(IUPredWS,
\r
292 "The Pairwise Energy Content Estimated from Amino Acid Composition Discriminates between Folded and Intrinsically Unstructured Proteins\r\n"
\r
293 + "Zsuzsanna Dosztányi, Veronika Csizmók, Péter Tompa and István Simon\r\n"
\r
294 + "J. Mol. Biol. (2005) 347, 827-839.", "1.0",
\r
295 "http://iupred.enzim.hu/");
\r
297 static ServiceInfo TCOFFEE_INFO = new ServiceInfo(TcoffeeWS,
\r
298 "T-Coffee: A novel method for multiple sequence alignments "
\r
299 + "Notredame, Higgins, Heringa, JMB, 302 (205-217) 2000",
\r
300 "8.99", "http://tcoffee.crg.cat/apps/tcoffee/index.html");
\r
302 static ServiceInfo MUSCLE_INFO = new ServiceInfo(MuscleWS,
\r
303 "Edgar, R.C. (2004) MUSCLE: multiple sequence alignment with high accuracy and high throughput.Nucleic Acids Res. 32(5):1792-1797.\r\n"
\r
304 + "doi:10.1093/nar/gkh340", "3.8.31",
\r
305 "http://www.drive5.com/muscle/");
\r
307 static ServiceInfo PROBCONS_INFO = new ServiceInfo(ProbconsWS,
\r
308 "Do, C.B., Mahabhashyam, M.S.P., Brudno, M., and Batzoglou, S. 2005. PROBCONS: "
\r
309 + "Probabilistic Consistency-based Multiple Sequence Alignment. Genome Research 15: 330-340. ",
\r
310 "1.12", "http://probcons.stanford.edu/");
\r
312 static ServiceInfo JRONN_INFO = new ServiceInfo(JronnWS,
\r
313 "unpublished, original algorithm Yang,Z.R., Thomson,R., McMeil,P. and Esnouf,R.M. (2005) "
\r
314 + "RONN: the bio-basis function neural network technique applied to the "
\r
315 + "dectection of natively disordered regions in proteins Bioinformatics 21: 3369-3376\r\n",
\r
316 "1.0", "http://www.compbio.dundee.ac.uk/jabaws/");
\r
318 static ServiceInfo MAFFT_INFO = new ServiceInfo(MafftWS,
\r
319 "Katoh, Toh 2010 (Bioinformatics 26:1899-1900)\r\n"
\r
320 + "Parallelization of the MAFFT multiple sequence alignment program. ",
\r
321 "6.8.57", "http://mafft.cbrc.jp/alignment/software/");
\r
323 static ServiceInfo RNAALIFOLD_INFO = new ServiceInfo(RNAalifoldWS,
\r
324 "Ivo L. Hofacker, Martin Fekete, and Peter F. Stadler 'Secondary Structure Prediction"
\r
325 + " for Aligned RNA Sequences'. J.Mol.Biol. 319: 1059-1066, 2002. Stephan H. Bernhart,"
\r
326 + " Ivo L. Hofacker, Sebastian Will, Andreas R. Gruber, and Peter F. Stadler. "
\r
327 + "'RNAalifold: Improved consensus structure prediction for RNA alignments'. BMC Bioinformatics, 9:474, 2008.\r\n",
\r
328 "2.1.2", "http://www.tbi.univie.ac.at/RNA/");
\r
330 @XmlAccessorType(XmlAccessType.FIELD)
\r
331 static class ServiceInfo {
\r
336 final static String jabaws_version = "2.5";
\r
337 final static String line_delimiter = "\n";
\r
339 private ServiceInfo() {
\r
340 // Default constructor for JAXB
\r
342 private ServiceInfo(Services service, String reference, String version,
\r
344 this.service = service;
\r
345 this.reference = reference;
\r
346 this.version = version;
\r
347 this.moreinfo = moreinfo;
\r
351 public String toString() {
\r
352 String value = "SERVICE: " + service + " version " + version + line_delimiter + "\n";
\r
353 value += "JABAWS v. " + jabaws_version + line_delimiter;
\r
354 value += "REFERENCE: " + reference + line_delimiter + "\n";
\r
355 value += "MORE INFORMATION: " + moreinfo + line_delimiter;
\r
359 public String getReference() {
\r
360 return "REFERENCE: " + reference + line_delimiter + "<br>MORE INFORMATION: " + moreinfo + line_delimiter;
\r
363 public String getVersion() {
\r
368 public static void main(String[] args) {
\r
369 System.out.println(MUSCLE_INFO);
\r