db3435772166af648797081efddcb905746425b7
[jalview.git] / src / jalview / io / EBIFetchClient.java
1 package jalview.io;\r
2 \r
3 import org.apache.axis.client.*;\r
4 \r
5 import java.io.*;\r
6 \r
7 import javax.activation.DataHandler;\r
8 import org.apache.axis.AxisFault;\r
9 import org.apache.axis.encoding.XMLType;\r
10 import javax.xml.rpc.ParameterMode;\r
11 import javax.xml.namespace.QName;\r
12 import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;\r
13 import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;\r
14 \r
15 \r
16 public class EBIFetchClient\r
17 {\r
18   Call call;\r
19   String format = "default";\r
20   String style = "raw";\r
21 \r
22   public EBIFetchClient()\r
23   {\r
24     try{\r
25       call = (Call)new Service().createCall();\r
26       call.setTargetEndpointAddress(new java.net.URL(\r
27           "http://www.ebi.ac.uk/ws/services/Dbfetch"));\r
28     }catch(Exception ex){}\r
29   }\r
30 \r
31 \r
32   public String []  getSupportedDBs()\r
33   {\r
34        try{\r
35 \r
36          call.setOperationName(new QName("urn:Dbfetch", "getSupportedDBs"));\r
37          call.setReturnType(XMLType.SOAP_ARRAY);\r
38          return (String[]) call.invoke(new Object[]{});\r
39 \r
40        }catch(Exception ex){return null;}\r
41   }\r
42 \r
43   public String [] getSupportedFormats()\r
44   {\r
45       try{\r
46         call.setOperationName(new QName("urn:Dbfetch", "getSupportedFormats"));\r
47         call.setReturnType(XMLType.SOAP_ARRAY);\r
48         return (String[]) call.invoke(new Object[] {});\r
49 \r
50       }catch(Exception ex){ return null; }\r
51    }\r
52 \r
53    public String [] getSupportedStyles()\r
54    {\r
55         try{\r
56           call.setOperationName(new QName("urn:Dbfetch", "getSupportedStyles"));\r
57           call.setReturnType(XMLType.SOAP_ARRAY);\r
58           return (String[]) call.invoke(new Object[] {});\r
59 \r
60          }catch(Exception ex){return null;}\r
61     }\r
62 \r
63     public String [] fetchData(String ids, String f, String s)\r
64     {\r
65       // ids should be of the form uniprot:25KD_SARPE;ADHR_DROPS;\r
66       // max 50 ids can be added at one time\r
67       try{\r
68         call.setOperationName(new QName("urn:Dbfetch", "fetchData"));\r
69         call.addParameter("query", XMLType.XSD_STRING, ParameterMode.IN);\r
70         call.addParameter("format", XMLType.XSD_STRING, ParameterMode.IN);\r
71         call.addParameter("style", XMLType.XSD_STRING, ParameterMode.IN);\r
72         call.setReturnType(XMLType.SOAP_ARRAY);\r
73 \r
74         if (f != null)\r
75           format = f;\r
76 \r
77         if (s != null)\r
78           style = s;\r
79 \r
80         return (String[]) call.invoke(new Object[] {ids, format, style});\r
81 \r
82       }catch(Exception ex){return null;}\r
83 \r
84     }\r
85 \r
86     public String fetchDataFile(String arg, String f, String s)\r
87     {\r
88 \r
89       if (f != null)\r
90         format = f;\r
91 \r
92       if (s != null)\r
93         style = s;\r
94 \r
95 \r
96       call.setOperationName(new QName("urn:Dbfetch", "fetchDataFile"));\r
97       call.addParameter("query", XMLType.XSD_STRING, ParameterMode.IN);\r
98       call.addParameter("format", XMLType.XSD_STRING, ParameterMode.IN);\r
99       call.addParameter("style", XMLType.XSD_STRING, ParameterMode.IN);\r
100 \r
101       QName qnameAttachment = new QName("urn:Dbfetch", "DataHandler");\r
102       call.registerTypeMapping(javax.activation.DataSource.class,\r
103                                qnameAttachment,\r
104                                JAFDataHandlerSerializerFactory.class,\r
105                                JAFDataHandlerDeserializerFactory.class);\r
106 \r
107       call.setReturnType(qnameAttachment);\r
108 \r
109       try{\r
110         Object ret = call.invoke(new Object[]\r
111                                  {arg, format, style});\r
112 \r
113         if (null == ret)\r
114         {\r
115           System.err.println("Received null ");\r
116           throw new AxisFault("", "Received null", null, null);\r
117         }\r
118         if (ret instanceof String)\r
119         {\r
120           System.err.println("Received problem response from server: " + ret);\r
121           throw new AxisFault("", (String) ret, null, null);\r
122         }\r
123         if (! (ret instanceof DataHandler))\r
124         {\r
125           //The wrong type of object that what was expected.\r
126           System.err.println("Received problem response from server:" +\r
127                              ret.getClass().getName());\r
128           throw new AxisFault("", "Received problem response from server:" +\r
129                               ret.getClass().getName(), null, null);\r
130 \r
131         }\r
132         //Still here, so far so good.\r
133         DataHandler rdh = (DataHandler) ret;\r
134 \r
135         //From here we'll just treat the data resource as file.\r
136         String receivedfileName = rdh.getName(); //Get the filename.\r
137 \r
138         if (receivedfileName == null)\r
139         {\r
140           System.err.println("Could not get the file name.");\r
141           throw new AxisFault("", "Could not get the file name.", null, null);\r
142         }\r
143         if (arg.equalsIgnoreCase("medline"))\r
144         {\r
145           return receivedfileName;\r
146         }\r
147         else if (arg.equalsIgnoreCase("interpro"))\r
148         {\r
149           return receivedfileName;\r
150         }\r
151         else\r
152           System.err.println(receivedfileName);\r
153       }catch(Exception ex)\r
154       {\r
155         ex.printStackTrace();\r
156       }\r
157 \r
158       return "ERROR";\r
159     }\r
160 \r
161 \r
162 }\r