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}