/* TagComparisonTableModel.java created 2007-12-04
*
*/
package org.signalml.app.view.tag.comparison;
import java.text.DecimalFormat;
import javax.swing.table.AbstractTableModel;
import org.signalml.domain.tag.TagComparisonResult;
import org.signalml.plugin.export.signal.TagStyle;
/** TagComparisonTableModel
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class TagComparisonTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private ColumnTableModel columnTableModel;
private RowTableModel rowTableModel;
private DecimalFormat timeFormat = new DecimalFormat("0.00");
private DecimalFormat percentFormat = new DecimalFormat("0.000");
private boolean showPercent = false;
private TagComparisonResult result;
public TagComparisonTableModel() {
super();
}
public ColumnTableModel getColumnTableModel() {
if (columnTableModel == null) {
columnTableModel = new ColumnTableModel();
}
return columnTableModel;
}
public RowTableModel getRowTableModel() {
if (rowTableModel == null) {
rowTableModel = new RowTableModel();
}
return rowTableModel;
}
private void reset() {
fireTableStructureChanged();
if (columnTableModel != null) {
columnTableModel.fireTableStructureChanged();
}
if (rowTableModel != null) {
rowTableModel.fireTableStructureChanged();
}
}
public boolean isShowPercent() {
return showPercent;
}
public void setShowPercent(boolean showPercent) {
if (this.showPercent != showPercent) {
this.showPercent = showPercent;
fireTableDataChanged();
}
}
public TagComparisonResult getResult() {
return result;
}
public void setResult(TagComparisonResult result) {
if (this.result != result) {
this.result = result;
reset();
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}
@Override
public int getColumnCount() {
if (result == null) {
return 0;
}
return result.getBottomStyleCount() + 1;
}
@Override
public int getRowCount() {
if (result == null) {
return 0;
}
return result.getTopStyleCount() + 1;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (showPercent) {
double divider = result.getTopStyleTime(rowIndex-1);
if (divider == 0) {
return "-";
} else {
return percentFormat.format((result.getStyleOverlay(rowIndex-1, columnIndex-1) * 100) / divider);
}
} else {
return timeFormat.format(result.getStyleOverlay(rowIndex-1, columnIndex-1));
}
}
public class ColumnTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
@Override
public int getColumnCount() {
if (result == null) {
return 0;
}
return result.getBottomStyleCount()+1;
}
@Override
public int getRowCount() {
if (result == null) {
return 0;
}
return 1;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (columnIndex == 0) {
return null;
} else {
return result.getBottomStyleAt(columnIndex-1);
}
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return TagStyle.class;
}
}
public class RowTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
@Override
public int getColumnCount() {
if (result == null) {
return 0;
}
return 1;
}
@Override
public int getRowCount() {
if (result == null) {
return 0;
}
return result.getTopStyleCount()+1;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (rowIndex == 0) {
return null;
} else {
return result.getTopStyleAt(rowIndex-1);
}
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return TagStyle.class;
}
}
}