X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Ffts%2Fservice%2Fpdb%2FPDBFTSRestClient.java;h=b4bb66e09bf3610e36580f74eccd9582abf3a541;hb=HEAD;hp=04fb17ccec449d7e03ab3fb41ad9e40280ea1fee;hpb=45be678db479035369eab0a1a1ab570c7c342bbb;p=jalview.git diff --git a/src/jalview/fts/service/pdb/PDBFTSRestClient.java b/src/jalview/fts/service/pdb/PDBFTSRestClient.java index 04fb17c..b4bb66e 100644 --- a/src/jalview/fts/service/pdb/PDBFTSRestClient.java +++ b/src/jalview/fts/service/pdb/PDBFTSRestClient.java @@ -20,7 +20,11 @@ */ package jalview.fts.service.pdb; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileReader; import java.net.URI; +import java.nio.CharBuffer; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -57,7 +61,8 @@ import jalview.util.Platform; * * @author tcnofoegbu */ -public class PDBFTSRestClient extends FTSRestClient implements StructureFTSRestClientI +public class PDBFTSRestClient extends FTSRestClient + implements StructureFTSRestClientI { private static FTSRestClientI instance = null; @@ -125,8 +130,9 @@ public class PDBFTSRestClient extends FTSRestClient implements StructureFTSRestC // Build request parameters for the REST Request - // BH 2018 the trick here is to coerce the classes in Javascript to be - // different from the ones in Java yet still allow this to be correct for Java + // BH 2018 the trick here is to coerce the classes in Javascript to be + // different from the ones in Java yet still allow this to be correct for + // Java Client client; Class clientResponseClass; if (Platform.isJS()) @@ -169,35 +175,62 @@ public class PDBFTSRestClient extends FTSRestClient implements StructureFTSRestC URI uri = webResource.getURI(); - System.out.println(uri); - - // Execute the REST request - ClientResponse clientResponse = webResource - .accept(MediaType.APPLICATION_JSON).get(clientResponseClass ); - + jalview.bin.Console.outPrintln(uri); + ClientResponse clientResponse = null; + int responseStatus = -1; // Get the JSON string from the response object or directly from the // client (JavaScript) Map jsonObj = null; String responseString = null; - System.out.println("query >>>>>>> " + pdbRestRequest.toString()); + jalview.bin.Console + .outPrintln("query >>>>>>> " + pdbRestRequest.toString()); + + if (!isMocked()) + { + // Execute the REST request + clientResponse = webResource.accept(MediaType.APPLICATION_JSON) + .get(clientResponseClass); + responseStatus = clientResponse.getStatus(); + } + else + { + // mock response + if (mockQueries.containsKey(uri.toString())) + { + responseStatus = 200; + } + else + { + // FIXME - may cause unexpected exceptions for callers when mocked + responseStatus = 400; + } + } // Check the response status and report exception if one occurs - int responseStatus = clientResponse.getStatus(); switch (responseStatus) { case 200: - if (Platform.isJS()) + + if (isMocked()) { - jsonObj = clientResponse.getEntity(Map.class); + responseString = mockQueries.get(uri.toString()); } else { - responseString = clientResponse.getEntity(String.class); + if (Platform.isJS()) + { + jsonObj = clientResponse.getEntity(Map.class); + } + else + { + responseString = clientResponse.getEntity(String.class); + } } break; case 400: - throw new Exception(parseJsonExceptionString(responseString)); + throw new Exception(isMocked() ? "400 response (Mocked)" + : parseJsonExceptionString(responseString)); default: throw new Exception( getMessageByHTTPStatusCode(responseStatus, "PDB")); @@ -207,6 +240,10 @@ public class PDBFTSRestClient extends FTSRestClient implements StructureFTSRestC return parsePDBJsonResponse(responseString, jsonObj, pdbRestRequest); } catch (Exception e) { + if (e.getMessage() == null) + { + throw (e); + } String exceptionMsg = e.getMessage(); if (exceptionMsg.contains("SocketException")) { @@ -235,39 +272,42 @@ public class PDBFTSRestClient extends FTSRestClient implements StructureFTSRestC * @return the processed error message from the JSON string */ @SuppressWarnings("unchecked") -public static String parseJsonExceptionString(String jsonErrorResponse) + public static String parseJsonExceptionString(String jsonErrorResponse) { StringBuilder errorMessage = new StringBuilder( "\n============= PDB Rest Client RunTime error =============\n"); - -// { -// "responseHeader":{ -// "status":0, -// "QTime":0, -// "params":{ -// "q":"(text:q93xj9_soltu) AND molecule_sequence:['' TO *] AND status:REL", -// "fl":"pdb_id,title,experimental_method,resolution", -// "start":"0", -// "sort":"overall_quality desc", -// "rows":"500", -// "wt":"json"}}, -// "response":{"numFound":1,"start":0,"docs":[ -// { -// "experimental_method":["X-ray diffraction"], -// "pdb_id":"4zhp", -// "resolution":2.46, -// "title":"The crystal structure of Potato ferredoxin I with 2Fe-2S cluster"}] -// }} -// + // { + // "responseHeader":{ + // "status":0, + // "QTime":0, + // "params":{ + // "q":"(text:q93xj9_soltu) AND molecule_sequence:['' TO *] AND status:REL", + // "fl":"pdb_id,title,experimental_method,resolution", + // "start":"0", + // "sort":"overall_quality desc", + // "rows":"500", + // "wt":"json"}}, + // "response":{"numFound":1,"start":0,"docs":[ + // { + // "experimental_method":["X-ray diffraction"], + // "pdb_id":"4zhp", + // "resolution":2.46, + // "title":"The crystal structure of Potato ferredoxin I with 2Fe-2S + // cluster"}] + // }} + // try { - Map jsonObj = (Map) JSONUtils.parse(jsonErrorResponse); - Map errorResponse = (Map) jsonObj.get("error"); + Map jsonObj = (Map) JSONUtils + .parse(jsonErrorResponse); + Map errorResponse = (Map) jsonObj + .get("error"); Map responseHeader = (Map) jsonObj .get("responseHeader"); - Map paramsObj = (Map) responseHeader.get("params"); + Map paramsObj = (Map) responseHeader + .get("params"); String status = responseHeader.get("status").toString(); String message = errorResponse.get("msg").toString(); String query = paramsObj.get("q").toString(); @@ -315,27 +355,30 @@ public static String parseJsonExceptionString(String jsonErrorResponse) { if (jsonObj == null) { - jsonObj = (Map) JSONUtils.parse(pdbJsonResponseString); + jsonObj = (Map) JSONUtils + .parse(pdbJsonResponseString); } - Map pdbResponse = (Map) jsonObj.get("response"); - String queryTime = ((Map) jsonObj.get("responseHeader")) - .get("QTime").toString(); + Map pdbResponse = (Map) jsonObj + .get("response"); + String queryTime = ((Map) jsonObj + .get("responseHeader")).get("QTime").toString(); int numFound = Integer .valueOf(pdbResponse.get("numFound").toString()); List docs = (List) pdbResponse.get("docs"); - // add in any alphafold bits at the top - result = AlphafoldRestClient.getFTSData(pdbRestRequest); + + result = new ArrayList(); if (numFound > 0) { - for (Iterator docIter = docs.iterator(); docIter - .hasNext();) + for (Iterator docIter = docs.iterator(); docIter.hasNext();) { Map doc = (Map) docIter.next(); result.add(getFTSData(doc, pdbRestRequest)); } } - searchResult.setNumberOfItemsFound(result.size()); + // this is the total number found by the query, + // rather than the set returned in SearchSummary + searchResult.setNumberOfItemsFound(numFound); searchResult.setResponseTime(queryTime); searchResult.setSearchSummary(result); @@ -371,10 +414,10 @@ public static String parseJsonExceptionString(String jsonErrorResponse) for (FTSDataColumnI field : diplayFields) { - //System.out.println("Field " + field); + // jalview.bin.Console.outPrintln("Field " + field); String fieldData = (pdbJsonDoc.get(field.getCode()) == null) ? "" : pdbJsonDoc.get(field.getCode()).toString(); - //System.out.println("Field Data : " + fieldData); + // jalview.bin.Console.outPrintln("Field Data : " + fieldData); if (field.isPrimaryKeyColumn()) { primaryKey = fieldData; @@ -398,7 +441,7 @@ public static String parseJsonExceptionString(String jsonErrorResponse) } catch (Exception e) { e.printStackTrace(); - System.out.println("offending value:" + fieldData); + jalview.bin.Console.outPrintln("offending value:" + fieldData); } } } @@ -477,6 +520,7 @@ public static String parseJsonExceptionString(String jsonErrorResponse) } private Collection allDefaultDisplayedStructureDataColumns; + @Override public Collection getAllDefaultDisplayedStructureDataColumns() { @@ -489,8 +533,10 @@ public static String parseJsonExceptionString(String jsonErrorResponse) } return allDefaultDisplayedStructureDataColumns; } + @Override - public String[] getPreferencesColumnsFor(PreferenceSource source) { + public String[] getPreferencesColumnsFor(PreferenceSource source) + { String[] columnNames = null; switch (source) {