JAL-3253 preliminary static fixes for JavaScript part 2
[jalview.git] / src / jalview / fts / service / pdb / PDBFTSRestClient.java
index 3778212..3bb3f77 100644 (file)
@@ -58,6 +58,41 @@ public class PDBFTSRestClient extends FTSRestClient
 
   private static FTSRestClientI instance = null;
 
+  public static FTSRestClientI getInstance()
+  {
+
+    // BH 2019.05.08 need to isolate static fields in JavaScript
+
+    FTSRestClientI i = instance;
+    @SuppressWarnings("unused")
+    ThreadGroup g = null;
+    if (Platform.isJS())
+    {
+      g = Thread.currentThread().getThreadGroup();
+      /**
+       * @j2sNative i = g._jalviewPDBFTSRestClientInstance;
+       * 
+       */
+    }
+    if (i == null)
+    {
+      i = new PDBFTSRestClient();
+
+      if (Platform.isJS())
+      {
+        /**
+         * @j2sNative g._jalviewPDBFTSRestClientInstance = i;
+         * 
+         */
+      }
+      else
+      {
+        instance = i;
+      }
+    }
+    return i;
+  }
+
   public static final String PDB_SEARCH_ENDPOINT = "https://www.ebi.ac.uk/pdbe/search/pdb/select?";
 
   protected PDBFTSRestClient()
@@ -135,7 +170,7 @@ public class PDBFTSRestClient extends FTSRestClient
       /**
        * Java only
        * 
-       * @j2sNative
+       * @j2sIgnore
        */
       {
         client = Client.create(new DefaultClientConfig());
@@ -165,29 +200,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<String, Object> 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
@@ -196,7 +236,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();
@@ -289,15 +329,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();
@@ -443,15 +494,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<FTSDataColumnI> allDefaultDisplayedStructureDataColumns;
 
   public Collection<FTSDataColumnI> getAllDefaultDisplayedStructureDataColumns()
@@ -466,32 +508,5 @@ public static String parseJsonExceptionString(String jsonErrorResponse)
     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();
-    }
-    
-  }
-  
   
 }