X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fdbsources%2FPDBRestClient.java;h=bdc507f7e3ffd2b78f8a8c9fd47fbc02dd1d2ed4;hb=7d76e402efd4e04e179bc9bb264551bc2d3df936;hp=0c41d61769a40dcfbc5745ed2ee874b52c7e1609;hpb=f09bee67bc24f1e401b4834f8ecb14812620568c;p=jalview.git diff --git a/src/jalview/ws/dbsources/PDBRestClient.java b/src/jalview/ws/dbsources/PDBRestClient.java index 0c41d61..bdc507f 100644 --- a/src/jalview/ws/dbsources/PDBRestClient.java +++ b/src/jalview/ws/dbsources/PDBRestClient.java @@ -1,11 +1,14 @@ package jalview.ws.dbsources; -import jalview.ws.uimodel.PDBSearchResultPojo; +import jalview.ws.uimodel.PDBSearchRequest; +import jalview.ws.uimodel.PDBSearchResponse; import jalview.ws.uimodel.PDBSummaryListModel; +import jalview.ws.uimodel.PDBSummaryListModel.PDBDocField; +import java.util.ArrayList; import java.util.Iterator; +import java.util.List; -import javax.swing.DefaultListModel; import javax.ws.rs.core.MediaType; import org.json.simple.JSONArray; @@ -24,23 +27,44 @@ 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*"); + PDBSearchRequest request = new PDBSearchRequest(); + request.setAllowEmptySeq(false); + request.setResponseSize(100); + request.setSearchTarget("pfam_name"); + request.setSearchTerm("Lipoc*"); + List wantedFields = new ArrayList(); + wantedFields.add(PDBDocField.MOLECULE_TYPE); + wantedFields.add(PDBDocField.PDB_ID); + wantedFields.add(PDBDocField.GENUS); + wantedFields.add(PDBDocField.GENE_NAME); + wantedFields.add(PDBDocField.TITLE); + request.setWantedFields(wantedFields); + new PDBRestClient().executeRequest(request); } - private String executeRestSearch(String qParam, - String searchTerm) + public PDBSearchResponse executeRequest(PDBSearchRequest request) { ClientConfig clientConfig = new DefaultClientConfig(); clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); Client client = Client.create(clientConfig); + + String query = request.getSearchTarget() + + request.getSearchTerm() + + ((request.isAllowEmptySeq()) ? "" + : " AND molecule_sequence:['' TO *]"); + + String wantedFields = getFieldsAsCommaDelimitedString(request + .getWantedFields()); + + String responseSize = (request.getResponseSize() == 0) ? "200" : String + .valueOf(request.getResponseSize()); WebResource webResource = client.resource(pdbSearchEndpoint) - .queryParam("wt", "json") -.queryParam("rows", "100") - .queryParam("q", qParam + ":" + searchTerm); + .queryParam("wt", "json").queryParam("fl", wantedFields) + .queryParam("rows", responseSize) + .queryParam("q", query); ClientResponse clientResponse = webResource.accept( MediaType.APPLICATION_JSON).get(ClientResponse.class); @@ -50,20 +74,20 @@ public class PDBRestClient throw new RuntimeException("Failed : HTTP error code : " + clientResponse.getStatus()); } - return responseString; + // System.out.println("--------------> " + responseString); + return parseResponse(responseString, request.getWantedFields()); } - public PDBSearchResultPojo searchResult(String qParam, - String searchTerm) + private PDBSearchResponse parseResponse(String jsonResponse, + List wantedFields) { - String jsonResponseString = executeRestSearch(qParam, searchTerm); - PDBSearchResultPojo searchResult = new PDBSearchResultPojo(); - DefaultListModel result = null; + PDBSearchResponse searchResult = new PDBSearchResponse(); + List result = null; try { JSONParser jsonParser = new JSONParser(); JSONObject jsonObj = (JSONObject) jsonParser - .parse(jsonResponseString); +.parse(jsonResponse); JSONObject pdbResponse = (JSONObject) jsonObj.get("response"); String queryTime = ((JSONObject) jsonObj.get("responseHeader")).get( @@ -72,18 +96,18 @@ public class PDBRestClient .valueOf(pdbResponse.get("numFound").toString()); if (numFound > 0) { - result = new DefaultListModel(); + result = new ArrayList(); 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)); - } + // if (doc.get("molecule_sequence") != null) + // { + result.add(new PDBSummaryListModel(doc, wantedFields)); + // } } - searchResult.setItemFound(numFound); + searchResult.setItemsFound(numFound); searchResult.setResponseTime(queryTime); searchResult.setSearchSummary(result); } @@ -95,4 +119,21 @@ public class PDBRestClient return searchResult; } + private String getFieldsAsCommaDelimitedString(List fields) + { + String result = ""; + if (fields != null && !fields.isEmpty()) + { + StringBuilder returnedFields = new StringBuilder(); + for (PDBDocField field : fields) + { + returnedFields.append(",").append(field.getCode()); + } + returnedFields.deleteCharAt(0); + result = returnedFields.toString(); + } + return result; + } + + }