001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.corrector;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.util.Arrays;
007import java.util.List;
008
009import javax.swing.table.AbstractTableModel;
010
011public abstract class CorrectionTableModel<C extends Correction> extends
012        AbstractTableModel {
013
014    private List<C> corrections;
015    private boolean[] apply;
016    private int applyColumn;
017
018    public CorrectionTableModel(List<C> corrections) {
019        super();
020        this.corrections = corrections;
021        apply = new boolean[this.corrections.size()];
022        Arrays.fill(apply, true);
023        applyColumn = getColumnCount() - 1;
024    }
025
026    @Override
027    abstract public int getColumnCount();
028
029    abstract protected boolean isBoldCell(int row, int column);
030    abstract public String getCorrectionColumnName(int colIndex);
031    abstract public Object getCorrectionValueAt(int rowIndex, int colIndex);
032
033    public List<C> getCorrections() {
034        return corrections;
035    }
036
037    public int getApplyColumn() {
038        return applyColumn;
039    }
040
041    public boolean getApply(int i) {
042        return apply[i];
043    }
044
045    @Override
046    public int getRowCount() {
047        return corrections.size();
048    }
049
050    @Override
051    public Class<?> getColumnClass(int columnIndex) {
052        if (columnIndex == applyColumn)
053            return Boolean.class;
054        return String.class;
055    }
056
057    @Override
058    public String getColumnName(int columnIndex) {
059        if (columnIndex == applyColumn)
060            return tr("Apply?");
061
062        return getCorrectionColumnName(columnIndex);
063    }
064
065    @Override
066    public boolean isCellEditable(int rowIndex, int columnIndex) {
067        return columnIndex == applyColumn;
068    }
069
070    @Override
071    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
072        if (columnIndex == applyColumn && aValue instanceof Boolean)
073            apply[rowIndex] = (Boolean)aValue;
074    }
075
076    @Override
077    public Object getValueAt(int rowIndex, int colIndex) {
078        if (colIndex == applyColumn)
079            return apply[rowIndex];
080
081        return getCorrectionValueAt(rowIndex, colIndex);
082    }
083}