/* SleepStatisticTableModel.java created 2008-02-23 * */ package org.signalml.plugin.newstager.ui; import static org.signalml.plugin.i18n.PluginI18n._; import java.util.Arrays; import java.util.Comparator; import java.util.LinkedList; import javax.swing.table.AbstractTableModel; import org.signalml.domain.tag.SleepTagName; import org.signalml.plugin.export.signal.ExportedTagStyle; import org.signalml.plugin.newstager.data.NewStagerSleepStatistic; /** * SleepStatisticTableModel * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe * Sp. z o.o. */ public class NewStagerSleepStatisticTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; public static final int STAGE_COLUMN = 0; public static final int EPOCHS_COLUMN = 1; public static final int MINUTES_COLUMN = 2; public static final int TST_COLUMN = 3; public static final int SPT_COLUMN = 4; private static final String SWS = "SWS"; private NewStagerSleepStatistic statistic; private class Row { public final String name; public final String stage; public final Integer epochs; public final Double minutes; public final Double tst; public final Double spt; public Row(String name, String stage, int segmentCount, double segmentLength, double tst, double spt) { this.name = name; this.stage = stage; this.epochs = segmentCount; this.minutes = (((double) (segmentCount * segmentLength)) / 60.0); this.tst = tst > 0 ? (((double) (segmentCount * segmentLength) * 100) / tst) : 0.0; this.spt = spt > 0 ? (((double) (segmentCount * segmentLength) * 100) / spt) : 0.0; } } private Row data[]; public NewStagerSleepStatisticTableModel() { super(); } public NewStagerSleepStatistic getStatistic() { return statistic; } public void setStatistic(NewStagerSleepStatistic statistic) { if (this.statistic != statistic) { this.statistic = statistic; LinkedList<Row> list = new LinkedList<Row>(); ExportedTagStyle style; double segmentLength = statistic.getSegmentLength(); double tst = statistic.getTotalSleepTime(); double spt = statistic.getSleepPeriodTime(); for (int i = 0; i < statistic.getStyleCount(); i++) { style = statistic.getStyleAt(i); list.add(new Row(style.getName(), style.getDescriptionOrName(), statistic.getStyleSegmentsAt(i), segmentLength, tst, spt)); } list.add(new Row(SWS, _("SWS"), statistic.getSlowSegments(), segmentLength, tst, spt)); data = list.toArray(new Row[0]); Arrays.sort(data, new Comparator<Row>() { private int weight(Row r) { String name = r.name; if (SleepTagName.RK_1.equals(name) || SleepTagName.AASM_N1.equals(name)) { return 0; } else if (SleepTagName.RK_2.equals(name) || SleepTagName.AASM_N2.equals(name)) { return 1; } else if (SleepTagName.RK_3.equals(name) || SleepTagName.AASM_N3.equals(name)) { return 2; } else if (SleepTagName.RK_4.equals(name)) { return 3; } else if (name.equals(SWS)) { return 4; } else if (SleepTagName.RK_REM.equals(name) || SleepTagName.AASM_REM.equals(name)) { return 5; } else if (SleepTagName.RK_WAKE.equals(name) || SleepTagName.AASM_WAKE.equals(name)) { return 6; } else if (SleepTagName.RK_MT.equals(name)) { return 7; } else { return 8; } } @Override public int compare(Row r1, Row r2) { return new Integer(this.weight(r1)).compareTo(this.weight(r2)); } }); fireTableStructureChanged(); } } @Override public int getColumnCount() { return 5; } @Override public Class<?> getColumnClass(int columnIndex) { switch (columnIndex) { case STAGE_COLUMN: return String.class; case EPOCHS_COLUMN: return Integer.class; case MINUTES_COLUMN: case TST_COLUMN: case SPT_COLUMN: return Double.class; default: return null; } } @Override public String getColumnName(int column) { switch (column) { case STAGE_COLUMN: return _("Stage"); case EPOCHS_COLUMN: return _("Epochs"); case MINUTES_COLUMN: return _("Minutes"); case TST_COLUMN: return _("%TST"); case SPT_COLUMN: return _("%SPT"); default: return ""; } } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public int getRowCount() { if (statistic == null) { return 0; } return data.length; } @Override public Object getValueAt(int rowIndex, int columnIndex) { switch (columnIndex) { case STAGE_COLUMN: return data[rowIndex].stage; case EPOCHS_COLUMN: return data[rowIndex].epochs; case MINUTES_COLUMN: return data[rowIndex].minutes; case TST_COLUMN: return data[rowIndex].tst; case SPT_COLUMN: return data[rowIndex].spt; default: return ""; } } }