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.1
\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, MSAprobsWS, GLprobsWS,
\r
44 JronnWS, DisemblWS, GlobPlotWS, IUPredWS,
\r
48 public static Services getService(String servName) {
\r
49 servName = servName.trim().toLowerCase();
\r
50 for (Services service : Services.values()) {
\r
51 if (service.toString().equalsIgnoreCase(servName)) {
\r
58 Service getService(URL url, String sqname) {
\r
59 QName qname = new QName(sqname, this.toString());
\r
60 return Service.create(url, qname);
\r
63 public String getJabawsVersion() {
\r
64 return JABAService.JABAWS_VERSION;
\r
66 public static String toString(Set<Services> services) {
\r
67 if (services == null || services.isEmpty()) {
\r
68 return "No known services...\n";
\r
71 for (Services serv : services) {
\r
73 value += serv + "\n";
\r
75 value += "Unknown Service\n";
\r
81 Class<? extends JABAService> getServiceType() {
\r
89 return SequenceAnnotation.class;
\r
101 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");
\r
106 String getServiceNamespace() {
\r
108 case RNAalifoldWS :
\r
118 return JABAService.V2_SERVICE_NAMESPACE;
\r
124 return JABAService.SERVICE_NAMESPACE;
\r
126 throw new RuntimeException("Unrecognised JABAWS Namespace for service " + this +"!");
\r
130 JABAService getInterface(Service service) {
\r
131 assert service != null;
\r
133 QName portName = new QName(service.getServiceName().getNamespaceURI(), this.toString() + "Port");
\r
134 return service.getPort(portName, this.getServiceType());
\r
137 public String getServiceInfo() {
\r
140 return AACON_INFO.toString();
\r
142 return JPRED_INFO.toString();
\r
144 return CLUSTAL_OMEGA_INFO.toString();
\r
146 return CLUSTAL_INFO.toString();
\r
148 return DISEMBL_INFO.toString();
\r
150 return GLOBPLOT_INFO.toString();
\r
152 return IUPRED_INFO.toString();
\r
154 return JRONN_INFO.toString();
\r
156 return MAFFT_INFO.toString();
\r
158 return MUSCLE_INFO.toString();
\r
160 return PROBCONS_INFO.toString();
\r
162 return MSAPROBS_INFO.toString();
\r
164 return GLPROBS_INFO.toString();
\r
166 return TCOFFEE_INFO.toString();
\r
167 case RNAalifoldWS :
\r
168 return RNAALIFOLD_INFO.toString();
\r
170 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");
\r
174 public String getServiceReference() {
\r
177 return AACON_INFO.getReference();
\r
179 return JPRED_INFO.getReference();
\r
181 return CLUSTAL_OMEGA_INFO.getReference();
\r
183 return CLUSTAL_INFO.getReference();
\r
185 return DISEMBL_INFO.getReference();
\r
187 return GLOBPLOT_INFO.getReference();
\r
189 return IUPRED_INFO.getReference();
\r
191 return JRONN_INFO.getReference();
\r
193 return MAFFT_INFO.getReference();
\r
195 return MUSCLE_INFO.getReference();
\r
197 return PROBCONS_INFO.getReference();
\r
199 return MSAPROBS_INFO.getReference();
\r
201 return GLPROBS_INFO.getReference();
\r
203 return TCOFFEE_INFO.getReference();
\r
204 case RNAalifoldWS :
\r
205 return RNAALIFOLD_INFO.getReference();
\r
207 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");
\r
211 public String getServiceVersion() {
\r
214 return AACON_INFO.getVersion();
\r
216 return JPRED_INFO.getVersion();
\r
218 return CLUSTAL_OMEGA_INFO.getVersion();
\r
220 return CLUSTAL_INFO.getVersion();
\r
222 return DISEMBL_INFO.getVersion();
\r
224 return GLOBPLOT_INFO.getVersion();
\r
226 return IUPRED_INFO.getVersion();
\r
228 return JRONN_INFO.getVersion();
\r
230 return MAFFT_INFO.getVersion();
\r
232 return MUSCLE_INFO.getVersion();
\r
234 return PROBCONS_INFO.getVersion();
\r
236 return MSAPROBS_INFO.getVersion();
\r
238 return GLPROBS_INFO.getVersion();
\r
240 return TCOFFEE_INFO.getVersion();
\r
241 case RNAalifoldWS :
\r
242 return RNAALIFOLD_INFO.getVersion();
\r
244 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");
\r
248 public String getServiceGroup() {
\r
251 return "annotation";
\r
253 return "annotation";
\r
255 return "alignment";
\r
257 return "alignment";
\r
267 return "alignment";
\r
269 return "alignment";
\r
271 return "alignment";
\r
273 return "alignment";
\r
275 return "alignment";
\r
277 return "alignment";
\r
278 case RNAalifoldWS :
\r
279 return "annotation";
\r
281 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");
\r
285 static ServiceInfo AACON_INFO = new ServiceInfo(AAConWS,
\r
286 "in preparation", "1.0", "http://www.compbio.dundee.ac.uk/aacon");
\r
288 static ServiceInfo JPRED_INFO = new ServiceInfo(JpredWS,
\r
289 "Cole C, Barber JD, Barton GJ,\r\n" +
\r
290 "\"The Jpred 3 secondary structure prediction server\"\r\n" +
\r
291 "Nucl. Acids Res. 36 (suppl 2):W197 (2008)",
\r
292 "3.0.3", "http://www.compbio.dundee.ac.uk/www-jpred");
\r
294 static ServiceInfo CLUSTAL_INFO = new ServiceInfo(ClustalWS,
\r
295 "Larkin MA, Blackshields G, Brown NP, Chenna R, McGettigan PA, McWilliam H, Valentin F, Wallace IM, Wilm A, Lopez R, Thompson JD, Gibson TJ, Higgins DG,\r\n" +
\r
296 "\"Clustal W and Clustal X version 2.0\"\r\n" +
\r
297 "Bioinformatics, 23: 2947 (2007)",
\r
298 "2.0.12", "http://www.clustal.org/clustal2/");
\r
300 static ServiceInfo CLUSTAL_OMEGA_INFO = new ServiceInfo(ClustalOWS,
\r
301 "Sievers F, Wilm A, Dineen D, Gibson TJ, Karplus K, Li W, Lopez R, McWilliam H, Remmert M, Söding J, Thompson JD, Higgins DG,\r\n" +
\r
302 "\"Fast, scalable generation of high quality protein multiple sequence alignments using Clustal Omega\"\r\n" +
\r
303 "Mol Syst Biol. 7:539 (2011)",
\r
304 "1.0.2", "http://www.clustal.org/omega/");
\r
306 static ServiceInfo DISEMBL_INFO = new ServiceInfo(DisemblWS,
\r
307 "Linding R, Jensen LJ, Diella F, Bork P, Gibson TJ, and Russell RB,\r\n" +
\r
308 "\"Protein disorder prediction: implications for structural proteomics\"\r\n" +
\r
309 "Structure 11(11):1453 (2003)",
\r
310 "1.5", "http://dis.embl.de/");
\r
312 static ServiceInfo GLOBPLOT_INFO = new ServiceInfo(GlobPlotWS,
\r
313 "Linding R, Russell RB, Neduva V and Gibson TJ,\r\n" +
\r
314 "GlobPlot: exploring protein sequences for globularity and disorder\r\n" +
\r
315 "Nucl. Acids Res. 31 (13):3701 (2003)",
\r
316 "2.3", "http://globplot.embl.de/");
\r
318 static ServiceInfo IUPRED_INFO = new ServiceInfo(IUPredWS,
\r
319 "Dosztányi Z, Csizmók V, Tompa P, and Simon I,\r\n" +
\r
320 "\"The Pairwise Energy Content Estimated from Amino Acid Composition Discriminates between Folded and Intrinsically Unstructured Proteins\"\r\n" +
\r
321 "J. Mol. Biol. 347:827 (2005)",
\r
322 "1.0", "http://iupred.enzim.hu/");
\r
324 static ServiceInfo TCOFFEE_INFO = new ServiceInfo(TcoffeeWS,
\r
325 "Notredame C, Higgins DG, Heringa L,\r\n" +
\r
326 "\"T-Coffee: A novel method for multiple sequence alignments\"\r\n" +
\r
327 "JMB, 302(1):205 (2000)",
\r
328 "8.99", "http://tcoffee.crg.cat/apps/tcoffee/index.html");
\r
330 static ServiceInfo MUSCLE_INFO = new ServiceInfo(MuscleWS,
\r
332 "\"MUSCLE: multiple sequence alignment with high accuracy and high throughput\"\r\n" +
\r
333 "Nucleic Acids Res. 32(5):1792 (2004)",
\r
334 "3.8.31", "http://www.drive5.com/muscle/");
\r
336 static ServiceInfo PROBCONS_INFO = new ServiceInfo(ProbconsWS,
\r
337 "Do CB, Mahabhashyam MSP, Brudno M, and Batzoglou S,\r\n" +
\r
338 "\"PROBCONS: Probabilistic Consistency-based Multiple Sequence Alignment\"\r\n" +
\r
339 "Genome Research 15:330 (2005)",
\r
340 "1.12", "http://probcons.stanford.edu/");
\r
342 static ServiceInfo MSAPROBS_INFO = new ServiceInfo(MSAprobsWS,
\r
343 "Liu Y, Schmidt B, and Maskell DL,\r\n" +
\r
344 "\"MSAProbs: multiple sequence alignment based on pair hidden Markov models and partition function posterior probabilities\"\r\n" +
\r
345 "Bioinformatics, 26 (16):1958 (2010)",
\r
346 "0.9.7", "http://msaprobs.sourceforge.net/");
\r
348 static ServiceInfo GLPROBS_INFO = new ServiceInfo(GLprobsWS,
\r
349 "Yongtao Ye, Siu-Ming Yiu, David W. Cheung, Qing Zhan, Hing-Fung Ting, Yadong Wang, Tak-Wah Lam,\r\n" +
\r
350 "\"GLProbs: Aligning multiple sequences adaptively\"\r\n" +
\r
351 "in progress (2013)",
\r
352 "1.0", "http://sourceforge.net/projects/glprobs/");
\r
354 static ServiceInfo JRONN_INFO = new ServiceInfo(JronnWS,
\r
355 "unpublished, original algorithm Yang ZR, Thomson R, McMeil P, and Esnouf RM,\r\n" +
\r
356 "\"RONN: the bio-basis function neural network technique applied to the dectection of natively disordered regions in proteins\"\r\n" +
\r
357 "Bioinformatics 21:3369 (2005)\r\n",
\r
358 "1.0", "http://www.compbio.dundee.ac.uk/jabaws/");
\r
360 static ServiceInfo MAFFT_INFO = new ServiceInfo(MafftWS,
\r
361 "Katoh K, Toh H,\r\n" +
\r
362 "\"Parallelization of the MAFFT multiple sequence alignment program\"\r\n" +
\r
363 "Bioinformatics 26:1899 (2010)",
\r
364 "6.8.57", "http://mafft.cbrc.jp/alignment/software/");
\r
366 static ServiceInfo RNAALIFOLD_INFO = new ServiceInfo(RNAalifoldWS,
\r
367 "Hofacker IL, Fekete M, and Stadler PV,\r\n"+
\r
368 "\"Secondary Structure Prediction for Aligned RNA Sequences\"\r\n" +
\r
369 "J.Mol.Biol. 319:1059 (2002) and\r\n " +
\r
370 "Bernhart SH, Hofacker IL Will S, Gruber AR, and Stadler PF,\r\n" +
\r
371 "\"RNAalifold: Improved consensus structure prediction for RNA alignments\"\r\n" +
\r
372 "BMC Bioinformatics, 9:474 (2008)\r\n",
\r
373 "2.1.2", "http://www.tbi.univie.ac.at/RNA/");
\r
375 @XmlAccessorType(XmlAccessType.FIELD)
\r
376 static class ServiceInfo {
\r
381 final static String line_delimiter = "\n";
\r
383 private ServiceInfo() {
\r
384 // Default constructor for JAXB
\r
386 private ServiceInfo(Services service, String reference, String version,
\r
388 this.service = service;
\r
389 this.reference = reference;
\r
390 this.version = version;
\r
391 this.moreinfo = moreinfo;
\r
395 public String toString() {
\r
396 String value = "SERVICE: " + service + " version " + version + line_delimiter + "\n";
\r
397 value += "JABAWS v. " + JABAService.JABAWS_VERSION + line_delimiter;
\r
398 value += "REFERENCE: " + reference + line_delimiter + "\n";
\r
399 value += "MORE INFORMATION: " + moreinfo + line_delimiter;
\r
403 public String getReference() {
\r
404 return "REFERENCE: " + reference + line_delimiter + "<br>MORE INFORMATION: " + moreinfo + line_delimiter;
\r
407 public String getVersion() {
\r
412 public static void main(String[] args) {
\r
413 System.out.println(MUSCLE_INFO);
\r