*/
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;
import jalview.fts.core.FTSRestClient;
import jalview.fts.core.FTSRestRequest;
import jalview.fts.core.FTSRestResponse;
+import jalview.fts.service.alphafold.AlphafoldRestClient;
import jalview.util.JSONUtils;
import jalview.util.MessageManager;
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;
// 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<ClientResponse> clientResponseClass;
if (Platform.isJS())
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<String, Object> 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"));
return parsePDBJsonResponse(responseString, jsonObj, pdbRestRequest);
} catch (Exception e)
{
+ if (e.getMessage() == null)
+ {
+ throw (e);
+ }
String exceptionMsg = e.getMessage();
if (exceptionMsg.contains("SocketException"))
{
* @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<String, Object> jsonObj = (Map<String, Object>) JSONUtils.parse(jsonErrorResponse);
- Map<String, Object> errorResponse = (Map<String, Object>) jsonObj.get("error");
+ Map<String, Object> jsonObj = (Map<String, Object>) JSONUtils
+ .parse(jsonErrorResponse);
+ Map<String, Object> errorResponse = (Map<String, Object>) jsonObj
+ .get("error");
Map<String, Object> responseHeader = (Map<String, Object>) jsonObj
.get("responseHeader");
- Map<String, Object> paramsObj = (Map<String, Object>) responseHeader.get("params");
+ Map<String, Object> paramsObj = (Map<String, Object>) responseHeader
+ .get("params");
String status = responseHeader.get("status").toString();
String message = errorResponse.get("msg").toString();
String query = paramsObj.get("q").toString();
{
if (jsonObj == null)
{
- jsonObj = (Map<String, Object>) JSONUtils.parse(pdbJsonResponseString);
+ jsonObj = (Map<String, Object>) JSONUtils
+ .parse(pdbJsonResponseString);
}
- Map<String, Object> pdbResponse = (Map<String, Object>) jsonObj.get("response");
- String queryTime = ((Map<String, Object>) jsonObj.get("responseHeader"))
- .get("QTime").toString();
+ Map<String, Object> pdbResponse = (Map<String, Object>) jsonObj
+ .get("response");
+ String queryTime = ((Map<String, Object>) jsonObj
+ .get("responseHeader")).get("QTime").toString();
int numFound = Integer
.valueOf(pdbResponse.get("numFound").toString());
+ List<Object> docs = (List<Object>) pdbResponse.get("docs");
+
+ result = new ArrayList<FTSData>();
if (numFound > 0)
{
- result = new ArrayList<>();
- List<Object> docs = (List<Object>) pdbResponse.get("docs");
- for (Iterator<Object> docIter = docs.iterator(); docIter
- .hasNext();)
+
+ for (Iterator<Object> docIter = docs.iterator(); docIter.hasNext();)
{
Map<String, Object> doc = (Map<String, Object>) docIter.next();
result.add(getFTSData(doc, pdbRestRequest));
}
- searchResult.setNumberOfItemsFound(numFound);
- searchResult.setResponseTime(queryTime);
- searchResult.setSearchSummary(result);
}
+ // 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);
+
} catch (ParseException e)
{
e.printStackTrace();
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;
} catch (Exception e)
{
e.printStackTrace();
- System.out.println("offending value:" + fieldData);
+ jalview.bin.Console.outPrintln("offending value:" + fieldData);
}
}
}
}
private Collection<FTSDataColumnI> allDefaultDisplayedStructureDataColumns;
+
@Override
public Collection<FTSDataColumnI> getAllDefaultDisplayedStructureDataColumns()
{
}
return allDefaultDisplayedStructureDataColumns;
}
+
@Override
- public String[] getPreferencesColumnsFor(PreferenceSource source) {
+ public String[] getPreferencesColumnsFor(PreferenceSource source)
+ {
String[] columnNames = null;
switch (source)
{