/* MontageFiltersTableModel.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.MontageSampleFilterEvent;
import org.signalml.domain.montage.MontageSampleFilterListener;
import org.springframework.context.MessageSourceResolvable;
/** MontageFiltersTableModel
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class MontageFiltersTableModel extends AbstractTableModel implements MontageSampleFilterListener {
private static final long serialVersionUID = 1L;
protected static final Logger logger = Logger.getLogger(MontageFiltersTableModel.class);
public static final int INDEX_COLUMN = 0;
public static final int DESCRIPTION_COLUMN = 1;
public static final int EFFECT_COLUMN = 2;
private Montage montage;
public MontageFiltersTableModel() {
}
public Montage getMontage() {
return montage;
}
public void setMontage(Montage montage) {
if (this.montage != montage) {
if (this.montage != null) {
this.montage.removeMontageSampleFilterListener(this);
}
this.montage = montage;
if (montage != null) {
montage.addMontageSampleFilterListener(this);
}
fireTableDataChanged();
}
}
@Override
public int getColumnCount() {
return 3;
}
@Override
public int getRowCount() {
if (montage == null) {
return 0;
}
return montage.getSampleFilterCount();
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
@Override
public String getColumnName(int column) {
switch (column) {
case INDEX_COLUMN :
return _("Index");
case DESCRIPTION_COLUMN :
return _("Description");
case EFFECT_COLUMN :
return _("Effect");
default :
throw new IndexOutOfBoundsException();
}
}
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case INDEX_COLUMN :
return Integer.class;
case DESCRIPTION_COLUMN :
return String.class;
case EFFECT_COLUMN :
return String.class;
default :
throw new IndexOutOfBoundsException();
}
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case INDEX_COLUMN :
return (rowIndex+1);
case DESCRIPTION_COLUMN :
return montage.getSampleFilterAt(rowIndex).getDescription();
case EFFECT_COLUMN :
return montage.getSampleFilterAt(rowIndex).getEffect();
default :
throw new IndexOutOfBoundsException();
}
}
@Override
public void filterAdded(MontageSampleFilterEvent ev) {
int[] indices = ev.getIndices();
if (indices.length == 0) {
return;
}
for (int i=0; i<(indices.length-1); i++) {
if (indices[i] != (indices[i+1]-1)) {
// if non-contiguous fire a total update
fireTableDataChanged();
return;
}
}
// if contiguous fire an insert
fireTableRowsInserted(indices[0], indices[indices.length-1]);
}
@Override
public void filterChanged(MontageSampleFilterEvent ev) {
int[] indices = ev.getIndices();
if (indices.length == 0) {
return;
}
for (int i=0; i<(indices.length-1); i++) {
if (indices[i] != (indices[i+1]-1)) {
// if non-contiguous fire a total update
fireTableDataChanged();
return;
}
}
// if contiguous fire an insert
fireTableRowsUpdated(indices[0], indices[indices.length-1]);
}
@Override
public void filterExclusionChanged(MontageSampleFilterEvent ev) {
// ignored
}
@Override
public void filterRemoved(MontageSampleFilterEvent ev) {
int[] indices = ev.getIndices();
if (indices.length == 0) {
return;
}
for (int i=0; i<(indices.length-1); i++) {
if (indices[i] != (indices[i+1]-1)) {
// if non-contiguous fire a total update
fireTableDataChanged();
return;
}
}
// if contiguous fire a delete
fireTableRowsDeleted(indices[0], indices[indices.length-1]);
}
@Override
public void filtersChanged(MontageSampleFilterEvent ev) {
fireTableDataChanged();
}
}