JAL-3829 more testing wit tdbeacons data columns and FTSclient
[jalview.git] / src / jalview / fts / service / pdb / PDBFTSRestClient.java
index 402efff..dc7fe41 100644 (file)
  */
 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;
@@ -48,6 +37,17 @@ import com.sun.jersey.api.client.ClientResponse;
 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
  * 
@@ -132,8 +132,12 @@ public class PDBFTSRestClient extends FTSRestClient
         clientResponseClass = (Class<ClientResponse>) (Object) jalview.javascript.web.ClientResponse.class;
       }
       else
+      /**
+       * Java only
+       * 
+       * @j2sIgnore
+       */
       {
-        // Java only
         client = Client.create(new DefaultClientConfig());
         clientResponseClass = ClientResponse.class;
       }
@@ -161,38 +165,42 @@ 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);
-      // System.out.println("query >>>>>>> " + pdbRestRequest.toString());
+      // 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();
@@ -285,15 +293,26 @@ public static String parseJsonExceptionString(String jsonErrorResponse)
    *          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();
@@ -301,7 +320,7 @@ public static String parseJsonExceptionString(String jsonErrorResponse)
               .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();)
@@ -345,8 +364,10 @@ public static String parseJsonExceptionString(String jsonErrorResponse)
 
     for (FTSDataColumnI field : diplayFields)
     {
+      //System.out.println("Field " + field);
       String fieldData = (pdbJsonDoc.get(field.getCode()) == null) ? ""
               : pdbJsonDoc.get(field.getCode()).toString();
+      //System.out.println("Field Data : " + fieldData);
       if (field.isPrimaryKeyColumn())
       {
         primaryKey = fieldData;
@@ -455,39 +476,12 @@ public static String parseJsonExceptionString(String jsonErrorResponse)
     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();
-    }
-    
-  }
-  
   
 }