X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fuimodel%2FPDBRestResponse.java;h=3471fab0ae4e8e233df672a38c21630b82b6ac4d;hb=39a3725d4d499eb0f1bd14e3c049cd954faddfdc;hp=889a324fa861273221b7f5d14987272d24ac4c52;hpb=fd235cc7542d6e308e054a8a76580a6c511ae631;p=jalview.git diff --git a/src/jalview/ws/uimodel/PDBRestResponse.java b/src/jalview/ws/uimodel/PDBRestResponse.java index 889a324..3471fab 100644 --- a/src/jalview/ws/uimodel/PDBRestResponse.java +++ b/src/jalview/ws/uimodel/PDBRestResponse.java @@ -21,12 +21,14 @@ 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.DefaultListModel; +import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import org.json.simple.JSONObject; @@ -77,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 getListModel( - Collection summariesList) - { - DefaultListModel defaultListModel = new DefaultListModel(); - 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 @@ -110,80 +93,119 @@ public class PDBRestResponse public static DefaultTableModel getTableModel(PDBRestRequest request, Collection 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 String associatedSequence; + private Object[] summaryRowData; - private int width = 480; + private SequenceI associatedSequence; - public PDBResponseSummary(JSONObject doc, PDBRestRequest request) + public PDBResponseSummary(JSONObject pdbJsonDoc, PDBRestRequest request) { - StringBuilder summaryBuilder = new StringBuilder(); Collection diplayFields = request.getWantedFields(); - String associatedSeq = request.getAssociatedSequence(); + 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.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(); - summaryData[colCounter++] = this.pdbId; + this.pdbId = fieldData; + summaryRowData[colCounter++] = this.pdbId; } else { - String value = (doc.get(field.getCode()) == null) ? "" : doc.get( - field.getCode()).toString(); - summaryBuilder.append(field.getName()).append(": ").append(value) - .append(" | "); - summaryData[colCounter++] = value; + 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; + } } } - this.concatenatedSummaryData = summaryBuilder.toString(); - summaryBuilder = null; } - public String getPdbId() + public Object getPdbId() { return pdbId; } @@ -193,59 +215,100 @@ public class PDBRestResponse this.pdbId = pdbId; } - public String getConcatenatedSummaryData() - { - return concatenatedSummaryData; - } - - public void setConcatenatedSummaryData(String concatenatedSummaryData) + public Object[] getSummaryData() { - this.concatenatedSummaryData = concatenatedSummaryData; + return summaryRowData; } - public String[] getSummaryData() + public void setSummaryData(Object[] summaryData) { - return summaryData; - } - - public void setSummaryData(String[] 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.append(concatenatedSummaryData); - html.append("
"); - 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 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(); + } + } + } } -