JAL-1270 more fix for failing Functional test
[jalview.git] / src / jalview / ws / uimodel / PDBRestResponse.java
index 5a1f53d..3471fab 100644 (file)
 
 package jalview.ws.uimodel;
 
+import jalview.datamodel.SequenceI;
 import jalview.ws.dbsources.PDBRestClient.PDBDocField;
+import jalview.ws.dbsources.PDBRestClient.PDBDocField.Group;
 
 import java.util.Collection;
-import java.util.List;
 import java.util.Objects;
 
-import javax.swing.DefaultListModel;
+import javax.swing.JTable;
 import javax.swing.table.DefaultTableModel;
 
 import org.json.simple.JSONObject;
@@ -78,27 +79,8 @@ public class PDBRestResponse
   }
 
   /**
-   * Convenience method to obtain a List model for a given summary list
-   * 
-   * @param summariesList
-   *          the summary list which contains the data for generating the lists
-   *          data
-   * @return the list model generated for the search summary
-   */
-  public static DefaultListModel<PDBResponseSummary> getListModel(
-          Collection<PDBResponseSummary> summariesList)
-  {
-    DefaultListModel<PDBResponseSummary> defaultListModel = new DefaultListModel<PDBResponseSummary>();
-    for (PDBResponseSummary summaryList : summariesList)
-    {
-      defaultListModel.addElement(summaryList);
-    }
-    return defaultListModel;
-  }
-
-  /**
-   * Convenience method to obtain a Table model for a given summary List and
-   * request
+   * Convenience method to obtain a Table model for a given summary List based
+   * on the request parameters
    * 
    * @param request
    *          the PDBRestRequest object which holds useful information for
@@ -111,112 +93,119 @@ public class PDBRestResponse
   public static DefaultTableModel getTableModel(PDBRestRequest request,
           Collection<PDBResponseSummary> summariesList)
   {
-    DefaultTableModel model = new DefaultTableModel();
+    final PDBDocField[] cols = request.getWantedFields().toArray(
+            new PDBDocField[0]);
+    final int colOffset = request.getAssociatedSequence() == null ? 0 : 1;
+    DefaultTableModel tableModel = new DefaultTableModel()
+    {
+      @Override
+      public boolean isCellEditable(int row, int column)
+      {
+        return false;
+      }
 
+      @Override
+      public Class<?> getColumnClass(int columnIndex)
+      {
+        if (colOffset == 1 && columnIndex == 0)
+        {
+          return String.class;
+        }
+        if (cols[columnIndex - colOffset].getGroup().getName()
+                .equalsIgnoreCase(Group.QUALITY_MEASURES.getName()))
+        {
+          return Double.class;
+        }
+        return String.class;
+      }
+
+    };
     if (request.getAssociatedSequence() != null)
     {
-      model.addColumn("Sequence");
+      tableModel.addColumn("Ref Sequence"); // Create sequence column header if
+      // exists in the request
     }
     for (PDBDocField field : request.getWantedFields())
     {
-      model.addColumn(field.getName());
+      tableModel.addColumn(field.getName()); // Create sequence column header if
+                                             // exists in the request
     }
 
     for (PDBResponseSummary res : summariesList)
     {
-      model.addRow(res.getSummaryData());
+      tableModel.addRow(res.getSummaryData()); // Populate table rows with
+                                               // summary list
     }
-    return model;
+
+    return tableModel;
   }
 
   /**
    * Model for a unique response summary
    * 
-   * @author tcnofoegbu
-   *
    */
   public class PDBResponseSummary
   {
     private String pdbId;
 
-    private String concatenatedSummaryData;
-
-    private String[] summaryData;
+    private Object[] summaryRowData;
 
-    private String associatedSequence;
+    private SequenceI associatedSequence;
 
-    private int width = 480;
-
-    public PDBResponseSummary(JSONObject doc, PDBRestRequest request)
+    public PDBResponseSummary(JSONObject pdbJsonDoc, PDBRestRequest request)
     {
-      StringBuilder summaryBuilder = new StringBuilder();
-      List<PDBDocField> diplayFields = request.getWantedFields();
-      String associatedSeq = request.getAssociatedSequence();
+      Collection<PDBDocField> diplayFields = request.getWantedFields();
+      SequenceI associatedSeq = request.getAssociatedSequence();
       int colCounter = 0;
-      summaryData = new String[(associatedSeq != null) ? diplayFields
+      summaryRowData = new Object[(associatedSeq != null) ? diplayFields
               .size() + 1 : diplayFields.size()];
       if (associatedSeq != null)
       {
-        this.associatedSequence = (associatedSeq.length() > 18) ? associatedSeq
-                .substring(0, 18) : associatedSeq;
-        summaryData[0] = associatedSequence;
+        this.associatedSequence = associatedSeq;
+        summaryRowData[0] = associatedSequence;
         colCounter = 1;
       }
 
       for (PDBDocField field : diplayFields)
       {
-        if (field.equals(PDBDocField.MOLECULE_TYPE)
-                && doc.get(PDBDocField.MOLECULE_TYPE.getCode()) != null)
-        {
-          String moleculeType = doc
-                  .get(PDBDocField.MOLECULE_TYPE.getCode()).toString();
-          if (moleculeType.equalsIgnoreCase("protein"))
-          {
-            summaryBuilder.append("<img src=\""
-                    + getClass().getResource("/images/protein.png")
-                            .toString() + "\">");
-          }
-          if (moleculeType.equalsIgnoreCase("dna"))
-          {
-            summaryBuilder.append("<img src=\""
-                    + getClass().getResource("/images/dna.png").toString()
-                    + "\">");
-          }
-          if (moleculeType.equalsIgnoreCase("rna"))
-          {
-            summaryBuilder.append("<img src=\""
-                    + getClass().getResource("/images/dna.png").toString()
-                    + "\">");
-          }
-          if (moleculeType.equalsIgnoreCase("sugar"))
-          {
-            summaryBuilder.append("<img src=\""
-                    + getClass().getResource("/images/sugar.png")
-                            .toString() + "\">");
-          }
-          summaryData[colCounter++] = moleculeType;
-        }
-        else if (field.equals(PDBDocField.PDB_ID)
-                && doc.get(PDBDocField.PDB_ID.getCode()) != null)
+        String fieldData = (pdbJsonDoc.get(field.getCode()) == null) ? ""
+                : pdbJsonDoc.get(field.getCode()).toString();
+        if (field.equals(PDBDocField.PDB_ID))
         {
-          this.pdbId = doc.get(PDBDocField.PDB_ID.getCode()).toString();
-          summaryBuilder.append(this.pdbId).append(" | ");
-          summaryData[colCounter++] = this.pdbId;
+          this.pdbId = fieldData;
+          summaryRowData[colCounter++] = this.pdbId;
         }
-        else if (doc.get(field.getCode()) != null)
+        else
         {
-          summaryBuilder.append(field.getName()).append(": ")
-                  .append(doc.get(field.getCode())).append(" | ");
-          summaryData[colCounter++] = doc.get(field.getCode()).toString();
+          if (field.getGroup().getName()
+                  .equals(Group.QUALITY_MEASURES.getName()))
+          {
+            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++] = (fieldData == null || fieldData
+                    .isEmpty()) ? null : fieldData;
+          }
         }
       }
-      int endIndex = summaryBuilder.lastIndexOf(" | ");
-      String fSummary = summaryBuilder.toString().substring(0, endIndex);
-      this.concatenatedSummaryData = fSummary.trim();
-      summaryBuilder = null;
     }
 
-    public String getPdbId()
+    public Object getPdbId()
     {
       return pdbId;
     }
@@ -226,59 +215,100 @@ public class PDBRestResponse
       this.pdbId = pdbId;
     }
 
-    public String getConcatenatedSummaryData()
-    {
-      return concatenatedSummaryData;
-    }
-
-    public void setConcatenatedSummaryData(String concatenatedSummaryData)
-    {
-      this.concatenatedSummaryData = concatenatedSummaryData;
-    }
-
-    public String[] getSummaryData()
+    public Object[] getSummaryData()
     {
-      return summaryData;
+      return summaryRowData;
     }
 
-    public void setSummaryData(String[] summaryData)
+    public void setSummaryData(Object[] summaryData)
     {
-      this.summaryData = summaryData;
+      this.summaryRowData = summaryData;
     }
 
+    /**
+     * Returns a string representation of this object;
+     */
+    @Override
     public String toString()
     {
-      StringBuilder html = new StringBuilder();
-      html.append("<html><div style=\"width:" + width
-              + "; word-wrap: break-word; border-bottom-style: dotted;\"> ");
-      html.append(concatenatedSummaryData);
-      html.append("</div></html>");
-      return html.toString();
+      StringBuilder summaryFieldValues = new StringBuilder();
+      for (Object summaryField : summaryRowData)
+      {
+        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(this.pdbId, this.concatenatedSummaryData);
+      return Objects.hash(this.pdbId, this.toString());
     }
 
+    /**
+     * Indicates whether some object is equal to this one
+     */
     @Override
-    public boolean equals(Object other)
+    public boolean equals(Object that)
     {
-      if (!(other instanceof PDBResponseSummary))
+      if (!(that instanceof PDBResponseSummary))
       {
         return false;
       }
-
-      PDBResponseSummary that = (PDBResponseSummary) other;
-
-      // Custom equality check here.
-      return this.pdbId.equals(that.pdbId)
-              && this.concatenatedSummaryData
-                      .equals(that.concatenatedSummaryData);
+      PDBResponseSummary another = (PDBResponseSummary) that;
+      return this.toString().equals(another.toString());
     }
 
   }
 
+  public static void configureTableColumn(JTable tbl_summary,
+          Collection<PDBDocField> wantedFields)
+  {
+    try
+    {
+      // wait for table model initialisation to complete
+      Thread.sleep(1200);
+    } catch (InterruptedException e1)
+    {
+      e1.printStackTrace();
+    }
+    for (PDBDocField wantedField : wantedFields)
+    {
+      try
+      {
+      if (wantedField.equals(PDBDocField.PDB_ID))
+      {
+        tbl_summary.getColumn(wantedField.getName()).setMinWidth(40);
+        tbl_summary.getColumn(wantedField.getName()).setMaxWidth(60);
+        tbl_summary.getColumn(wantedField.getName()).setPreferredWidth(45);
+      }
+      else if (wantedField.equals(PDBDocField.TITLE))
+      {
+        tbl_summary.getColumn(wantedField.getName()).setMinWidth(300);
+        tbl_summary.getColumn(wantedField.getName()).setMaxWidth(1000);
+        tbl_summary.getColumn(wantedField.getName()).setPreferredWidth(400);
+      }
+      else if (wantedField.getGroup() == Group.QUALITY_MEASURES)
+      {
+        tbl_summary.getColumn(wantedField.getName()).setMinWidth(50);
+        tbl_summary.getColumn(wantedField.getName()).setMaxWidth(150);
+        tbl_summary.getColumn(wantedField.getName()).setPreferredWidth(85);
+      }
+      else
+      {
+        tbl_summary.getColumn(wantedField.getName()).setMinWidth(50);
+        tbl_summary.getColumn(wantedField.getName()).setMaxWidth(400);
+        tbl_summary.getColumn(wantedField.getName()).setPreferredWidth(95);
+      }
+      } catch (Exception e)
+      {
+        e.printStackTrace();
+      }
+    }
+  }
 }
-