JAL-2101 JAL-2071 JAL-1563 Added fix to enable searching for old entry names in Unipr...
[jalview.git] / src / jalview / fts / service / pdb / PDBFTSRestClient.java
index be1c9ee..93a7df3 100644 (file)
@@ -49,7 +49,7 @@ import com.sun.jersey.api.client.config.ClientConfig;
 import com.sun.jersey.api.client.config.DefaultClientConfig;
 
 /**
- * A rest client for querying the Search endpoint of the PDB REST API
+ * A rest client for querying the Search endpoint of the PDB API
  * 
  * @author tcnofoegbu
  *
@@ -61,8 +61,6 @@ public class PDBFTSRestClient extends FTSRestClient
 
   public static final String PDB_SEARCH_ENDPOINT = "http://www.ebi.ac.uk/pdbe/search/pdb/select?";
 
-  private static int DEFAULT_RESPONSE_SIZE = 200;
-
   protected PDBFTSRestClient()
   {
   }
@@ -86,8 +84,9 @@ public class PDBFTSRestClient extends FTSRestClient
 
       String wantedFields = getDataColumnsFieldsAsCommaDelimitedString(pdbRestRequest
               .getWantedFields());
-      int responseSize = (pdbRestRequest.getResponseSize() == 0) ? DEFAULT_RESPONSE_SIZE
+      int responseSize = (pdbRestRequest.getResponseSize() == 0) ? getDefaultResponsePageSize()
               : pdbRestRequest.getResponseSize();
+      int offSet = pdbRestRequest.getOffSet();
       String sortParam = null;
       if (pdbRestRequest.getFieldToSortBy() == null
               || pdbRestRequest.getFieldToSortBy().trim().isEmpty())
@@ -130,6 +129,7 @@ public class PDBFTSRestClient extends FTSRestClient
                 .queryParam("wt", "json").queryParam("fl", wantedFields)
                 .queryParam("rows", String.valueOf(responseSize))
                 .queryParam("q", query)
+                .queryParam("start", String.valueOf(offSet))
                 .queryParam("sort", sortParam).queryParam("facet", "true")
                 .queryParam("facet.pivot", facetPivot)
                 .queryParam("facet.pivot.mincount", facetPivotMinCount);
@@ -139,6 +139,7 @@ public class PDBFTSRestClient extends FTSRestClient
         webResource = client.resource(PDB_SEARCH_ENDPOINT)
                 .queryParam("wt", "json").queryParam("fl", wantedFields)
                 .queryParam("rows", String.valueOf(responseSize))
+                .queryParam("start", String.valueOf(offSet))
                 .queryParam("q", query)
                 .queryParam("sort", sortParam);
       }
@@ -162,7 +163,7 @@ public class PDBFTSRestClient extends FTSRestClient
         else
         {
           errorMessage = getMessageByHTTPStatusCode(clientResponse
-                  .getStatus());
+.getStatus(), "PDB");
           throw new Exception(errorMessage);
         }
       }
@@ -187,9 +188,8 @@ public class PDBFTSRestClient extends FTSRestClient
       else if (exceptionMsg.contains("UnknownHostException"))
       {
         // The server 'www.ebi.ac.uk' is unreachable
-        throw new Exception(
-                MessageManager
-                        .getString("exception.pdb_server_unreachable"));
+        throw new Exception(MessageManager.formatMessage(
+                "exception.fts_server_unreachable", "PDB Solr"));
       }
       else
       {
@@ -198,35 +198,6 @@ public class PDBFTSRestClient extends FTSRestClient
     }
   }
 
-  public String getMessageByHTTPStatusCode(int code)
-  {
-    String message = "";
-    switch (code)
-    {
-    case 410:
-      message = MessageManager
-              .getString("exception.pdb_rest_service_no_longer_available");
-      break;
-    case 403:
-    case 404:
-      message = MessageManager.getString("exception.resource_not_be_found");
-      break;
-    case 408:
-    case 409:
-    case 500:
-    case 501:
-    case 502:
-    case 503:
-    case 504:
-    case 505:
-      message = MessageManager.getString("exception.pdb_server_error");
-      break;
-
-    default:
-      break;
-    }
-    return message;
-  }
 
   /**
    * Process error response from PDB server if/when one occurs.
@@ -347,32 +318,25 @@ public class PDBFTSRestClient extends FTSRestClient
         primaryKey = fieldData;
         summaryRowData[colCounter++] = primaryKey;
       }
+      else if (fieldData == null || fieldData.isEmpty())
+      {
+        summaryRowData[colCounter++] = null;
+      }
       else
       {
-        if (field.getGroup().getName().equals("Quality Measures"))
+        try
         {
-          try
-          {
-            if (fieldData == null || fieldData.isEmpty())
-            {
-              summaryRowData[colCounter++] = null;
-            }
-            else
-            {
-              Double value = Double.valueOf(fieldData);
-              summaryRowData[colCounter++] = value;
-            }
-          } catch (Exception e)
-          {
-            e.printStackTrace();
-            System.out.println("offending value:" + fieldData);
-            summaryRowData[colCounter++] = 0.0;
-          }
-        }
-        else
+          summaryRowData[colCounter++] = (field.getDataType()
+                  .getDataTypeClass() == Integer.class) ? Integer
+                  .valueOf(fieldData)
+ : (field.getDataType()
+                  .getDataTypeClass() == Double.class) ? Double
+                          .valueOf(fieldData)
+ : sanitiseData(fieldData);
+        } catch (Exception e)
         {
-          summaryRowData[colCounter++] = (fieldData == null || fieldData
-                  .isEmpty()) ? null : fieldData;
+          e.printStackTrace();
+            System.out.println("offending value:" + fieldData);
         }
       }
     }
@@ -418,13 +382,27 @@ public class PDBFTSRestClient extends FTSRestClient
       {
         return Objects.hash(primaryKey1, this.toString());
       }
+
+      @Override
+      public boolean equals(Object that)
+      {
+        return this.toString().equals(that.toString());
+      }
     };
   }
 
+  private static String sanitiseData(String data)
+  {
+    String cleanData = data.replaceAll("\\[\"", "").replaceAll("\\]\"", "")
+            .replaceAll("\\[", "").replaceAll("\\]", "")
+            .replaceAll("\",\"", ", ").replaceAll("\"", "");
+    return cleanData;
+  }
+
   @Override
-  public String getColumnDataConfigFile()
+  public String getColumnDataConfigFileName()
   {
-    return getFile("fts/pdb_data_columns.conf");
+    return "/fts/pdb_data_columns.txt";
   }