cf978f8f98a0622ea9a4341c447bfdf4cbf57d83
[jabaws.git] / webservices / compbio / ws / client / Services.java
1 /* Copyright (c) 2011 Peter Troshin\r
2  *  \r
3  *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 2.0     \r
4  * \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
7  * \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
11  * \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
14  * \r
15  * Any republication or derived work distributed in source code form\r
16  * must include this copyright and license notice.\r
17  */\r
18 \r
19 package compbio.ws.client;\r
20 \r
21 import java.net.URL;\r
22 import java.util.Set;\r
23 \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
28 \r
29 import compbio.data.msa.JABAService;\r
30 import compbio.data.msa.MsaWS;\r
31 import compbio.data.msa.SequenceAnnotation;\r
32 \r
33 /**\r
34  * List of web services currently supported by JABAWS version 2.1\r
35  * \r
36  */\r
37 public enum Services {\r
38         /*\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
41          */\r
42         MafftWS, MuscleWS, ClustalWS, ClustalOWS, TcoffeeWS, ProbconsWS, MSAprobsWS, GLprobsWS,\r
43         AAConWS, \r
44         JronnWS, DisemblWS, GlobPlotWS, IUPredWS, \r
45         JpredWS, \r
46         RNAalifoldWS;\r
47 \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
52                                 return service;\r
53                         }\r
54                 }\r
55                 return null;\r
56         }\r
57 \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
61         }\r
62 \r
63         public String getJabawsVersion() {\r
64                 return JABAService.JABAWS_VERSION;\r
65         }\r
66         public static String toString(Set<Services> services) {\r
67                 if (services == null || services.isEmpty()) {\r
68                         return "No known services...\n";\r
69                 }\r
70                 String value = "";\r
71                 for (Services serv : services) {\r
72                         if (null != serv) {\r
73                                 value += serv + "\n";\r
74                         } else {\r
75                                 value += "Unknown Service\n";\r
76                         }\r
77                 }\r
78                 return value;\r
79         }\r
80 \r
81         Class<? extends JABAService> getServiceType() {\r
82                 switch (this) {\r
83                         case AAConWS :\r
84                         case JronnWS :\r
85                         case DisemblWS :\r
86                         case GlobPlotWS :\r
87                         case IUPredWS :\r
88                         case RNAalifoldWS :\r
89                                 return SequenceAnnotation.class;\r
90                         case JpredWS :\r
91                         case ClustalWS :\r
92                         case ClustalOWS :\r
93                         case MafftWS :\r
94                         case MuscleWS :\r
95                         case ProbconsWS :\r
96                         case MSAprobsWS :\r
97                         case GLprobsWS :\r
98                         case TcoffeeWS :\r
99                                 return MsaWS.class;\r
100                         default :\r
101                                 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");\r
102                 }\r
103         }\r
104 \r
105         \r
106         String getServiceNamespace() {\r
107                 switch (this) {\r
108                         case RNAalifoldWS :\r
109                         case AAConWS :\r
110                         case JronnWS :\r
111                         case DisemblWS :\r
112                         case GlobPlotWS :\r
113                         case IUPredWS :\r
114                         case MSAprobsWS :\r
115                         case GLprobsWS :\r
116                         case JpredWS :\r
117                         case ClustalOWS :\r
118                                 return JABAService.V2_SERVICE_NAMESPACE;\r
119                         case ClustalWS :\r
120                         case MafftWS :\r
121                         case MuscleWS :\r
122                         case ProbconsWS :\r
123                         case TcoffeeWS :\r
124                                 return JABAService.SERVICE_NAMESPACE;\r
125                         default :\r
126                                 throw new RuntimeException("Unrecognised JABAWS Namespace for service " + this +"!");\r
127                 }\r
128         }\r
129         \r
130         JABAService getInterface(Service service) {\r
131                 assert service != null;\r
132 \r
133                 QName portName = new QName(service.getServiceName().getNamespaceURI(), this.toString() + "Port");\r
134                 return service.getPort(portName, this.getServiceType());\r
135         }\r
136 \r
137         public String getServiceInfo() {\r
138                 switch (this) {\r
139                         case AAConWS :\r
140                                 return AACON_INFO.toString();\r
141                         case JpredWS :\r
142                                 return JPRED_INFO.toString();\r
143                         case ClustalOWS :\r
144                                 return CLUSTAL_OMEGA_INFO.toString();\r
145                         case ClustalWS :\r
146                                 return CLUSTAL_INFO.toString();\r
147                         case DisemblWS :\r
148                                 return DISEMBL_INFO.toString();\r
149                         case GlobPlotWS :\r
150                                 return GLOBPLOT_INFO.toString();\r
151                         case IUPredWS :\r
152                                 return IUPRED_INFO.toString();\r
153                         case JronnWS :\r
154                                 return JRONN_INFO.toString();\r
155                         case MafftWS :\r
156                                 return MAFFT_INFO.toString();\r
157                         case MuscleWS :\r
158                                 return MUSCLE_INFO.toString();\r
159                         case ProbconsWS :\r
160                                 return PROBCONS_INFO.toString();\r
161                         case MSAprobsWS :\r
162                                 return MSAPROBS_INFO.toString();\r
163                         case GLprobsWS :\r
164                                 return GLPROBS_INFO.toString();\r
165                         case TcoffeeWS :\r
166                                 return TCOFFEE_INFO.toString();\r
167                         case RNAalifoldWS :\r
168                                 return RNAALIFOLD_INFO.toString();\r
169                         default :\r
170                                 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");\r
171                 }\r
172         }\r
173 \r
174         public String getServiceReference() {\r
175                 switch (this) {\r
176                         case AAConWS :\r
177                                 return AACON_INFO.getReference();\r
178                         case JpredWS :\r
179                                 return JPRED_INFO.getReference();\r
180                         case ClustalOWS :\r
181                                 return CLUSTAL_OMEGA_INFO.getReference();\r
182                         case ClustalWS :\r
183                                 return CLUSTAL_INFO.getReference();\r
184                         case DisemblWS :\r
185                                 return DISEMBL_INFO.getReference();\r
186                         case GlobPlotWS :\r
187                                 return GLOBPLOT_INFO.getReference();\r
188                         case IUPredWS :\r
189                                 return IUPRED_INFO.getReference();\r
190                         case JronnWS :\r
191                                 return JRONN_INFO.getReference();\r
192                         case MafftWS :\r
193                                 return MAFFT_INFO.getReference();\r
194                         case MuscleWS :\r
195                                 return MUSCLE_INFO.getReference();\r
196                         case ProbconsWS :\r
197                                 return PROBCONS_INFO.getReference();\r
198                         case MSAprobsWS :\r
199                                 return MSAPROBS_INFO.getReference();\r
200                         case GLprobsWS :\r
201                                 return GLPROBS_INFO.getReference();\r
202                         case TcoffeeWS :\r
203                                 return TCOFFEE_INFO.getReference();\r
204                         case RNAalifoldWS :\r
205                                 return RNAALIFOLD_INFO.getReference();\r
206                         default :\r
207                                 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");\r
208                 }\r
209         }\r
210 \r
211         public String getServiceVersion() {\r
212                 switch (this) {\r
213                         case AAConWS :\r
214                                 return AACON_INFO.getVersion();\r
215                         case JpredWS :\r
216                                 return JPRED_INFO.getVersion();\r
217                         case ClustalOWS :\r
218                                 return CLUSTAL_OMEGA_INFO.getVersion();\r
219                         case ClustalWS :\r
220                                 return CLUSTAL_INFO.getVersion();\r
221                         case DisemblWS :\r
222                                 return DISEMBL_INFO.getVersion();\r
223                         case GlobPlotWS :\r
224                                 return GLOBPLOT_INFO.getVersion();\r
225                         case IUPredWS :\r
226                                 return IUPRED_INFO.getVersion();\r
227                         case JronnWS :\r
228                                 return JRONN_INFO.getVersion();\r
229                         case MafftWS :\r
230                                 return MAFFT_INFO.getVersion();\r
231                         case MuscleWS :\r
232                                 return MUSCLE_INFO.getVersion();\r
233                         case ProbconsWS :\r
234                                 return PROBCONS_INFO.getVersion();\r
235                         case MSAprobsWS :\r
236                                 return MSAPROBS_INFO.getVersion();\r
237                         case GLprobsWS :\r
238                                 return GLPROBS_INFO.getVersion();\r
239                         case TcoffeeWS :\r
240                                 return TCOFFEE_INFO.getVersion();\r
241                         case RNAalifoldWS :\r
242                                 return RNAALIFOLD_INFO.getVersion();\r
243                         default :\r
244                                 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");\r
245                 }\r
246         }\r
247 \r
248         public String getServiceGroup() {\r
249                 switch (this) {\r
250                         case AAConWS :\r
251                                 return "annotation";\r
252                         case JpredWS :\r
253                                 return "annotation";\r
254                         case ClustalOWS :\r
255                                 return "alignment";\r
256                         case ClustalWS :\r
257                                 return "alignment";\r
258                         case DisemblWS :\r
259                                 return "disorder";\r
260                         case GlobPlotWS :\r
261                                 return "disorder";\r
262                         case IUPredWS :\r
263                                 return "disorder";\r
264                         case JronnWS :\r
265                                 return "disorder";\r
266                         case MafftWS :\r
267                                 return "alignment";\r
268                         case MuscleWS :\r
269                                 return "alignment";\r
270                         case ProbconsWS :\r
271                                 return "alignment";\r
272                         case GLprobsWS :\r
273                                 return "alignment";\r
274                         case MSAprobsWS :\r
275                                 return "alignment";\r
276                         case TcoffeeWS :\r
277                                 return "alignment";\r
278                         case RNAalifoldWS :\r
279                                 return "annotation";\r
280                         default :\r
281                                 throw new RuntimeException("Unrecognised Web Service Type " + this + " - Should never happen!");\r
282                 }\r
283         }\r
284         \r
285         static ServiceInfo AACON_INFO = new ServiceInfo(AAConWS,\r
286                         "in preparation", "1.0", "http://www.compbio.dundee.ac.uk/aacon");\r
287 \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
293         \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
299 \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
305 \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
311 \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
317 \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
323 \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
329 \r
330         static ServiceInfo MUSCLE_INFO = new ServiceInfo(MuscleWS,\r
331                         "Edgar RC,\r\n"+ \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
335 \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
341 \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
347 \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
353 \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
359 \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
365 \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
374 \r
375         @XmlAccessorType(XmlAccessType.FIELD)\r
376         static class ServiceInfo {\r
377                 Services service;\r
378                 String reference;\r
379                 String version;\r
380                 String moreinfo;\r
381                 final static String line_delimiter = "\n";\r
382 \r
383                 private ServiceInfo() {\r
384                         // Default constructor for JAXB\r
385                 }\r
386                 private ServiceInfo(Services service, String reference, String version,\r
387                                 String moreinfo) {\r
388                         this.service = service;\r
389                         this.reference = reference;\r
390                         this.version = version;\r
391                         this.moreinfo = moreinfo;\r
392                 }\r
393 \r
394                 @Override\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
400                         return value;\r
401                 }\r
402 \r
403                 public String getReference() {\r
404                         return "REFERENCE: " + reference + line_delimiter + "<br>MORE INFORMATION: " + moreinfo + line_delimiter;\r
405                 }\r
406 \r
407                 public String getVersion() {\r
408                         return version;\r
409                 }\r
410         }\r
411 \r
412         public static void main(String[] args) {\r
413                 System.out.println(MUSCLE_INFO);\r
414         }\r
415 }\r