JAL-3026 implements simple REST client
authorhansonr <hansonr@stolaf.edu>
Wed, 4 Jul 2018 03:42:41 +0000 (04:42 +0100)
committerhansonr <hansonr@stolaf.edu>
Wed, 4 Jul 2018 03:42:41 +0000 (04:42 +0100)
new transpiler adds support for  try(resource);

src/jalview/fts/core/FTSRestClient.java
src/jalview/fts/service/pdb/PDBFTSRestClient.java
src/jalview/javascript/web/Client.java [new file with mode: 0644]
src/jalview/javascript/web/ClientResponse.java [new file with mode: 0644]
src/jalview/javascript/web/WebResource.java [new file with mode: 0644]
swingjs/net.sf.j2s.core.jar

index f94d455..f088a90 100644 (file)
@@ -68,7 +68,7 @@ public abstract class FTSRestClient implements FTSRestClientI
 
     InputStream in = getClass().getResourceAsStream(fileName);
 
-    try (BufferedReader br = new BufferedReader(new InputStreamReader(in)))
+    try (BufferedReader br = new BufferedReader(new InputStreamReader(in))) 
     {
       String line;
       while ((line = br.readLine()) != null)
index cbeaff1..a03cf14 100644 (file)
@@ -29,6 +29,7 @@ import jalview.fts.core.FTSRestRequest;
 import jalview.fts.core.FTSRestResponse;
 import jalview.util.MessageManager;
 
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
@@ -42,15 +43,24 @@ import org.json.simple.JSONObject;
 import org.json.simple.parser.JSONParser;
 import org.json.simple.parser.ParseException;
 
+//import jalview.javascript.web.Client;
+//import jalview.javascript.web.ClientResponse;
+//import jalview.javascript.web.WebResource;
+
 import com.sun.jersey.api.client.Client;
 import com.sun.jersey.api.client.ClientResponse;
 import com.sun.jersey.api.client.WebResource;
+
 import com.sun.jersey.api.client.config.ClientConfig;
 import com.sun.jersey.api.client.config.DefaultClientConfig;
 
 /**
  * A rest client for querying the Search endpoint of the PDB API
  * 
+ * BH 2018: just a tiny tweak here - for SwingJS, we coerce the classes to be
+ * from jalview.javascript.web instead of com.sun.jersey.api.client
+ * 
+ * 
  * @author tcnofoegbu
  *
  */
@@ -73,14 +83,15 @@ public class PDBFTSRestClient extends FTSRestClient
    * @return the pdbResponse object for the given request
    * @throws Exception
    */
+  @SuppressWarnings("unused")
   @Override
   public FTSRestResponse executeRequest(FTSRestRequest pdbRestRequest)
           throws Exception
   {
     try
     {
-      ClientConfig clientConfig = new DefaultClientConfig();
-      Client client = Client.create(clientConfig);
+      Client client;
+      WebResource webResource;
 
       String wantedFields = getDataColumnsFieldsAsCommaDelimitedString(
               pdbRestRequest.getWantedFields());
@@ -122,8 +133,18 @@ public class PDBFTSRestClient extends FTSRestClient
               + (pdbRestRequest.isAllowUnpublishedEntries() ? ""
                       : " AND status:REL");
 
-      // Build request parameters for the REST Request
-      WebResource webResource = null;
+      if (/** @j2sNative true || */
+      false)
+      {
+        client = (Client) (Object) new jalview.javascript.web.Client();
+      }
+      else
+      {
+        // Build request parameters for the REST Request
+        ClientConfig clientConfig = new DefaultClientConfig();
+        client = Client.create(clientConfig);
+      }
+
       if (pdbRestRequest.isFacet())
       {
         webResource = client.resource(PDB_SEARCH_ENDPOINT)
@@ -143,6 +164,9 @@ public class PDBFTSRestClient extends FTSRestClient
                 .queryParam("start", String.valueOf(offSet))
                 .queryParam("q", query).queryParam("sort", sortParam);
       }
+
+      URI uri = webResource.getURI();
+
       // Execute the REST request
       ClientResponse clientResponse = webResource
               .accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
@@ -209,6 +233,26 @@ public class PDBFTSRestClient extends FTSRestClient
     StringBuilder errorMessage = new StringBuilder(
             "\n============= PDB Rest Client RunTime error =============\n");
 
+    
+//    {
+//      "responseHeader":{
+//        "status":0,
+//        "QTime":0,
+//        "params":{
+//          "q":"(text:q93xj9_soltu) AND molecule_sequence:['' TO *] AND status:REL",
+//          "fl":"pdb_id,title,experimental_method,resolution",
+//          "start":"0",
+//          "sort":"overall_quality desc",
+//          "rows":"500",
+//          "wt":"json"}},
+//      "response":{"numFound":1,"start":0,"docs":[
+//          {
+//            "experimental_method":["X-ray diffraction"],
+//            "pdb_id":"4zhp",
+//            "resolution":2.46,
+//            "title":"The crystal structure of Potato ferredoxin I with 2Fe-2S cluster"}]
+//      }}
+//    
     try
     {
       JSONParser jsonParser = new JSONParser();
diff --git a/src/jalview/javascript/web/Client.java b/src/jalview/javascript/web/Client.java
new file mode 100644 (file)
index 0000000..d33d62c
--- /dev/null
@@ -0,0 +1,18 @@
+package jalview.javascript.web;
+
+import com.sun.jersey.api.client.config.ClientConfig;
+
+public class Client
+{
+
+  public static Client create(ClientConfig clientConfig) 
+  {
+    return new Client();
+  }
+
+  public WebResource resource(String endpoint)
+  {
+    return new WebResource(endpoint);
+  }
+
+}
diff --git a/src/jalview/javascript/web/ClientResponse.java b/src/jalview/javascript/web/ClientResponse.java
new file mode 100644 (file)
index 0000000..e33dd98
--- /dev/null
@@ -0,0 +1,54 @@
+package jalview.javascript.web;
+
+import java.net.URI;
+
+public class ClientResponse
+{
+  
+  private String response;
+  private String encoding;
+
+  public ClientResponse(String response, String encoding) 
+  {
+    this.response = response;
+    this.encoding = encoding;
+  }
+
+  public String getEntity(Class<?> c)
+  {  
+    
+    // c will be String.class
+    
+    return response;
+  }
+
+  // https://www.ebi.ac.uk/pdbe/search/pdb/select?wt=json&fl=pdb_id,title,experimental_method,resolution&rows=500&start=0&q=(text:q93xj9_soltu)+AND+molecule_sequence:%5B%27%27+TO+*%5D+AND+status:REL&sort=overall_quality+desc
+  
+//{
+//"responseHeader":{
+//  "status":0,
+//  "QTime":0,
+//  "params":{
+//    "q":"(text:q93xj9_soltu) AND molecule_sequence:['' TO *] AND status:REL",
+//    "fl":"pdb_id,title,experimental_method,resolution",
+//    "start":"0",
+//    "sort":"overall_quality desc",
+//    "rows":"500",
+//    "wt":"json"}},
+//"response":{"numFound":1,"start":0,"docs":[
+//    {
+//      "experimental_method":["X-ray diffraction"],
+//      "pdb_id":"4zhp",
+//      "resolution":2.46,
+//      "title":"The crystal structure of Potato ferredoxin I with 2Fe-2S cluster"}]
+//}}
+//
+
+  public int getStatus()
+  {
+    // note, we could get the actual response. I am just assuming it is 200 or 400
+    return (response != null && (response.startsWith("{") == encoding.equals("application/json"))
+            ? 200 : 400);
+  }
+
+}
diff --git a/src/jalview/javascript/web/WebResource.java b/src/jalview/javascript/web/WebResource.java
new file mode 100644 (file)
index 0000000..299c727
--- /dev/null
@@ -0,0 +1,68 @@
+package jalview.javascript.web;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+public class WebResource
+{
+
+  private String endpoint, params = "";
+  
+  public WebResource(String endpoint) {
+    this.endpoint = endpoint;
+  }
+  
+
+  public WebResource queryParam(String key, String value)
+  {
+    params += (params == "" ? "?" : "&") + key + "=";
+    /**
+     * @j2sNative
+     * value = encodeURIComonent(value);
+     */
+    params += value;
+    return this;
+  }
+
+  public URI getURI()
+  {
+    try
+    {
+      return new URI(endpoint + params);
+    } catch (URISyntaxException e)
+    {
+      e.printStackTrace();
+      return null;
+    }
+  }
+
+  public Builder accept(String encoding)
+  {
+    return  new Builder(getURI(), encoding);
+  }
+  
+  
+  public static class Builder {
+      private URI uri;
+      private String encoding;
+
+      public Builder(URI uri, String encoding)
+    {
+        this.uri = uri;
+        this.encoding = encoding; // application/json
+        
+      // TODO Auto-generated constructor stub
+    }
+
+      public ClientResponse get(Class<?> c) {
+        String data = uri.toString();
+        // c will be ClientResponse 
+        data = /** @j2sNative swingjs.JSUtil.getFileAsString$S(data) || */ null;
+        return new ClientResponse(data, encoding);
+      }
+  }
+  
+  
+
+}
index 93a70ee..ce4c218 100644 (file)
Binary files a/swingjs/net.sf.j2s.core.jar and b/swingjs/net.sf.j2s.core.jar differ