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("q", qParam + ":" + searchTerm);
43 ClientResponse clientResponse = webResource.accept(
44 MediaType.APPLICATION_JSON).get(ClientResponse.class);
46 String responseString = clientResponse.getEntity(String.class);
47 if (clientResponse.getStatus() != 200)
49 throw new RuntimeException("Failed : HTTP error code : "
50 + clientResponse.getStatus());
52 return responseString;
55 public PDBSearchResultPojo searchResult(String qParam,
58 String jsonResponseString = executeRestSearch(qParam, searchTerm);
59 PDBSearchResultPojo searchResult = new PDBSearchResultPojo();
60 DefaultListModel<PDBSummaryListModel> result = null;
63 JSONParser jsonParser = new JSONParser();
64 JSONObject jsonObj = (JSONObject) jsonParser
65 .parse(jsonResponseString);
67 JSONObject pdbResponse = (JSONObject) jsonObj.get("response");
68 String queryTime = ((JSONObject) jsonObj.get("responseHeader")).get(
70 int numFound = Integer
71 .valueOf(pdbResponse.get("numFound").toString());
74 result = new DefaultListModel<PDBSummaryListModel>();
75 JSONArray docs = (JSONArray) pdbResponse.get("docs");
76 for (Iterator<JSONObject> docIter = docs.iterator(); docIter
79 JSONObject doc = docIter.next();
80 if (doc.get("molecule_sequence") != null)
82 result.addElement(new PDBSummaryListModel(doc));
85 searchResult.setItemFound(numFound);
86 searchResult.setResponseTime(queryTime);
87 searchResult.setSearchSummary(result);
89 } catch (ParseException e)