1 package jalview.ws.dbsources;
3 import jalview.ws.uimodel.PDBSearchResultPojo;
4 import jalview.ws.uimodel.PDBSummaryListModel;
6 import java.util.Iterator;
8 import javax.swing.DefaultListModel;
9 import javax.ws.rs.core.MediaType;
11 import org.json.simple.JSONArray;
12 import org.json.simple.JSONObject;
13 import org.json.simple.parser.JSONParser;
14 import org.json.simple.parser.ParseException;
16 import com.sun.jersey.api.client.Client;
17 import com.sun.jersey.api.client.ClientResponse;
18 import com.sun.jersey.api.client.WebResource;
19 import com.sun.jersey.api.client.config.ClientConfig;
20 import com.sun.jersey.api.client.config.DefaultClientConfig;
21 import com.sun.jersey.api.json.JSONConfiguration;
23 public class PDBRestClient
25 private String pdbSearchEndpoint = "http://wwwdev.ebi.ac.uk/pdbe/search/pdb/select?";
28 public static void main(String[] args)
30 new PDBRestClient().searchResult("pfam_name", "Lipoc*");
33 private String executeRestSearch(String qParam,
36 ClientConfig clientConfig = new DefaultClientConfig();
37 clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
39 Client client = Client.create(clientConfig);
40 WebResource webResource = client.resource(pdbSearchEndpoint)
41 .queryParam("wt", "json")
42 .queryParam("rows", "100")
43 .queryParam("q", qParam + ":" + searchTerm);
44 ClientResponse clientResponse = webResource.accept(
45 MediaType.APPLICATION_JSON).get(ClientResponse.class);
47 String responseString = clientResponse.getEntity(String.class);
48 if (clientResponse.getStatus() != 200)
50 throw new RuntimeException("Failed : HTTP error code : "
51 + clientResponse.getStatus());
53 return responseString;
56 public PDBSearchResultPojo searchResult(String qParam,
59 String jsonResponseString = executeRestSearch(qParam, searchTerm);
60 PDBSearchResultPojo searchResult = new PDBSearchResultPojo();
61 DefaultListModel<PDBSummaryListModel> result = null;
64 JSONParser jsonParser = new JSONParser();
65 JSONObject jsonObj = (JSONObject) jsonParser
66 .parse(jsonResponseString);
68 JSONObject pdbResponse = (JSONObject) jsonObj.get("response");
69 String queryTime = ((JSONObject) jsonObj.get("responseHeader")).get(
71 int numFound = Integer
72 .valueOf(pdbResponse.get("numFound").toString());
75 result = new DefaultListModel<PDBSummaryListModel>();
76 JSONArray docs = (JSONArray) pdbResponse.get("docs");
77 for (Iterator<JSONObject> docIter = docs.iterator(); docIter
80 JSONObject doc = docIter.next();
81 if (doc.get("molecule_sequence") != null)
83 result.addElement(new PDBSummaryListModel(doc));
86 searchResult.setItemFound(numFound);
87 searchResult.setResponseTime(queryTime);
88 searchResult.setSearchSummary(result);
90 } catch (ParseException e)