New class
authoramwaterhouse <Andrew Waterhouse>
Mon, 7 Feb 2005 17:09:57 +0000 (17:09 +0000)
committeramwaterhouse <Andrew Waterhouse>
Mon, 7 Feb 2005 17:09:57 +0000 (17:09 +0000)
src/jalview/io/EBIFetchClient.java [new file with mode: 0755]

diff --git a/src/jalview/io/EBIFetchClient.java b/src/jalview/io/EBIFetchClient.java
new file mode 100755 (executable)
index 0000000..be2f01e
--- /dev/null
@@ -0,0 +1,160 @@
+package jalview.io;\r
+\r
+import org.apache.axis.client.*;\r
+\r
+import java.io.*;\r
+\r
+import javax.activation.DataHandler;\r
+import org.apache.axis.AxisFault;\r
+import org.apache.axis.encoding.XMLType;\r
+import javax.xml.rpc.ParameterMode;\r
+import javax.xml.namespace.QName;\r
+import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;\r
+import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;\r
+\r
+\r
+public class EBIFetchClient\r
+{\r
+  Call call;\r
+  String format = "default";\r
+  String style = "raw";\r
+\r
+  public EBIFetchClient()\r
+  {\r
+    try{\r
+      call = (Call)new Service().createCall();\r
+      call.setTargetEndpointAddress(new java.net.URL(\r
+          "http://www.ebi.ac.uk/ws/services/Dbfetch"));\r
+    }catch(Exception ex){}\r
+  }\r
+\r
+\r
+  public String []  getSupportedDBs()\r
+  {\r
+       try{\r
+\r
+         call.setOperationName(new QName("urn:Dbfetch", "getSupportedDBs"));\r
+         call.setReturnType(XMLType.SOAP_ARRAY);\r
+         return (String[]) call.invoke(new Object[]{});\r
+\r
+       }catch(Exception ex){return null;}\r
+  }\r
+\r
+  public String [] getSupportedFormats()\r
+  {\r
+      try{\r
+        call.setOperationName(new QName("urn:Dbfetch", "getSupportedFormats"));\r
+        call.setReturnType(XMLType.SOAP_ARRAY);\r
+        return (String[]) call.invoke(new Object[] {});\r
+\r
+      }catch(Exception ex){ return null; }\r
+   }\r
+\r
+   public String [] getSupportedStyles()\r
+   {\r
+        try{\r
+          call.setOperationName(new QName("urn:Dbfetch", "getSupportedStyles"));\r
+          call.setReturnType(XMLType.SOAP_ARRAY);\r
+          return (String[]) call.invoke(new Object[] {});\r
+\r
+         }catch(Exception ex){return null;}\r
+    }\r
+\r
+    public String [] fetchData(String ids, String f, String s)\r
+    {\r
+      // ids should be of the form uniprot:25KD_SARPE;ADHR_DROPS;\r
+      // max 50 ids can be added at one time\r
+      try{\r
+        call.setOperationName(new QName("urn:Dbfetch", "fetchData"));\r
+        call.addParameter("query", XMLType.XSD_STRING, ParameterMode.IN);\r
+        call.addParameter("format", XMLType.XSD_STRING, ParameterMode.IN);\r
+        call.addParameter("style", XMLType.XSD_STRING, ParameterMode.IN);\r
+        call.setReturnType(XMLType.SOAP_ARRAY);\r
+\r
+        if (f != null)\r
+          format = f;\r
+\r
+        if (s != null)\r
+          style = s;\r
+\r
+        return (String[]) call.invoke(new Object[] {ids, format, style});\r
+\r
+      }catch(Exception ex){return null;}\r
+\r
+    }\r
+\r
+    public String fetchDataFile(String arg, String f, String s)\r
+    {\r
+\r
+      if (f != null)\r
+        format = f;\r
+\r
+      if (s != null)\r
+        style = s;\r
+\r
+\r
+      call.setOperationName(new QName("urn:Dbfetch", "fetchDataFile"));\r
+      call.addParameter("query", XMLType.XSD_STRING, ParameterMode.IN);\r
+      call.addParameter("format", XMLType.XSD_STRING, ParameterMode.IN);\r
+      call.addParameter("style", XMLType.XSD_STRING, ParameterMode.IN);\r
+\r
+      QName qnameAttachment = new QName("urn:Dbfetch", "DataHandler");\r
+      call.registerTypeMapping(javax.activation.DataSource.class,\r
+                               qnameAttachment,\r
+                               JAFDataHandlerSerializerFactory.class,\r
+                               JAFDataHandlerDeserializerFactory.class);\r
+\r
+      call.setReturnType(qnameAttachment);\r
+\r
+      try{\r
+        Object ret = call.invoke(new Object[]\r
+                                 {arg, format, style});\r
+\r
+        if (null == ret)\r
+        {\r
+          System.out.println("Received null ");\r
+          throw new AxisFault("", "Received null", null, null);\r
+        }\r
+        if (ret instanceof String)\r
+        {\r
+          System.out.println("Received problem response from server: " + ret);\r
+          throw new AxisFault("", (String) ret, null, null);\r
+        }\r
+        if (! (ret instanceof DataHandler))\r
+        {\r
+          //The wrong type of object that what was expected.\r
+          System.out.println("Received problem response from server:" +\r
+                             ret.getClass().getName());\r
+          throw new AxisFault("", "Received problem response from server:" +\r
+                              ret.getClass().getName(), null, null);\r
+\r
+        }\r
+        //Still here, so far so good.\r
+        DataHandler rdh = (DataHandler) ret;\r
+\r
+        //From here we'll just treat the data resource as file.\r
+        String receivedfileName = rdh.getName(); //Get the filename.\r
+\r
+        if (receivedfileName == null)\r
+        {\r
+          System.err.println("Could not get the file name.");\r
+          throw new AxisFault("", "Could not get the file name.", null, null);\r
+        }\r
+        if (arg.equalsIgnoreCase("medline"))\r
+        {\r
+          return receivedfileName;\r
+        }\r
+        else if (arg.equalsIgnoreCase("interpro"))\r
+        {\r
+          return receivedfileName;\r
+        }\r
+        else\r
+          System.out.println(receivedfileName);\r
+      }catch(Exception ex)\r
+      {}\r
+\r
+      return "ERROR";\r
+    }\r
+\r
+\r
+}\r