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;
}
/**
- * 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
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;
}
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();
+ }
+ }
+ }
}
-