JAL-1668 added filtering and sorting capabilites
[jalview.git] / src / jalview / ws / uimodel / PDBSearchResponse.java
index 9a6e1c6..7b172de 100644 (file)
@@ -7,6 +7,7 @@ import java.util.List;
 import java.util.Objects;
 
 import javax.swing.DefaultListModel;
+import javax.swing.table.DefaultTableModel;
 
 import org.json.simple.JSONObject;
 
@@ -59,18 +60,57 @@ public class PDBSearchResponse
     return defaultListModel;
   }
 
+  public static DefaultTableModel getTableModel(PDBSearchRequest request,
+          Collection<PDBResponseSummary> summariesList)
+  {
+    DefaultTableModel model = new DefaultTableModel();
+
+    if (request.getAssociatedSequence() != null)
+    {
+      model.addColumn("Sequence");
+    }
+    for (PDBDocField field : request.getWantedFields())
+    {
+      model.addColumn(field.getName());
+    }
+
+    for (PDBResponseSummary res : summariesList)
+    {
+      model.addRow(res.getSummaryColums());
+    }
+    return model;
+  }
+
+
+  
   public class PDBResponseSummary
   {
     private String pdbId;
 
-    private String summary;
+    private String summaryRow;
+
+    private String[] summaryColums;
+
+    private String associatedSequence;
 
     private int width = 480;
 
-    public PDBResponseSummary(JSONObject doc, List<PDBDocField> diplayFields)
+    public PDBResponseSummary(JSONObject doc,
+            List<PDBDocField> diplayFields, String associatedSeq)
     {
       StringBuilder summaryBuilder = new StringBuilder();
 
+      int colCounter = 0;
+      summaryColums = new String[(associatedSeq != null) ? diplayFields
+              .size() + 1 : diplayFields.size()];
+      if (associatedSeq != null)
+      {
+        this.associatedSequence = (associatedSeq.length() > 18) ? associatedSeq
+                .substring(0, 18) : associatedSeq;
+        summaryColums[0] = associatedSequence;
+        colCounter = 1;
+      }
+
       for (PDBDocField field : diplayFields)
       {
         if (field.equals(PDBDocField.MOLECULE_TYPE)
@@ -102,21 +142,25 @@ public class PDBSearchResponse
                     + getClass().getResource("/images/sugar.png")
                             .toString() + "\">");
           }
+          summaryColums[colCounter++] = moleculeType;
         }
         else if (field.equals(PDBDocField.PDB_ID)
                 && doc.get(PDBDocField.PDB_ID.getCode()) != null)
         {
           this.pdbId = doc.get(PDBDocField.PDB_ID.getCode()).toString();
+          summaryBuilder.append(this.pdbId).append(" | ");
+          summaryColums[colCounter++] = this.pdbId;
         }
         else if (doc.get(field.getCode()) != null)
         {
           summaryBuilder.append(field.getName()).append(": ")
                   .append(doc.get(field.getCode())).append(" | ");
+          summaryColums[colCounter++] = doc.get(field.getCode()).toString();
         }
       }
       int endIndex = summaryBuilder.lastIndexOf(" | ");
       String fSummary = summaryBuilder.toString().substring(0, endIndex);
-      this.summary = fSummary.trim();
+      this.summaryRow = fSummary.trim();
       summaryBuilder = null;
     }
 
@@ -130,14 +174,24 @@ public class PDBSearchResponse
       this.pdbId = pdbId;
     }
 
-    public String getSummary()
+    public String getSummaryRow()
+    {
+      return summaryRow;
+    }
+
+    public void setSummaryRow(String summary)
     {
-      return summary;
+      this.summaryRow = summary;
     }
 
-    public void setSummary(String summary)
+    public String[] getSummaryColums()
     {
-      this.summary = summary;
+      return summaryColums;
+    }
+
+    public void setSummaryColums(String[] summaryColums)
+    {
+      this.summaryColums = summaryColums;
     }
 
     public String toString()
@@ -145,7 +199,7 @@ public class PDBSearchResponse
       StringBuilder html = new StringBuilder();
       html.append("<html><div style=\"width:" + width
               + "; word-wrap: break-word; border-bottom-style: dotted;\"> ");
-      html.append(summary);
+      html.append(summaryRow);
       html.append("</div></html>");
       return html.toString();
     }
@@ -153,8 +207,24 @@ public class PDBSearchResponse
     @Override
     public int hashCode()
     {
-      return Objects.hash(this.pdbId, this.summary);
+      return Objects.hash(this.pdbId, this.summaryRow);
+    }
+
+    @Override
+    public boolean equals(Object other)
+    {
+      if (!(other instanceof PDBResponseSummary))
+      {
+        return false;
+      }
+
+      PDBResponseSummary that = (PDBResponseSummary) other;
+
+      // Custom equality check here.
+      return this.pdbId.equals(that.pdbId)
+              && this.summaryRow.equals(that.summaryRow);
     }
+
   }
 
 }