/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.dataprocess.gui.util;
import java.awt.Color;
import java.awt.Component;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.ListCellRenderer;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
/**
* Renderer de liste/table base sur une Map de traduction.
*/
public class GenericRenderer implements ListCellRenderer, TableCellRenderer, Comparator {
private DefaultListCellRenderer listCellRenderer = new DefaultListCellRenderer();
private DefaultTableCellRenderer tableCellRenderer = new DefaultTableCellRenderer();
private Map traductTable = new HashMap();
public GenericRenderer(Map traductTable) {
if (traductTable == null) {
throw new IllegalArgumentException("La table de traduction n'est pas initialis�e !");
}
this.traductTable = traductTable;
}
public Component getListCellRendererComponent(JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
Object translated = translateValue(value);
listCellRenderer.getListCellRendererComponent(list, translated, index, isSelected, cellHasFocus);
manageNoTranslation(listCellRenderer, value, translated, isSelected);
listCellRenderer.setEnabled(list.isEnabled());
return listCellRenderer;
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
Object translated = translateValue(value);
tableCellRenderer.getTableCellRendererComponent(table, translated, isSelected, hasFocus, row, column);
manageNoTranslation(tableCellRenderer, value, translated, isSelected);
tableCellRenderer.setEnabled(table.isEnabled());
return tableCellRenderer;
}
public int compare(Object o1, Object o2) {
Comparable t1 = (Comparable)translateValue(o1);
return t1.compareTo(translateValue(o2));
}
private static void manageNoTranslation(JLabel field, Object value,
Object translated, boolean isSelected) {
if (translated == value) {
field.setForeground(Color.red);
}
else if (isSelected) {
field.setForeground(UIManager.getColor("Table.selectionForeground"));
}
else {
field.setForeground(UIManager.getColor("Table.foreground"));
}
}
private Object translateValue(Object value) {
if (isNullValue(value)) {
return "";
}
if (traductTable.containsKey(value)) {
return (String)traductTable.get(value);
}
return value;
}
private static boolean isNullValue(Object value) {
return (value == null || "null".equals(value));
}
}