package com.compomics.util.gui.variants.aa_substitutions; import com.compomics.util.experiment.biology.AminoAcid; import com.compomics.util.experiment.biology.variants.AaSubstitutionMatrix; import java.util.HashSet; import javax.swing.table.DefaultTableModel; /** * Table model to display the content of an amino acid substitution matrix. * * @author Marc Vaudel */ public class AaSubstitutionMatrixTableModel extends DefaultTableModel { /** * The possible amino acids represented by their single character code. */ private char[] aminoAcids = AminoAcid.getUniqueAminoAcids(); /** * The substitution matrix to display. */ private AaSubstitutionMatrix aaSubstitutionMatrix; /** * Boolean indicating whether the table can be edited. */ private boolean editable = false; /** * Constructor. * * @param aaSubstitutionMatrix the substitution matrix to display * @param editable a boolean indicating whether the table can be edited */ public AaSubstitutionMatrixTableModel(AaSubstitutionMatrix aaSubstitutionMatrix, boolean editable) { this.aaSubstitutionMatrix = aaSubstitutionMatrix; this.editable = editable; } @Override public int getRowCount() { if (aminoAcids != null) { return aminoAcids.length; } return 0; } @Override public int getColumnCount() { if (aminoAcids != null) { return aminoAcids.length + 1; } return 0; } @Override public String getColumnName(int column) { if (column == 0) { return " "; } return aminoAcids[column-1] + ""; } @Override public Object getValueAt(int row, int column) { char originalAa = aminoAcids[row]; switch (column) { case 0: return originalAa; default: if (aaSubstitutionMatrix != null) { HashSet<Character> possibleVariants = aaSubstitutionMatrix.getSubstitutionAminoAcids(originalAa); if (possibleVariants != null) { Character destinationAminoAcid = aminoAcids[column - 1]; return possibleVariants.contains(destinationAminoAcid); } } return false; } } @Override public Class getColumnClass(int columnIndex) { for (int i = 0; i < getRowCount(); i++) { if (getValueAt(i, columnIndex) != null) { return getValueAt(i, columnIndex).getClass(); } } return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return editable && columnIndex > 1; } /** * Sets the substitution matrix to display. * * @param aaSubstitutionMatrix the substitution matrix to display */ public void setAaSubstitutionMatrix(AaSubstitutionMatrix aaSubstitutionMatrix) { this.aaSubstitutionMatrix = aaSubstitutionMatrix; } }