// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.correction; import static org.openstreetmap.josm.tools.I18n.tr; import java.util.Arrays; import java.util.List; import javax.swing.table.AbstractTableModel; import org.openstreetmap.josm.data.correction.Correction; /** * Abstract correction table model. * @param <C> type of correction */ public abstract class CorrectionTableModel<C extends Correction> extends AbstractTableModel { private final transient List<C> corrections; private boolean[] apply; private final int applyColumn; /** * Constructs a new {@code CorrectionTableModel}. * @param corrections list of corrections */ public CorrectionTableModel(List<C> corrections) { this.corrections = corrections; apply = new boolean[this.corrections.size()]; Arrays.fill(apply, true); applyColumn = getColumnCount() - 1; } protected abstract boolean isBoldCell(int row, int column); /** * Returns the column name for columns other than "Apply". * @param colIndex column index * @return the translated column name for given index * @see #getApplyColumn */ public abstract String getCorrectionColumnName(int colIndex); /** * Returns the correction value at given position. * @param rowIndex row index * @param colIndex column index * @return the correction value at given position */ public abstract Object getCorrectionValueAt(int rowIndex, int colIndex); /** * Returns the list of corrections. * @return the list of corrections */ public List<C> getCorrections() { return corrections; } /** * Returns the index of the "Apply" column. * @return the index of the "Apply" column */ public int getApplyColumn() { return applyColumn; } /** * Returns the "Apply" flag for given index. * @param i index * @return the "Apply" flag for given index */ public boolean getApply(int i) { return apply[i]; } @Override public int getRowCount() { return corrections.size(); } @Override public Class<?> getColumnClass(int columnIndex) { if (columnIndex == applyColumn) return Boolean.class; return String.class; } @Override public String getColumnName(int columnIndex) { if (columnIndex == applyColumn) return tr("Apply?"); return getCorrectionColumnName(columnIndex); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return columnIndex == applyColumn; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { if (columnIndex == applyColumn && aValue instanceof Boolean) apply[rowIndex] = (Boolean) aValue; } @Override public Object getValueAt(int rowIndex, int colIndex) { if (colIndex == applyColumn) return apply[rowIndex]; return getCorrectionValueAt(rowIndex, colIndex); } }