X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Ffts%2Fservice%2Fpdb%2FPDBFTSRestClient.java;h=87d640b3ab79e908fe2578df7e0d7adbf217b043;hb=6200addf078b7f7ace90597dc056dafc7fc602c1;hp=b4e56606fb9a48f906e7b521b4493b5977c9fb7a;hpb=8e7cf85a7f61f425e808cac53ead7bc27e402242;p=jalview.git diff --git a/src/jalview/fts/service/pdb/PDBFTSRestClient.java b/src/jalview/fts/service/pdb/PDBFTSRestClient.java index b4e5660..87d640b 100644 --- a/src/jalview/fts/service/pdb/PDBFTSRestClient.java +++ b/src/jalview/fts/service/pdb/PDBFTSRestClient.java @@ -20,7 +20,8 @@ */ package jalview.fts.service.pdb; -import jalview.bin.Jalview; +import jalview.bin.ApplicationSingletonProvider; +import jalview.bin.ApplicationSingletonProvider.ApplicationSingletonI; import jalview.datamodel.SequenceI; import jalview.fts.api.FTSData; import jalview.fts.api.FTSDataColumnI; @@ -30,6 +31,7 @@ import jalview.fts.core.FTSRestRequest; import jalview.fts.core.FTSRestResponse; import jalview.util.JSONUtils; import jalview.util.MessageManager; +import jalview.util.Platform; import java.net.URI; import java.util.ArrayList; @@ -53,15 +55,19 @@ import com.sun.jersey.api.client.config.DefaultClientConfig; * * @author tcnofoegbu */ -public class PDBFTSRestClient extends FTSRestClient +public class PDBFTSRestClient extends FTSRestClient implements ApplicationSingletonI { - - private static FTSRestClientI instance = null; - public static final String PDB_SEARCH_ENDPOINT = "https://www.ebi.ac.uk/pdbe/search/pdb/select?"; - protected PDBFTSRestClient() + public static FTSRestClientI getInstance() + { + return (FTSRestClientI) ApplicationSingletonProvider + .getInstance(PDBFTSRestClient.class); + } + + private PDBFTSRestClient() { + // singleton -- use getInstance() } /** @@ -125,15 +131,19 @@ public class PDBFTSRestClient extends FTSRestClient // different from the ones in Java yet still allow this to be correct for Java Client client; Class clientResponseClass; - if (Jalview.isJS()) + if (Platform.isJS()) { // JavaScript only -- coerce types to Java types for Java client = (Client) (Object) new jalview.javascript.web.Client(); clientResponseClass = (Class) (Object) jalview.javascript.web.ClientResponse.class; } else + /** + * Java only + * + * @j2sIgnore + */ { - // Java only client = Client.create(new DefaultClientConfig()); clientResponseClass = ClientResponse.class; } @@ -161,29 +171,34 @@ public class PDBFTSRestClient extends FTSRestClient URI uri = webResource.getURI(); + System.out.println(uri); + // Execute the REST request ClientResponse clientResponse = webResource .accept(MediaType.APPLICATION_JSON).get(clientResponseClass ); - // Get the JSON string from the response object - String responseString = clientResponse.getEntity(String.class); + int status = clientResponse.getStatus(); + + // Get the JSON string from the response object or directly from the + // client (JavaScript) + Map jsonObj = (Platform.isJS() && status == 200 + ? clientResponse.getEntity(Map.class) + : null); + String responseString = (jsonObj == null + ? clientResponse.getEntity(String.class) + : null); + // System.out.println("query >>>>>>> " + pdbRestRequest.toString()); // Check the response status and report exception if one occurs - if (clientResponse.getStatus() != 200) + switch (status) { - String errorMessage = ""; - if (clientResponse.getStatus() == 400) - { - errorMessage = parseJsonExceptionString(responseString); - throw new Exception(errorMessage); - } - else - { - errorMessage = getMessageByHTTPStatusCode( - clientResponse.getStatus(), "PDB"); - throw new Exception(errorMessage); - } + case 200: + break; + case 400: + throw new Exception(parseJsonExceptionString(responseString)); + default: + throw new Exception(getMessageByHTTPStatusCode(status, "PDB")); } // Make redundant objects eligible for garbage collection to conserve @@ -192,7 +207,7 @@ public class PDBFTSRestClient extends FTSRestClient client = null; // Process the response and return the result to the caller. - return parsePDBJsonResponse(responseString, pdbRestRequest); + return parsePDBJsonResponse(responseString, jsonObj, pdbRestRequest); } catch (Exception e) { String exceptionMsg = e.getMessage(); @@ -285,15 +300,26 @@ public static String parseJsonExceptionString(String jsonErrorResponse) * JSON string * @return */ - @SuppressWarnings("unchecked") public static FTSRestResponse parsePDBJsonResponse( String pdbJsonResponseString, FTSRestRequest pdbRestRequest) { + return parsePDBJsonResponse(pdbJsonResponseString, + (Map) null, pdbRestRequest); + } + + @SuppressWarnings("unchecked") + public static FTSRestResponse parsePDBJsonResponse( + String pdbJsonResponseString, Map jsonObj, + FTSRestRequest pdbRestRequest) + { FTSRestResponse searchResult = new FTSRestResponse(); List result = null; try { - Map jsonObj = (Map) JSONUtils.parse(pdbJsonResponseString); + if (jsonObj == null) + { + jsonObj = (Map) JSONUtils.parse(pdbJsonResponseString); + } Map pdbResponse = (Map) jsonObj.get("response"); String queryTime = ((Map) jsonObj.get("responseHeader")) .get("QTime").toString(); @@ -301,7 +327,7 @@ public static String parseJsonExceptionString(String jsonErrorResponse) .valueOf(pdbResponse.get("numFound").toString()); if (numFound > 0) { - result = new ArrayList(); + result = new ArrayList<>(); List docs = (List) pdbResponse.get("docs"); for (Iterator docIter = docs.iterator(); docIter .hasNext();) @@ -439,15 +465,6 @@ public static String parseJsonExceptionString(String jsonErrorResponse) return "/fts/pdb_data_columns.txt"; } - public static FTSRestClientI getInstance() - { - if (instance == null) - { - instance = new PDBFTSRestClient(); - } - return instance; - } - private Collection allDefaultDisplayedStructureDataColumns; public Collection getAllDefaultDisplayedStructureDataColumns() @@ -455,39 +472,12 @@ public static String parseJsonExceptionString(String jsonErrorResponse) if (allDefaultDisplayedStructureDataColumns == null || allDefaultDisplayedStructureDataColumns.isEmpty()) { - allDefaultDisplayedStructureDataColumns = new ArrayList(); + allDefaultDisplayedStructureDataColumns = new ArrayList<>(); allDefaultDisplayedStructureDataColumns .addAll(super.getAllDefaultDisplayedFTSDataColumns()); } return allDefaultDisplayedStructureDataColumns; } - @SuppressWarnings("unchecked") -public static void main(String[] args) { - - - // check for transpiler fix associated with JSONParser yylex.java use of charAt() - // instead of codePointAt() - - String s = "e"; - char c = 'c'; - char f = 'f'; - s += c | f; - int x = c&f; - int y = 2 & c; - int z = c ^ 5; - String result = s +x + y + z; - assert (result == "e103982102"); - try - { - Map jsonObj = (Map) JSONUtils.parse("{\"a\":3}"); - System.out.println(jsonObj); - } catch (ParseException e) - { - e.printStackTrace(); - } - - } - }