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;
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
*
*/
* @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());
+ (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)
.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);
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();
--- /dev/null
+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);
+ }
+
+}
--- /dev/null
+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);
+ }
+ }
+
+
+
+
+}