Created 3Dbeacons data_columns.txt Test passed for data columns
[jalview.git] / src / jalview / fts / service / threedbeacons / TDBeaconsFTSRestClient.java
index 1ee7f37..e6d45e5 100644 (file)
@@ -6,6 +6,7 @@ import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import javax.ws.rs.core.MediaType;
 
@@ -35,6 +36,10 @@ public class TDBeaconsFTSRestClient extends FTSRestClient
   
   private static FTSRestClientI instance = null;
   
+  protected TDBeaconsFTSRestClient()
+  {   
+  }
+  
   @SuppressWarnings("unchecked")
   @Override
   public FTSRestResponse executeRequest(FTSRestRequest tdbRestRequest)
@@ -48,6 +53,7 @@ public class TDBeaconsFTSRestClient extends FTSRestClient
       int responseSize = (tdbRestRequest.getResponseSize() == 0)
               ? getDefaultResponsePageSize()
               : tdbRestRequest.getResponseSize();
+      //int offSet = pdbRestRequest.getOffSet();
       
       String query = tdbRestRequest.getFieldToSearchBy()
               + tdbRestRequest.getSearchTerm();
@@ -70,7 +76,9 @@ public class TDBeaconsFTSRestClient extends FTSRestClient
       }
       WebResource webResource;
       webResource = client.resource(DEFAULT_THREEDBEACONS_DOMAIN)
-              .queryParam("P",query);
+              .queryParam("ac", query);
+//              .queryParam("rows", String.valueOf(responseSize))
+//              .queryParam("P",query);
       URI uri = webResource.getURI();
         
       System.out.println(uri);
@@ -132,6 +140,10 @@ public class TDBeaconsFTSRestClient extends FTSRestClient
       
   }
   
+  public String setSearchTerm() {
+    return null;
+  }
+  
   public static FTSRestResponse parseTDBeaconsJsonResponse(
           String tdbJsonResponseString, FTSRestRequest tdbRestRequest)
   {
@@ -153,35 +165,25 @@ public class TDBeaconsFTSRestClient extends FTSRestClient
       {
         jsonObj = (Map<String, Object>) JSONUtils.parse(tdbJsonResponseString);
       }
-      Map<String, Object> tdbEntry = (Map<String, Object>) jsonObj.get("uniprot_entry");
+      //Map<String, Object> tdbResponse = (Map<String, Object>) jsonObj.get("structures");
       //String seqLength = tdbEntry.get("sequence_length").toString();
-      int seqLength = Integer.valueOf(tdbEntry.get("sequence_length").toString());
+      //int seqLength = Integer.valueOf(tdbEntry.get("sequence_length").toString());
       
-      // tdbStructures is the list of found structures
-//      Map<String, Object> tdbStructures = (Map<String, Object>) jsonObj.get("structures");
-      Object[] structures = (Object[]) jsonObj.get("structures");
-      String accessName = ((Map<String, Object>) jsonObj.get("uniprot_entry"))
-              .get("ac").toString();
-      // this is to be modified
-      int numFound = structures.length;
-//      if (numFound > 0)
-//      {
-//        
-//        result = new ArrayList<>();
-//        List<String> models;
-//        //= ((Map<String, Object>) jsonObj.get("structures"))
-//                //.get("model_identifier").toString();
-//        for (Iterator<String> modelsIter = models.iterator(); modelsIter.hasNext();)
-//                .hasNext();)
-//        {
-//          Map<String, Object> doc = (Map<String, Object>) docIter.next();
-//          result.add(getFTSData(doc, tdbRestRequest));
-//        }
+      int seqLength = (int) ((Map<String, Object>) jsonObj.get("uniprot_entry")).get("sequence_length");
+      result = new ArrayList<>();
+      List<Object> structures = (List<Object>) jsonObj.get("structures");
+      int numFound = 0;
+      for (Iterator<Object> strucIter = structures.iterator(); strucIter
+              .hasNext();)
+      {
+        Map<String, Object> structure = (Map<String, Object>) strucIter.next();
+        result.add(getFTSData(structure, tdbRestRequest));
+        numFound++;
+      }
         searchResult.setNumberOfItemsFound(numFound); 
-        // searchResult.setAccessionName(accessName); ?usefulness?       
-//        searchResult.setSearchSummary(result);
-//        
-//      }
+        searchResult.setSearchSummary(result);
+        searchResult.setSequenceLength(seqLength);
+        
     } catch (ParseException e)
     {
       e.printStackTrace();
@@ -189,6 +191,96 @@ public class TDBeaconsFTSRestClient extends FTSRestClient
     return searchResult;
   }
 
+private static FTSData getFTSData(Map<String, Object> tdbJsonStructure,
+          FTSRestRequest tdbRequest)
+  {
+    // TODO Auto-generated method stub
+    String primaryKey = null;
+    Object[] summaryRowData;
+    Collection<FTSDataColumnI> displayFields = tdbRequest.getWantedFields();
+    int colCounter = 0;
+    summaryRowData = new Object[displayFields.size()];
+    for (FTSDataColumnI field : displayFields) {
+      String fieldData = (tdbJsonStructure.get(field.getCode()) == null) ? " " 
+              : tdbJsonStructure.get(field.getCode()).toString();
+      if (field.isPrimaryKeyColumn())
+      {
+        primaryKey = fieldData;
+        summaryRowData[colCounter++] = primaryKey;
+      }
+      else if (fieldData == null || fieldData.isEmpty())
+      {
+        summaryRowData[colCounter++] = null;
+      }
+      else 
+      {
+        try
+        {
+          summaryRowData[colCounter++] = (field.getDataType()
+                  .getDataTypeClass() == Integer.class)
+                          ? Integer.valueOf(fieldData)
+                          : (field.getDataType()
+                                  .getDataTypeClass() == Double.class)
+                                          ? Double.valueOf(fieldData)
+                                          : fieldData;
+        } catch (Exception e)
+        {
+          e.printStackTrace();
+          System.out.println("offending value:" + fieldData);
+        }
+      }
+    }
+    final String primaryKey1 = primaryKey;
+    final Object[] summaryRowData1 = summaryRowData;
+    
+    return new FTSData()
+    {
+
+      @Override
+      public Object[] getSummaryData()
+      {
+        return summaryRowData1;
+      }
+
+      @Override
+      public Object getPrimaryKey()
+      {
+        return primaryKey1;
+      }
+      
+      /**
+       * Returns a string representation of this object;
+       */
+      @Override
+      public String toString()
+      {
+        StringBuilder summaryFieldValues = new StringBuilder();
+        for (Object summaryField : summaryRowData1)
+        {
+          summaryFieldValues.append(
+                  summaryField == null ? " " : summaryField.toString())
+                  .append("\t");
+        }
+        return summaryFieldValues.toString();
+      }
+      
+      /**
+       * Returns hash code value for this object
+       */
+      @Override
+      public int hashCode()
+      {
+        return Objects.hash(primaryKey1, this.toString());
+      }
+
+      @Override
+      public boolean equals(Object that)
+      {
+        return this.toString().equals(that.toString());
+      }
+    };
+  }
+
 //  private static FTSData getFTSData(Map<String, Object> doc,
 //          FTSRestRequest tdbRestRequest)
 //  {