JAL-2045 JAL-2047 improvement for sorting PDB quality measure numerically, and improv...
[jalview.git] / src / jalview / ws / uimodel / PDBRestResponse.java
index bbd5e84..2a38b39 100644 (file)
@@ -23,10 +23,12 @@ 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.Objects;
 
+import javax.swing.JTable;
 import javax.swing.table.DefaultTableModel;
 
 import org.json.simple.JSONObject;
@@ -91,6 +93,9 @@ public class PDBRestResponse
   public static DefaultTableModel getTableModel(PDBRestRequest request,
           Collection<PDBResponseSummary> summariesList)
   {
+    final PDBDocField[] cols = request.getWantedFields().toArray(
+            new PDBDocField[0]);
+    final int colOffset = request.getAssociatedSequence() == null ? 0 : 1;
     DefaultTableModel tableModel = new DefaultTableModel()
     {
       @Override
@@ -98,6 +103,22 @@ public class PDBRestResponse
       {
         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)
     {
@@ -156,12 +177,34 @@ public class PDBRestResponse
         }
         else
         {
-          summaryRowData[colCounter++] = fieldData;
+          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;
+          }
         }
       }
     }
 
-    public String getPdbId()
+    public Object getPdbId()
     {
       return pdbId;
     }
@@ -176,7 +219,7 @@ public class PDBRestResponse
       return summaryRowData;
     }
 
-    public void setSummaryData(String[] summaryData)
+    public void setSummaryData(Object[] summaryData)
     {
       this.summaryRowData = summaryData;
     }
@@ -190,7 +233,9 @@ public class PDBRestResponse
       StringBuilder summaryFieldValues = new StringBuilder();
       for (Object summaryField : summaryRowData)
       {
-        summaryFieldValues.append(summaryField.toString()).append("\t");
+        summaryFieldValues.append(
+                summaryField == null ? " " : summaryField.toString())
+                .append("\t");
       }
       return summaryFieldValues.toString();
     }
@@ -220,4 +265,35 @@ public class PDBRestResponse
 
   }
 
+  public static void configureTableColumn(JTable tbl_summary,
+          Collection<PDBDocField> wantedFields)
+  {
+    for (PDBDocField wantedField : wantedFields)
+    {
+      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);
+      }
+    }
+  }
 }