Fix problem with test data for RNAalifold
[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\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, AAConWS,\r
43         JronnWS, DisemblWS, GlobPlotWS, IUPredWS, RNAalifoldWS;\r
44 \r
45         public static Services getService(String servName) {\r
46                 servName = servName.trim().toLowerCase();\r
47                 for (Services service : Services.values()) {\r
48                         if (service.toString().equalsIgnoreCase(servName)) {\r
49                                 return service;\r
50                         }\r
51                 }\r
52                 return null;\r
53         }\r
54 \r
55         Service getService(URL url, String sqname) {\r
56                 QName qname = new QName(sqname, this.toString());\r
57                 return Service.create(url, qname);\r
58         }\r
59 \r
60         public static String toString(Set<Services> services) {\r
61                 if (services == null || services.isEmpty()) {\r
62                         return "";\r
63                 }\r
64                 String value = "";\r
65                 String delim = ", ";\r
66                 for (Services serv : services) {\r
67                         value += serv.toString() + delim;\r
68                 }\r
69                 value = value.substring(0, value.length() - delim.length());\r
70                 return value;\r
71         }\r
72 \r
73         Class<? extends JABAService> getServiceType() {\r
74                 switch (this) {\r
75                         // deliberate leaking\r
76                         case AAConWS :\r
77                         case JronnWS :\r
78                         case DisemblWS :\r
79                         case GlobPlotWS :\r
80                         case IUPredWS :\r
81                         case RNAalifoldWS :\r
82                                 return SequenceAnnotation.class;\r
83 \r
84                                 // deliberate leaking\r
85                         case ClustalWS :\r
86                         case ClustalOWS :\r
87                         case MafftWS :\r
88                         case MuscleWS :\r
89                         case ProbconsWS :\r
90                         case TcoffeeWS :\r
91                                 return MsaWS.class;\r
92                                 \r
93                         default :\r
94                                 throw new RuntimeException("Unrecognised Web Service Type "\r
95                                                 + this + " - Should never happened!");\r
96                 }\r
97         }\r
98 \r
99         JABAService getInterface(Service service) {\r
100                 assert service != null;\r
101 \r
102                 QName portName = new QName(service.getServiceName().getNamespaceURI(),\r
103                                 this.toString() + "Port");\r
104                 return service.getPort(portName, this.getServiceType());\r
105         }\r
106 \r
107         public String getServiceInfo() {\r
108                 switch (this) {\r
109                         case AAConWS :\r
110                                 return AACON_INFO;\r
111                         case ClustalOWS :\r
112                                 return CLUSTAL_OMEGA_INFO;\r
113                         case ClustalWS :\r
114                                 return CLUSTAL_INFO;\r
115                         case DisemblWS :\r
116                                 return DISEMBL_INFO;\r
117                         case GlobPlotWS :\r
118                                 return GLOBPLOT_INFO;\r
119                         case IUPredWS :\r
120                                 return IUPRED_INFO;\r
121                         case JronnWS :\r
122                                 return JRONN_INFO;\r
123                         case MafftWS :\r
124                                 return MAFFT_INFO;\r
125                         case MuscleWS :\r
126                                 return MUSCLE_INFO;\r
127                         case ProbconsWS :\r
128                                 return PROBCONS_INFO;\r
129                         case TcoffeeWS :\r
130                                 return TCOFFEE_INFO;\r
131                         case RNAalifoldWS :\r
132                                 return RNAALIFOLD_INFO;\r
133                         default :\r
134                                 throw new RuntimeException("Unrecognised Web Service Type "\r
135                                                 + this + " - Should never happened!");\r
136                 }\r
137         }\r
138 \r
139         public static final String AACON_INFO = new ServiceInfo(AAConWS,\r
140                         "in preparation", "1.0", "http://www.compbio.dundee.ac.uk/aacon")\r
141                         .toString();\r
142         public static final String CLUSTAL_INFO = new ServiceInfo(\r
143                         ClustalWS,\r
144                         "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
145                                         + "(2007). Clustal W and Clustal X version 2.0. Bioinformatics, 23, 2947-2948. ",\r
146                         "2.0.12", "http://www.clustal.org/clustal2/").toString();\r
147         public static final String CLUSTAL_OMEGA_INFO = new ServiceInfo(\r
148                         ClustalOWS,\r
149                         "Fast, scalable generation of high quality protein multiple sequence alignments using Clustal Omega\r\n"\r
150                                         + "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
151                         "1.0.2", "http://www.clustal.org/omega").toString();\r
152         public static final String DISEMBL_INFO = new ServiceInfo(\r
153                         DisemblWS,\r
154                         "R. Linding, L.J. Jensen, F. Diella, P. Bork, T.J. Gibson and R.B. Russell\r\n"\r
155                                         + "Protein disorder prediction: implications for structural proteomics\r\n"\r
156                                         + "Structure Vol 11, Issue 11, 4 November 2003", "1.5",\r
157                         "http://dis.embl.de/").toString();\r
158         public static final String GLOBPLOT_INFO = new ServiceInfo(\r
159                         GlobPlotWS,\r
160                         "Rune Linding, Robert B. Russell, Victor Neduva and Toby J. Gibson "\r
161                                         + "'GlobPlot: exploring protein sequences for globularity and disorder.' Nucl. Acids Res. (2003) 31 (13): 3701-3708. doi: 10.1093/nar/gkg519\r\n",\r
162                         "2.3", "http://globplot.embl.de/").toString();\r
163         public static final String IUPRED_INFO = new ServiceInfo(\r
164                         IUPredWS,\r
165                         "The Pairwise Energy Content Estimated from Amino Acid Composition Discriminates between Folded and Intrinsically Unstructured Proteins\r\n"\r
166                                         + "Zsuzsanna Dosztányi, Veronika Csizmók, Péter Tompa and István Simon\r\n"\r
167                                         + "J. Mol. Biol. (2005) 347, 827-839.", "1.0",\r
168                         "http://iupred.enzim.hu/").toString();\r
169         public static final String TCOFFEE_INFO = new ServiceInfo(TcoffeeWS,\r
170                         "T-Coffee: A novel method for multiple sequence alignments  "\r
171                                         + "Notredame, Higgins, Heringa, JMB, 302 (205-217) 2000",\r
172                         "8.99", "http://tcoffee.crg.cat/apps/tcoffee/index.html")\r
173                         .toString();\r
174         public static final String MUSCLE_INFO = new ServiceInfo(\r
175                         MuscleWS,\r
176                         "Edgar, R.C. (2004) MUSCLE: multiple sequence alignment with high accuracy and high throughput.Nucleic Acids Res. 32(5):1792-1797.\r\n"\r
177                                         + "doi:10.1093/nar/gkh340", "3.8.31",\r
178                         "http://www.drive5.com/muscle/").toString();\r
179         public static final String PROBCONS_INFO = new ServiceInfo(\r
180                         ProbconsWS,\r
181                         "Do, C.B., Mahabhashyam, M.S.P., Brudno, M., and Batzoglou, S. 2005. PROBCONS: "\r
182                                         + "Probabilistic Consistency-based Multiple Sequence Alignment. Genome Research 15: 330-340. ",\r
183                         "1.12", "http://probcons.stanford.edu/").toString();;\r
184         public static final String JRONN_INFO = new ServiceInfo(\r
185                         JronnWS,\r
186                         "unpublished, original algorithm Yang,Z.R., Thomson,R., McMeil,P. and Esnouf,R.M. (2005) "\r
187                                         + "RONN: the bio-basis function neural network technique applied to the "\r
188                                         + "dectection of natively disordered regions in proteins Bioinformatics 21: 3369-3376\r\n",\r
189                         "1.0", "http://www.compbio.dundee.ac.uk/jabaws/").toString();;\r
190         public static final String MAFFT_INFO = new ServiceInfo(\r
191                         MafftWS,\r
192                         "Katoh, Toh 2010 (Bioinformatics 26:1899-1900)\r\n"\r
193                                         + "Parallelization of the MAFFT multiple sequence alignment program. ",\r
194                         "6.8.57", "http://mafft.cbrc.jp/alignment/software/").toString();;\r
195 \r
196         // TODO reference\r
197         public static final String RNAALIFOLD_INFO = new ServiceInfo(\r
198                         RNAalifoldWS,\r
199                         "Ivo L. Hofacker, Martin Fekete, and Peter F. Stadler 'Secondary Structure Prediction"\r
200                         + " for Aligned RNA Sequences'. J.Mol.Biol. 319: 1059-1066, 2002. Stephan H. Bernhart,"\r
201                         + " Ivo L. Hofacker, Sebastian Will, Andreas R. Gruber, and Peter F. Stadler. "\r
202                         + "'RNAalifold: Improved consensus structure prediction for RNA alignments'. BMC Bioinformatics, 9:474, 2008.\r\n",\r
203                         "2.1.2", "http://www.tbi.univie.ac.at/RNA/").toString();;\r
204                         \r
205         @XmlAccessorType(XmlAccessType.FIELD)\r
206         static class ServiceInfo {\r
207                 Services service;\r
208                 String reference;\r
209                 String version;\r
210                 String moreinfo;\r
211                 final static String jabaws_version = "2.0";\r
212                 final static String line_delimiter = "\n";\r
213 \r
214                 private ServiceInfo() {\r
215                         // Default constructor for JAXB\r
216                 }\r
217                 private ServiceInfo(Services service, String reference, String version,\r
218                                 String moreinfo) {\r
219                         this.service = service;\r
220                         this.reference = reference;\r
221                         this.version = version;\r
222                         this.moreinfo = moreinfo;\r
223                 }\r
224 \r
225                 @Override\r
226                 public String toString() {\r
227                         String value = "SERVICE: " + service + " version " + version\r
228                                         + line_delimiter;\r
229                         value += "JABAWS v. " + jabaws_version + line_delimiter;\r
230                         value += "REFERENCES: " + reference + line_delimiter;\r
231                         value += "MORE INFORMATION: " + moreinfo + line_delimiter;\r
232                         return value;\r
233                 }\r
234         }\r
235 \r
236         public static void main(String[] args) {\r
237                 System.out.println(MUSCLE_INFO);\r
238         }\r
239 }