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 AbstractTableModel {
012
013    private transient List<C> corrections;
014    private boolean[] apply;
015    private int applyColumn;
016
017    public CorrectionTableModel(List<C> corrections) {
018        this.corrections = corrections;
019        apply = new boolean[this.corrections.size()];
020        Arrays.fill(apply, true);
021        applyColumn = getColumnCount() - 1;
022    }
023
024    @Override
025    public abstract int getColumnCount();
026
027    protected abstract boolean isBoldCell(int row, int column);
028
029    public abstract String getCorrectionColumnName(int colIndex);
030
031    public abstract 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}