JAL-3829 3d-beacons structure chooser logic (not yet finished)
[jalview.git] / src / jalview / fts / service / pdb / PDBFTSRestClient.java
index 0b5d431..313f0b6 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,12 +37,26 @@ 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.api.StructureFTSRestClientI;
+import jalview.fts.core.FTSDataColumnPreferences;
+import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource;
+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
  * 
  * @author tcnofoegbu
  */
-public class PDBFTSRestClient extends FTSRestClient
+public class PDBFTSRestClient extends FTSRestClient implements StructureFTSRestClientI
 {
 
   private static FTSRestClientI instance = null;
@@ -171,35 +174,34 @@ public class PDBFTSRestClient extends FTSRestClient
       ClientResponse clientResponse = webResource
               .accept(MediaType.APPLICATION_JSON).get(clientResponseClass );
 
-      int status = clientResponse.getStatus();
-
       // Get the JSON string from the response object or directly from the
       // client (JavaScript)
-      Map<String, Object> jsonObj = (status == 200
-              ? clientResponse.getEntity(Map.class)
-              : null);
-      String responseString = (jsonObj == null
-              ? clientResponse.getEntity(String.class)
-              : null);
+      Map<String, Object> jsonObj = null;
+      String responseString = null;
 
-      // System.out.println("query >>>>>>> " + pdbRestRequest.toString());
+      System.out.println("query >>>>>>> " + pdbRestRequest.toString());
 
       // Check the response status and report exception if one occurs
-      switch (status)
+      int responseStatus = clientResponse.getStatus();
+      switch (responseStatus)
       {
       case 200:
+        if (Platform.isJS())
+        {
+          jsonObj = clientResponse.getEntity(Map.class);
+        }
+        else
+        {
+          responseString = clientResponse.getEntity(String.class);
+        }
         break;
       case 400:
         throw new Exception(parseJsonExceptionString(responseString));
       default:
-        throw new Exception(getMessageByHTTPStatusCode(status, "PDB"));
+        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, jsonObj, pdbRestRequest);
     } catch (Exception e)
@@ -365,8 +367,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;
@@ -469,7 +473,7 @@ public static String parseJsonExceptionString(String jsonErrorResponse)
   }
 
   private Collection<FTSDataColumnI> allDefaultDisplayedStructureDataColumns;
-
+  @Override
   public Collection<FTSDataColumnI> getAllDefaultDisplayedStructureDataColumns()
   {
     if (allDefaultDisplayedStructureDataColumns == null
@@ -481,33 +485,24 @@ 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)
+  @Override
+  public String[] getPreferencesColumnsFor(PreferenceSource source) {
+    String[] columnNames = null;
+    switch (source)
     {
-      e.printStackTrace();
+    case SEARCH_SUMMARY:
+      columnNames = new String[] { "", "Display", "Group" };
+      break;
+    case STRUCTURE_CHOOSER:
+      columnNames = new String[] { "", "Display", "Group" };
+      break;
+    case PREFERENCES:
+      columnNames = new String[] { "PDB Field", "Show in search summary",
+          "Show in structure summary" };
+      break;
+    default:
+      break;
     }
-    
+    return columnNames;
   }
-  
-  
 }