/* ReferenceTableModel.java created 2007-10-24
*
*/
package org.signalml.app.model.montage;
import java.awt.Window;
import javax.swing.table.AbstractTableModel;
import org.apache.log4j.Logger;
import org.signalml.app.view.common.dialogs.errors.Dialogs;
import org.signalml.domain.montage.Montage;
import org.signalml.domain.montage.MontageEvent;
import org.signalml.domain.montage.MontageListener;
import org.signalml.domain.montage.SourceMontageEvent;
import org.signalml.domain.montage.SourceMontageListener;
/** ReferenceTableModel
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class ReferenceTableModel extends AbstractTableModel implements MontageListener, SourceMontageListener {
private static final long serialVersionUID = 1L;
protected static final Logger logger = Logger.getLogger(ReferenceTableModel.class);
private Montage montage;
private ColumnTableModel columnTableModel;
private RowTableModel rowTableModel;
public ReferenceTableModel() {
}
public ReferenceTableModel(Montage montage) {
this.montage = montage;
if (montage != null) {
montage.addSourceMontageListener(this);
montage.addMontageListener(this);
}
}
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.removeSourceMontageListener(this);
this.montage.removeMontageListener(this);
}
this.montage = montage;
if (montage != null) {
montage.addSourceMontageListener(this);
montage.addMontageListener(this);
}
reset();
}
}
@Override
public void sourceMontageChannelAdded(SourceMontageEvent ev) {
reset();
}
@Override
public void sourceMontageChannelChanged(SourceMontageEvent ev) {
reset();
}
@Override
public void sourceMontageChannelRemoved(SourceMontageEvent ev) {
reset();
}
@Override
public void montageChannelsAdded(MontageEvent ev) {
fireTableDataChanged();
if (rowTableModel != null) {
rowTableModel.fireTableDataChanged();
}
}
@Override
public void montageChannelsChanged(MontageEvent ev) {
for (int index : ev.getChannels()) {
fireTableRowsUpdated(index, index);
if (rowTableModel != null) {
rowTableModel.fireTableRowsUpdated(index, index);
}
}
}
@Override
public void montageChannelsRemoved(MontageEvent ev) {
fireTableDataChanged();
if (rowTableModel != null) {
rowTableModel.fireTableDataChanged();
}
}
@Override
public void montageReferenceChanged(MontageEvent ev) {
for (int index : ev.getChannels()) {
fireTableRowsUpdated(index, index);
if (rowTableModel != null) {
rowTableModel.fireTableRowsUpdated(index, index);
}
}
}
@Override
public void montageStructureChanged(MontageEvent ev) {
fireTableDataChanged();
if (rowTableModel != null) {
rowTableModel.fireTableDataChanged();
}
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}
@Override
public int getColumnCount() {
if (montage == null) {
return 0;
}
return montage.getSourceChannelCount();
}
@Override
public int getRowCount() {
if (montage == null) {
return 0;
}
return montage.getMontageChannelCount();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return montage.getReference(rowIndex, columnIndex);
}
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
try {
montage.setReference(rowIndex, columnIndex, (String) value);
} catch (NumberFormatException ex) {
Dialogs.showExceptionDialog((Window) null, ex);
fireTableCellUpdated(rowIndex, columnIndex);
return;
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return (columnIndex != montage.getMontagePrimaryChannelAt(rowIndex));
}
@Override
public void sourceMontageEegSystemChanged(SourceMontageEvent ev) {
}
public class ColumnTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
@Override
public int getColumnCount() {
if (montage == null) {
return 0;
}
return montage.getSourceChannelCount();
}
@Override
public int getRowCount() {
if (montage == null) {
return 0;
}
return 1;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return montage.getSourceChannelLabelAt(columnIndex);
}
@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();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return montage.getMontageChannelLabelAt(rowIndex);
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}
}
}