package jalview.ws.uimodel;
+import jalview.ws.dbsources.PDBRestClient.PDBDocField;
+
import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
import javax.swing.DefaultListModel;
+import javax.swing.table.DefaultTableModel;
+
+import org.json.simple.JSONObject;
public class PDBSearchResponse
{
private String responseTime;
- private Collection<PDBSummaryListModel> searchSummary;
+ private Collection<PDBResponseSummary> searchSummary;
public int getItemsFound()
{
this.responseTime = responseTime;
}
- public Collection<PDBSummaryListModel> getSearchSummary()
+ public Collection<PDBResponseSummary> getSearchSummary()
{
return searchSummary;
}
- public void setSearchSummary(Collection<PDBSummaryListModel> searchSummary)
+ public void setSearchSummary(Collection<PDBResponseSummary> searchSummary)
{
this.searchSummary = searchSummary;
}
- public static DefaultListModel<PDBSummaryListModel> getListModel(
- Collection<PDBSummaryListModel> summariesList)
+ public static DefaultListModel<PDBResponseSummary> getListModel(
+ Collection<PDBResponseSummary> summariesList)
{
- DefaultListModel<PDBSummaryListModel> defaultListModel = new DefaultListModel<PDBSummaryListModel>();
- for (PDBSummaryListModel summaryList : summariesList)
+ DefaultListModel<PDBResponseSummary> defaultListModel = new DefaultListModel<PDBResponseSummary>();
+ for (PDBResponseSummary summaryList : summariesList)
{
defaultListModel.addElement(summaryList);
}
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 summaryRow;
+
+ private String[] summaryColums;
+
+ private String associatedSequence;
+
+ private int width = 480;
+
+ 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)
+ && 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() + "\">");
+ }
+ 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.summaryRow = fSummary.trim();
+ summaryBuilder = null;
+ }
+
+ public String getPdbId()
+ {
+ return pdbId;
+ }
+
+ public void setPdbId(String pdbId)
+ {
+ this.pdbId = pdbId;
+ }
+
+ public String getSummaryRow()
+ {
+ return summaryRow;
+ }
+
+ public void setSummaryRow(String summary)
+ {
+ this.summaryRow = summary;
+ }
+
+ public String[] getSummaryColums()
+ {
+ return summaryColums;
+ }
+
+ public void setSummaryColums(String[] summaryColums)
+ {
+ this.summaryColums = summaryColums;
+ }
+
+ public String toString()
+ {
+ StringBuilder html = new StringBuilder();
+ html.append("<html><div style=\"width:" + width
+ + "; word-wrap: break-word; border-bottom-style: dotted;\"> ");
+ html.append(summaryRow);
+ html.append("</div></html>");
+ return html.toString();
+ }
+
+ @Override
+ public int hashCode()
+ {
+ 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);
+ }
+
+ }
+
}