*/
package jalview.fts.service.pdb;
-import jalview.datamodel.SequenceI;
-import jalview.fts.api.FTSData;
-import jalview.fts.api.FTSDataColumnI;
-import jalview.fts.api.FTSRestClientI;
-import jalview.fts.core.FTSRestClient;
-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;
import java.util.Collection;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.DefaultClientConfig;
+import jalview.datamodel.SequenceI;
+import jalview.fts.api.FTSData;
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSRestClientI;
+import jalview.fts.core.FTSRestClient;
+import jalview.fts.core.FTSRestRequest;
+import jalview.fts.core.FTSRestResponse;
+import jalview.util.JSONUtils;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+
/**
* A rest client for querying the Search endpoint of the PDB API
*
clientResponseClass = (Class<ClientResponse>) (Object) jalview.javascript.web.ClientResponse.class;
}
else
+ /**
+ * Java only
+ *
+ * @j2sIgnore
+ */
{
- // Java only
client = Client.create(new DefaultClientConfig());
clientResponseClass = ClientResponse.class;
}
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);
+ // 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());
// Check the response status and report exception if one occurs
- if (clientResponse.getStatus() != 200)
+ int responseStatus = clientResponse.getStatus();
+ switch (responseStatus)
{
- String errorMessage = "";
- if (clientResponse.getStatus() == 400)
+ case 200:
+ if (Platform.isJS())
{
- errorMessage = parseJsonExceptionString(responseString);
- throw new Exception(errorMessage);
+ jsonObj = clientResponse.getEntity(Map.class);
}
else
{
- errorMessage = getMessageByHTTPStatusCode(
- clientResponse.getStatus(), "PDB");
- throw new Exception(errorMessage);
+ responseString = clientResponse.getEntity(String.class);
}
+ break;
+ case 400:
+ throw new Exception(parseJsonExceptionString(responseString));
+ default:
+ throw new Exception(
+ getMessageByHTTPStatusCode(responseStatus, "PDB"));
}
- // Make redundant objects eligible for garbage collection to conserve
- // memory
- clientResponse = null;
- 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();
* JSON string
* @return
*/
- @SuppressWarnings("unchecked")
public static FTSRestResponse parsePDBJsonResponse(
String pdbJsonResponseString, FTSRestRequest pdbRestRequest)
{
+ return parsePDBJsonResponse(pdbJsonResponseString,
+ (Map<String, Object>) null, pdbRestRequest);
+ }
+
+ @SuppressWarnings("unchecked")
+ public static FTSRestResponse parsePDBJsonResponse(
+ String pdbJsonResponseString, Map<String, Object> jsonObj,
+ FTSRestRequest pdbRestRequest)
+ {
FTSRestResponse searchResult = new FTSRestResponse();
List<FTSData> result = null;
try
{
- Map<String, Object> jsonObj = (Map<String, Object>) JSONUtils.parse(pdbJsonResponseString);
+ if (jsonObj == null)
+ {
+ 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();
.valueOf(pdbResponse.get("numFound").toString());
if (numFound > 0)
{
- result = new ArrayList<FTSData>();
+ result = new ArrayList<>();
List<Object> docs = (List<Object>) pdbResponse.get("docs");
for (Iterator<Object> docIter = docs.iterator(); docIter
.hasNext();)
if (allDefaultDisplayedStructureDataColumns == null
|| allDefaultDisplayedStructureDataColumns.isEmpty())
{
- allDefaultDisplayedStructureDataColumns = new ArrayList<FTSDataColumnI>();
+ 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<String, Object> jsonObj = (Map<String, Object>) JSONUtils.parse("{\"a\":3}");
- System.out.println(jsonObj);
- } catch (ParseException e)
- {
- e.printStackTrace();
- }
-
- }
-
}