After merge
[jalview.git] / src / jalview / io / EBIFetchClient.java
1 /*\r
2 * Jalview - A Sequence Alignment Editor and Viewer\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4 *\r
5 * This program is free software; you can redistribute it and/or\r
6 * modify it under the terms of the GNU General Public License\r
7 * as published by the Free Software Foundation; either version 2\r
8 * of the License, or (at your option) any later version.\r
9 *\r
10 * This program is distributed in the hope that it will be useful,\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 * GNU General Public License for more details.\r
14 *\r
15 * You should have received a copy of the GNU General Public License\r
16 * along with this program; if not, write to the Free Software\r
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18 */\r
19 package jalview.io;\r
20 \r
21 import java.io.*;\r
22 \r
23 import org.apache.axis.AxisFault;\r
24 import org.apache.axis.client.*;\r
25 import org.apache.axis.encoding.XMLType;\r
26 import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;\r
27 import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;\r
28 \r
29 import javax.activation.DataHandler;\r
30 \r
31 import javax.xml.namespace.QName;\r
32 import javax.xml.rpc.ParameterMode;\r
33 \r
34 \r
35 /**\r
36  * DOCUMENT ME!\r
37  *\r
38  * @author $author$\r
39  * @version $Revision$\r
40  */\r
41 public class EBIFetchClient\r
42 {\r
43     Call call;\r
44     String format = "default";\r
45     String style = "raw";\r
46 \r
47     /**\r
48      * Creates a new EBIFetchClient object.\r
49      */\r
50     public EBIFetchClient()\r
51     {\r
52         try\r
53         {\r
54             call = (Call) new Service().createCall();\r
55             call.setTargetEndpointAddress(new java.net.URL(\r
56                     "http://www.ebi.ac.uk/ws/services/Dbfetch"));\r
57         }\r
58         catch (Exception ex)\r
59         {\r
60         }\r
61     }\r
62 \r
63     /**\r
64      * DOCUMENT ME!\r
65      *\r
66      * @return DOCUMENT ME!\r
67      */\r
68     public String[] getSupportedDBs()\r
69     {\r
70         try\r
71         {\r
72             call.setOperationName(new QName("urn:Dbfetch", "getSupportedDBs"));\r
73             call.setReturnType(XMLType.SOAP_ARRAY);\r
74 \r
75             return (String[]) call.invoke(new Object[] {  });\r
76         }\r
77         catch (Exception ex)\r
78         {\r
79             return null;\r
80         }\r
81     }\r
82 \r
83     /**\r
84      * DOCUMENT ME!\r
85      *\r
86      * @return DOCUMENT ME!\r
87      */\r
88     public String[] getSupportedFormats()\r
89     {\r
90         try\r
91         {\r
92             call.setOperationName(new QName("urn:Dbfetch", "getSupportedFormats"));\r
93             call.setReturnType(XMLType.SOAP_ARRAY);\r
94 \r
95             return (String[]) call.invoke(new Object[] {  });\r
96         }\r
97         catch (Exception ex)\r
98         {\r
99             return null;\r
100         }\r
101     }\r
102 \r
103     /**\r
104      * DOCUMENT ME!\r
105      *\r
106      * @return DOCUMENT ME!\r
107      */\r
108     public String[] getSupportedStyles()\r
109     {\r
110         try\r
111         {\r
112             call.setOperationName(new QName("urn:Dbfetch", "getSupportedStyles"));\r
113             call.setReturnType(XMLType.SOAP_ARRAY);\r
114 \r
115             return (String[]) call.invoke(new Object[] {  });\r
116         }\r
117         catch (Exception ex)\r
118         {\r
119             return null;\r
120         }\r
121     }\r
122 \r
123     public static void main (String [] args)\r
124     {\r
125       EBIFetchClient ebi = new EBIFetchClient();\r
126       String[] result = ebi.fetchData("uniprot:25K89D_SARPE;G6PblobD_HUMAN",\r
127                            "xml", null);\r
128 \r
129      try{\r
130        java.io.PrintWriter out = new java.io.PrintWriter(\r
131       new java.io.FileWriter("out.xml"));\r
132 \r
133 \r
134        for(int i=0; i<result.length; i++)\r
135        {\r
136          out.println(result[i]);\r
137        }\r
138        out.close();\r
139      }catch(Exception ex){ex.printStackTrace();}\r
140 \r
141     }\r
142 \r
143 \r
144     public File fetchDataAsFile(String ids, String f, String s)\r
145     {\r
146       String [] data = fetchData(ids, f, s);\r
147       File outFile = null;\r
148       try{\r
149         outFile = File.createTempFile("jalview", ".xml");\r
150         outFile.deleteOnExit();\r
151         PrintWriter out = new PrintWriter(new FileOutputStream(outFile));\r
152         int index=0;\r
153         while( index < data.length )\r
154         {\r
155           out.println(data[index]);\r
156           index++;\r
157         }\r
158         out.close();\r
159       }catch(Exception ex){}\r
160       return outFile;\r
161     }\r
162 \r
163     /**\r
164      * DOCUMENT ME!\r
165      *\r
166      * @param ids DOCUMENT ME!\r
167      * @param f DOCUMENT ME!\r
168      * @param s DOCUMENT ME!\r
169      *\r
170      * @return DOCUMENT ME!\r
171      */\r
172     public String[] fetchData(String ids, String f, String s)\r
173     {\r
174         // ids should be of the form uniprot:25KD_SARPE;ADHR_DROPS;\r
175         // max 50 ids can be added at one time\r
176         try\r
177         {\r
178             call.setOperationName(new QName("urn:Dbfetch", "fetchData"));\r
179             call.addParameter("query", XMLType.XSD_STRING, ParameterMode.IN);\r
180             call.addParameter("format", XMLType.XSD_STRING, ParameterMode.IN);\r
181             call.addParameter("style", XMLType.XSD_STRING, ParameterMode.IN);\r
182             call.setReturnType(XMLType.SOAP_ARRAY);\r
183 \r
184             if (f != null)\r
185             {\r
186                 format = f;\r
187             }\r
188 \r
189             if (s != null)\r
190             {\r
191                 style = s;\r
192             }\r
193 \r
194             return (String[]) call.invoke(new Object[] { ids, format, style });\r
195         }\r
196         catch (Exception ex)\r
197         {\r
198             return null;\r
199         }\r
200     }\r
201 \r
202     /**\r
203      * DOCUMENT ME!\r
204      *\r
205      * @param arg DOCUMENT ME!\r
206      * @param f DOCUMENT ME!\r
207      * @param s DOCUMENT ME!\r
208      *\r
209      * @return DOCUMENT ME!\r
210      */\r
211     public String fetchDataFile(String arg, String f, String s)\r
212     {\r
213         if (f != null)\r
214         {\r
215             format = f;\r
216         }\r
217 \r
218         if (s != null)\r
219         {\r
220             style = s;\r
221         }\r
222 \r
223         call.setOperationName(new QName("urn:Dbfetch", "fetchDataFile"));\r
224         call.addParameter("query", XMLType.XSD_STRING, ParameterMode.IN);\r
225         call.addParameter("format", XMLType.XSD_STRING, ParameterMode.IN);\r
226         call.addParameter("style", XMLType.XSD_STRING, ParameterMode.IN);\r
227 \r
228         QName qnameAttachment = new QName("urn:Dbfetch", "DataHandler");\r
229         call.registerTypeMapping(javax.activation.DataSource.class,\r
230             qnameAttachment, JAFDataHandlerSerializerFactory.class,\r
231             JAFDataHandlerDeserializerFactory.class);\r
232 \r
233         call.setReturnType(qnameAttachment);\r
234 \r
235         try\r
236         {\r
237             Object ret = call.invoke(new Object[] { arg, format, style });\r
238 \r
239             if (null == ret)\r
240             {\r
241                 System.err.println("Received null ");\r
242                 throw new AxisFault("", "Received null", null, null);\r
243             }\r
244 \r
245             if (ret instanceof String)\r
246             {\r
247                 System.err.println("Received problem response from server: " +\r
248                     ret);\r
249                 throw new AxisFault("", (String) ret, null, null);\r
250             }\r
251 \r
252             if (!(ret instanceof DataHandler))\r
253             {\r
254                 //The wrong type of object that what was expected.\r
255                 System.err.println("Received problem response from server:" +\r
256                     ret.getClass().getName());\r
257                 throw new AxisFault("",\r
258                     "Received problem response from server:" +\r
259                     ret.getClass().getName(), null, null);\r
260             }\r
261 \r
262             //Still here, so far so good.\r
263             DataHandler rdh = (DataHandler) ret;\r
264 \r
265             //From here we'll just treat the data resource as file.\r
266             String receivedfileName = rdh.getName(); //Get the filename.\r
267 \r
268             if (receivedfileName == null)\r
269             {\r
270                 System.err.println("Could not get the file name.");\r
271                 throw new AxisFault("", "Could not get the file name.", null,\r
272                     null);\r
273             }\r
274 \r
275             if (arg.equalsIgnoreCase("medline"))\r
276             {\r
277                 return receivedfileName;\r
278             }\r
279             else if (arg.equalsIgnoreCase("interpro"))\r
280             {\r
281                 return receivedfileName;\r
282             }\r
283             else\r
284             {\r
285                 System.err.println(receivedfileName);\r
286             }\r
287         }\r
288         catch (Exception ex)\r
289         {\r
290             ex.printStackTrace();\r
291         }\r
292 \r
293         return "ERROR";\r
294     }\r
295 }\r