package jalview.ws.dbsources; import jalview.ws.uimodel.PDBSearchResultPojo; import jalview.ws.uimodel.PDBSummaryListModel; import java.util.Iterator; import javax.swing.DefaultListModel; import javax.ws.rs.core.MediaType; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; 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; import com.sun.jersey.api.json.JSONConfiguration; public class PDBRestClient { private String pdbSearchEndpoint = "http://wwwdev.ebi.ac.uk/pdbe/search/pdb/select?"; public static void main(String[] args) { new PDBRestClient().searchResult("pfam_name", "Lipoc*"); } private String executeRestSearch(String qParam, String searchTerm) { ClientConfig clientConfig = new DefaultClientConfig(); clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); Client client = Client.create(clientConfig); WebResource webResource = client.resource(pdbSearchEndpoint) .queryParam("wt", "json") .queryParam("rows", "100") .queryParam("q", qParam + ":" + searchTerm); ClientResponse clientResponse = webResource.accept( MediaType.APPLICATION_JSON).get(ClientResponse.class); String responseString = clientResponse.getEntity(String.class); if (clientResponse.getStatus() != 200) { throw new RuntimeException("Failed : HTTP error code : " + clientResponse.getStatus()); } return responseString; } public PDBSearchResultPojo searchResult(String qParam, String searchTerm) { String jsonResponseString = executeRestSearch(qParam, searchTerm); PDBSearchResultPojo searchResult = new PDBSearchResultPojo(); DefaultListModel result = null; try { JSONParser jsonParser = new JSONParser(); JSONObject jsonObj = (JSONObject) jsonParser .parse(jsonResponseString); JSONObject pdbResponse = (JSONObject) jsonObj.get("response"); String queryTime = ((JSONObject) jsonObj.get("responseHeader")).get( "QTime").toString(); int numFound = Integer .valueOf(pdbResponse.get("numFound").toString()); if (numFound > 0) { result = new DefaultListModel(); JSONArray docs = (JSONArray) pdbResponse.get("docs"); for (Iterator docIter = docs.iterator(); docIter .hasNext();) { JSONObject doc = docIter.next(); if (doc.get("molecule_sequence") != null) { result.addElement(new PDBSummaryListModel(doc)); } } searchResult.setItemFound(numFound); searchResult.setResponseTime(queryTime); searchResult.setSearchSummary(result); } } catch (ParseException e) { e.printStackTrace(); } return searchResult; } }