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}