house keeping
[jalview.git] / src / jalview / ws / dbsources / PDBRestClient.java
1 package jalview.ws.dbsources;
2
3 import jalview.ws.uimodel.PDBSearchResultPojo;
4 import jalview.ws.uimodel.PDBSummaryListModel;
5
6 import java.util.Iterator;
7
8 import javax.swing.DefaultListModel;
9 import javax.ws.rs.core.MediaType;
10
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;
15
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;
22
23 public class PDBRestClient
24 {
25   private String pdbSearchEndpoint = "http://wwwdev.ebi.ac.uk/pdbe/search/pdb/select?";
26
27
28   public static void main(String[] args)
29   {
30     new PDBRestClient().searchResult("pfam_name", "Lipoc*");
31   }
32
33   private String executeRestSearch(String qParam,
34           String searchTerm)
35   {
36     ClientConfig clientConfig = new DefaultClientConfig();
37     clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
38             Boolean.TRUE);
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);
46
47     String responseString = clientResponse.getEntity(String.class);
48     if (clientResponse.getStatus() != 200)
49     {
50       throw new RuntimeException("Failed : HTTP error code : "
51               + clientResponse.getStatus());
52     }
53     return responseString;
54   }
55
56   public PDBSearchResultPojo searchResult(String qParam,
57           String searchTerm)
58   {
59     String jsonResponseString = executeRestSearch(qParam, searchTerm);
60     PDBSearchResultPojo searchResult = new PDBSearchResultPojo();
61     DefaultListModel<PDBSummaryListModel> result = null;
62     try
63     {
64       JSONParser jsonParser = new JSONParser();
65       JSONObject jsonObj = (JSONObject) jsonParser
66               .parse(jsonResponseString);
67
68       JSONObject pdbResponse = (JSONObject) jsonObj.get("response");
69       String queryTime = ((JSONObject) jsonObj.get("responseHeader")).get(
70               "QTime").toString();
71       int numFound = Integer
72               .valueOf(pdbResponse.get("numFound").toString());
73       if (numFound > 0)
74       {
75         result = new DefaultListModel<PDBSummaryListModel>();
76         JSONArray docs = (JSONArray) pdbResponse.get("docs");
77         for (Iterator<JSONObject> docIter = docs.iterator(); docIter
78                 .hasNext();)
79         {
80           JSONObject doc = docIter.next();
81           if (doc.get("molecule_sequence") != null)
82           {
83             result.addElement(new PDBSummaryListModel(doc));
84           }
85         }
86         searchResult.setItemFound(numFound);
87         searchResult.setResponseTime(queryTime);
88         searchResult.setSearchSummary(result);
89       }
90     } catch (ParseException e)
91     {
92       e.printStackTrace();
93     }
94
95     return searchResult;
96   }
97
98 }