1 package fr.ifremer.dali.ui.swing.util.table;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import fr.ifremer.dali.dto.ErrorAware;
27 import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
28 import fr.ifremer.quadrige3.ui.swing.table.ColumnIdentifier;
29 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
30 import org.apache.commons.collections4.CollectionUtils;
31 import org.jdesktop.swingx.decorator.BorderHighlighter;
32 import org.jdesktop.swingx.decorator.ComponentAdapter;
33 import org.jdesktop.swingx.decorator.HighlightPredicate;
34 import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel;
35
36 import javax.swing.BorderFactory;
37 import javax.swing.JComponent;
38 import javax.swing.border.Border;
39 import java.awt.Component;
40 import java.util.List;
41
42
43
44
45
46
47 public abstract class ErrorHighlighter extends BorderHighlighter {
48
49 private final SwingTable table;
50 private final String title;
51 private List<String> message;
52 private static final Border innerBorder = BorderFactory.createEmptyBorder(0, 3, 0, 3);
53
54
55
56
57
58
59
60
61
62 public abstract List<String> getMessages(ErrorAware bean, String propertyName, Integer pmfmId);
63
64
65
66
67
68
69
70
71 public ErrorHighlighter(SwingTable table, Border border, String title) {
72 super();
73
74 this.table = table;
75 this.title = title;
76 setHighlightPredicate(newPredicate());
77 setBorder(BorderFactory.createCompoundBorder(border, innerBorder));
78 setCompound(false);
79
80 }
81
82 private HighlightPredicate newPredicate() {
83 return (renderer, adapter) -> {
84 AbstractApplicationTableModel model = (AbstractApplicationTableModel) table.getModel();
85 int modelRow = adapter.convertRowIndexToModel(adapter.row);
86 AbstractDaliRowUIModel row = (AbstractDaliRowUIModel) model.getEntry(modelRow);
87 if (row instanceof ErrorAware) {
88
89
90 ColumnIdentifier identifier = (ColumnIdentifier) adapter.getColumnIdentifierAt(adapter.convertColumnIndexToModel(adapter.column));
91 if (identifier == null)
92 return false;
93 String propertyName = identifier.getPropertyName();
94 Integer pmfmId = (identifier instanceof DaliPmfmColumnIdentifier) ? ((DaliPmfmColumnIdentifier) identifier).getPmfmId() : null;
95 message = getMessages((ErrorAware) row, propertyName, pmfmId);
96 return CollectionUtils.isNotEmpty(message);
97 } else {
98 return false;
99 }
100 };
101 }
102
103
104
105
106 @Override
107 protected Component doHighlight(Component renderer, ComponentAdapter adapter) {
108 Component component = super.doHighlight(renderer, adapter);
109
110
111 ((JComponent) component).setToolTipText(ApplicationUIUtil.getHtmlString(title, message));
112
113 return component;
114 }
115
116 }