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 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    public abstract String getCorrectionColumnName(int colIndex);
029    public abstract Object getCorrectionValueAt(int rowIndex, int colIndex);
030
031    public List<C> getCorrections() {
032        return corrections;
033    }
034
035    public int getApplyColumn() {
036        return applyColumn;
037    }
038
039    public boolean getApply(int i) {
040        return apply[i];
041    }
042
043    @Override
044    public int getRowCount() {
045        return corrections.size();
046    }
047
048    @Override
049    public Class<?> getColumnClass(int columnIndex) {
050        if (columnIndex == applyColumn)
051            return Boolean.class;
052        return String.class;
053    }
054
055    @Override
056    public String getColumnName(int columnIndex) {
057        if (columnIndex == applyColumn)
058            return tr("Apply?");
059
060        return getCorrectionColumnName(columnIndex);
061    }
062
063    @Override
064    public boolean isCellEditable(int rowIndex, int columnIndex) {
065        return columnIndex == applyColumn;
066    }
067
068    @Override
069    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
070        if (columnIndex == applyColumn && aValue instanceof Boolean)
071            apply[rowIndex] = (Boolean)aValue;
072    }
073
074    @Override
075    public Object getValueAt(int rowIndex, int colIndex) {
076        if (colIndex == applyColumn)
077            return apply[rowIndex];
078
079        return getCorrectionValueAt(rowIndex, colIndex);
080    }
081}