1 package fr.ifremer.quadrige3.ui.swing.table.renderer;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import fr.ifremer.quadrige3.ui.swing.table.AbstractRowUIModel;
25 import fr.ifremer.quadrige3.ui.swing.table.AbstractTableModel;
26
27 import javax.swing.JTable;
28 import javax.swing.table.TableCellRenderer;
29 import java.awt.Component;
30 import java.util.Map;
31 import java.util.function.Predicate;
32
33
34
35
36 public class PredicatedCellRenderer<R extends AbstractRowUIModel<?, ?>> implements TableCellRenderer {
37
38 private final Map<Predicate<R>, TableCellRenderer> renderers;
39
40 public PredicatedCellRenderer(Map<Predicate<R>, TableCellRenderer> renderers) {
41 this.renderers = renderers;
42 }
43
44 @Override
45 @SuppressWarnings("unchecked")
46 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
47
48 R rowModel = ((AbstractTableModel<R>) table.getModel()).getEntry(table.convertRowIndexToModel(row));
49
50
51 for (Predicate<R> predicate : renderers.keySet()) {
52 if (predicate.test(rowModel)) {
53 return renderers.get(predicate).getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
54 }
55 }
56
57
58 return table.getDefaultRenderer(value == null ? String.class : value.getClass()).getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
59 }
60 }