From: hansonr Date: Wed, 4 Jul 2018 03:42:41 +0000 (+0100) Subject: JAL-3026 implements simple REST client X-Git-Tag: Release_2_11_4_0~45^2~18^2~589 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=5a256ef0ca648a8f4722da20475cbd01655d9de4;p=jalview.git JAL-3026 implements simple REST client new transpiler adds support for try(resource); --- diff --git a/src/jalview/fts/core/FTSRestClient.java b/src/jalview/fts/core/FTSRestClient.java index f94d455..f088a90 100644 --- a/src/jalview/fts/core/FTSRestClient.java +++ b/src/jalview/fts/core/FTSRestClient.java @@ -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) diff --git a/src/jalview/fts/service/pdb/PDBFTSRestClient.java b/src/jalview/fts/service/pdb/PDBFTSRestClient.java index cbeaff1..a03cf14 100644 --- a/src/jalview/fts/service/pdb/PDBFTSRestClient.java +++ b/src/jalview/fts/service/pdb/PDBFTSRestClient.java @@ -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 index 0000000..d33d62c --- /dev/null +++ b/src/jalview/javascript/web/Client.java @@ -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 index 0000000..e33dd98 --- /dev/null +++ b/src/jalview/javascript/web/ClientResponse.java @@ -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 index 0000000..299c727 --- /dev/null +++ b/src/jalview/javascript/web/WebResource.java @@ -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); + } + } + + + + +} diff --git a/swingjs/net.sf.j2s.core.jar b/swingjs/net.sf.j2s.core.jar index 93a70ee..ce4c218 100644 Binary files a/swingjs/net.sf.j2s.core.jar and b/swingjs/net.sf.j2s.core.jar differ