package elw.dp.ui;
import elw.dp.app.InstructionsTableModel;
import javax.swing.*;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
import java.util.HashMap;
import java.util.Map;
public class RendererFactory {
private final Map<JTable, Integer> accColCache = new HashMap<JTable, Integer>();
protected int lookupAccessColumn(JTable table) {
if (accColCache.get(table) != null) {
return accColCache.get(table);
}
int accColIndex = findColIndexByName(table, InstructionsTableModel.COL_ACC);
accColCache.put(table, accColIndex);
return accColIndex;
}
private int findColIndexByName(JTable table, String colName) {
final TableModel model = table.getModel();
int accColIndex = -1;
for (int i = 0; i < model.getColumnCount(); i++) {
if (colName.equals(model.getColumnName(i))) {
accColIndex = i;
}
}
return accColIndex;
}
public TableColumn findColByName(JTable table, String colName) {
final int colIndex = findColIndexByName(table, colName);
if (colIndex >= 0) {
return table.getColumnModel().getColumn(colIndex);
}
return null;
}
public void install(JTable jTable) {
final TableColumnModel cModel = jTable.getColumnModel();
for (int i = 0; i < cModel.getColumnCount(); i++) {
final TableColumn column = cModel.getColumn(i);
final TableCellRenderer colRenderer = column.getCellRenderer();
final TableCellRenderer origRenderer;
if (colRenderer == null) {
origRenderer = jTable.getDefaultRenderer(jTable.getColumnClass(i));
} else {
origRenderer = colRenderer;
}
final AccessTrackingCellRenderer wrapper = new AccessTrackingCellRenderer(origRenderer, this);
column.setCellRenderer(wrapper);
}
}
}