package versusSNP.gui;
import java.awt.BorderLayout;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import versusSNP.Document;
import versusSNP.Size;
import versusSNP.blast.util.SNPList;
import versusSNP.genome.SNP;
import versusSNP.gui.widgets.SNPTable;
import versusSNP.gui.widgets.SNPTableControl;
import versusSNP.gui.widgets.SNPTableModel;
public class InDelPanel extends JPanel implements Observer, SNPContainer {
private static final long serialVersionUID = -4206408332681210048L;
private byte type;
private SNPTable table;
private SNPTableModel tableModel;
private SNPTableControl tableControl;
private SNPList snpList;
private int record;
public InDelPanel() {
super();
setLayout(new BorderLayout());
setPreferredSize(Size.main_frame_west);
tableModel = new SNPTableModel(headerTexts(), SNPTableControl.PAGE_RECORD_LIMIT);
table = new SNPTable(tableModel);
tableControl = new SNPTableControl(this);
table.getSelectionModel().addListSelectionListener(tableModel);
add(new JScrollPane(table), BorderLayout.CENTER);
add(tableControl, BorderLayout.SOUTH);
}
public InDelPanel(byte type) {
this();
this.type = type;
}
private Object[] headerTexts() {
return new Object[] {
UICaption.table_column_query_position,
UICaption.table_column_subject_position,
UICaption.table_column_query_position_in_genome,
UICaption.table_column_subject_position_in_genome,
UICaption.table_column_query_position_in_codon,
UICaption.table_column_subject_position_in_codon,
UICaption.table_column_query_base,
UICaption.table_column_subject_base,
UICaption.table_column_query_amino_acid,
UICaption.table_column_subject_amino_acid,
UICaption.table_column_query_codon,
UICaption.table_column_subject_codon,
UICaption.table_column_query,
UICaption.table_column_subject
};
}
public void setHeaderTexts() {
Object[] headerTexts = headerTexts();
for (int i = 0; i < headerTexts.length; i++) {
table.getColumnModel().getColumn(i).setHeaderValue(headerTexts[i]);
}
}
@Override
public void update(Observable o, Object arg) {
Document document = (Document)o;
if (document.getQueryGenome() != null && document.getSubjectGenome() != null) {
if (this.type == SNP.INSERTION) {
SNPList inSnpList = document.getQueryGenome().getInSNPList(document.getSubjectGenome());
if (inSnpList != null) {
this.snpList = inSnpList;
tableControl.setSnpList(snpList);
accept(inSnpList);
}
} else {
SNPList delSnpList = document.getQueryGenome().getDelSNPList(document.getSubjectGenome());
if (delSnpList != null) {
this.snpList = delSnpList;
tableControl.setSnpList(snpList);
accept(delSnpList);
}
}
}
}
@Override
public void accept(SNPList snpList) {
tableModel.accept(snpList, this);
table.autoResizeColumns();
}
@Override
public void add(SNP snp) {
tableModel.addRow(new Object[]{snp.getQPos(), snp.getSPos(),
snp.getQPosInGenome(), snp.getSPosInGenome(),
snp.getQPosInCodon(), snp.getSPosInCodon(),
snp.getQBase(), snp.getSBase(),
snp.getQAA(), snp.getSAA(),
snp.getQCodon(), snp.getEquivalentSCodon(),
snp.getQOrf(), snp.getSOrf()});
}
public SNPTable getTable() {
return table;
}
@Override
public int getRecord() {
return record;
}
@Override
public void setRecord(int record) {
this.record = record;
}
@Override
public void addRecord() {
if (this.record/SNPTableControl.PAGE_RECORD_LIMIT
< snpList.size()/SNPTableControl.PAGE_RECORD_LIMIT)
this.record += SNPTableControl.PAGE_RECORD_LIMIT;
}
@Override
public void setMaxRecord() {
this.record = snpList.size() - snpList.size()%SNPTableControl.PAGE_RECORD_LIMIT;
}
@Override
public void subRecord() {
if (this.record > SNPTableControl.PAGE_RECORD_LIMIT)
this.record -= SNPTableControl.PAGE_RECORD_LIMIT;
}
@Override
public void reload() {
tableModel.accept(snpList, this);
table.autoResizeColumns();
}
public void setToolTipTexts() {
tableControl.setToolTipTexts();
}
@Override
public void updateInfo() {
tableControl.setTableInfo(UICaption.getTableInfo(record, table.getSelectedRow()>0?table.getSelectedRow():0, snpList.size()));
}
@Override
public void clear() {
tableModel.setRowCount(0);
tableControl.clear();
}
}