001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.corrector; 003 004 import static org.openstreetmap.josm.tools.I18n.tr; 005 006 import java.util.Arrays; 007 import java.util.List; 008 009 import javax.swing.table.AbstractTableModel; 010 011 public 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 abstract public int getColumnCount(); 027 028 abstract protected boolean isBoldCell(int row, int column); 029 abstract public String getCorrectionColumnName(int colIndex); 030 abstract public Object getCorrectionValueAt(int rowIndex, int colIndex); 031 032 public List<C> getCorrections() { 033 return corrections; 034 } 035 036 public int getApplyColumn() { 037 return applyColumn; 038 } 039 040 public boolean getApply(int i) { 041 return apply[i]; 042 } 043 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 public Object getValueAt(int rowIndex, int colIndex) { 075 if (colIndex == applyColumn) 076 return apply[rowIndex]; 077 078 return getCorrectionValueAt(rowIndex, colIndex); 079 } 080 }