/* MontageFilterExclusionTableModel.java created 2008-02-03 * */ package org.signalml.app.model.montage; import static org.signalml.app.util.i18n.SvarogI18n._; import javax.swing.table.AbstractTableModel; import org.apache.log4j.Logger; import org.signalml.domain.montage.Montage; import org.signalml.domain.montage.MontageEvent; import org.signalml.domain.montage.MontageListener; import org.signalml.domain.montage.MontageSampleFilterEvent; import org.signalml.domain.montage.MontageSampleFilterListener; /** MontageFilterExclusionTableModel * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class MontageFilterEnableTableModel extends AbstractTableModel implements MontageListener, MontageSampleFilterListener { private static final long serialVersionUID = 1L; protected static final Logger logger = Logger.getLogger(MontageFilterEnableTableModel.class); private Montage montage; private ColumnTableModel columnTableModel; private RowTableModel rowTableModel; public MontageFilterEnableTableModel() { } 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 Montage getMontage() { return montage; } public void setMontage(Montage montage) { if (this.montage != montage) { if (this.montage != null) { this.montage.removeMontageListener(this); this.montage.removeMontageSampleFilterListener(this); } this.montage = montage; if (montage != null) { montage.addMontageListener(this); montage.addMontageSampleFilterListener(this); } reset(); } } @Override public void montageChannelsAdded(MontageEvent ev) { fireTableDataChanged(); if (rowTableModel != null) { rowTableModel.fireTableDataChanged(); } } @Override public void montageChannelsChanged(MontageEvent ev) { if (rowTableModel != null) { rowTableModel.fireTableDataChanged(); } } @Override public void montageChannelsRemoved(MontageEvent ev) { fireTableDataChanged(); if (rowTableModel != null) { rowTableModel.fireTableDataChanged(); } } @Override public void montageReferenceChanged(MontageEvent ev) { // ignored } @Override public void montageStructureChanged(MontageEvent ev) { fireTableDataChanged(); if (rowTableModel != null) { rowTableModel.fireTableDataChanged(); } } @Override public void filterAdded(MontageSampleFilterEvent ev) { fireTableStructureChanged(); if (columnTableModel != null) { columnTableModel.fireTableStructureChanged(); } } @Override public void filterChanged(MontageSampleFilterEvent ev) { if (columnTableModel != null) { columnTableModel.fireTableDataChanged(); } } @Override public void filterExclusionChanged(MontageSampleFilterEvent ev) { fireTableDataChanged(); } @Override public void filterRemoved(MontageSampleFilterEvent ev) { fireTableStructureChanged(); if (columnTableModel != null) { columnTableModel.fireTableStructureChanged(); } } @Override public void filtersChanged(MontageSampleFilterEvent ev) { fireTableStructureChanged(); if (columnTableModel != null) { columnTableModel.fireTableStructureChanged(); } } @Override public Class<?> getColumnClass(int columnIndex) { return Boolean.class; } @Override public int getColumnCount() { if (montage == null) { return 0; } return montage.getSampleFilterCount()+1; } @Override public int getRowCount() { if (montage == null) { return 0; } return montage.getMontageChannelCount()+1; } @Override public Object getValueAt(int rowIndex, int columnIndex) { if (columnIndex == 0) { if (rowIndex == 0) { return null; } return !montage.isExcludeAllFilters(rowIndex-1); } else if (rowIndex == 0) { return montage.isFilterEnabled(columnIndex-1); } else { return !montage.isFilteringExcluded(columnIndex-1, rowIndex-1); } } @Override public void setValueAt(Object value, int rowIndex, int columnIndex) { if (columnIndex == 0) { if (rowIndex == 0) { return; } montage.setExcludeAllFilters(rowIndex-1, !((Boolean) value)); } else if (rowIndex == 0) { montage.setFilterEnabled(columnIndex-1, (Boolean) value); } else { montage.setFilterChannelExcluded(columnIndex-1, rowIndex-1, !((Boolean) value)); } } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { if (rowIndex == 0) { if (columnIndex == 0) { return false; } return true; } if (columnIndex == 0) { return true; } else { return (!montage.isExcludeAllFilters(rowIndex-1) && montage.isFilterEnabled(columnIndex-1)); } } public class ColumnTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; @Override public int getColumnCount() { if (montage == null) { return 0; } return montage.getSampleFilterCount()+1; } @Override public int getRowCount() { if (montage == null) { return 0; } return 1; } @Override public Object getValueAt(int rowIndex, int columnIndex) { if (columnIndex == 0) { return _("All filters"); } else { return columnIndex + ". " + montage.getSampleFilterAt(columnIndex-1).getDescription(); } } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } } public class RowTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; @Override public int getColumnCount() { if (montage == null) { return 0; } return 1; } @Override public int getRowCount() { if (montage == null) { return 0; } return montage.getMontageChannelCount()+1; } @Override public Object getValueAt(int rowIndex, int columnIndex) { if (rowIndex == 0) { return _("All channels"); } else { return montage.getMontageChannelLabelAt(rowIndex-1); } } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } } }