1 package fr.ifremer.dali.ui.swing.content.manage.rule.pmfm;
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.decorator.DecoratorService;
27 import fr.ifremer.dali.dto.DaliBeans;
28 import fr.ifremer.dali.dto.configuration.control.ControlRuleDTO;
29 import fr.ifremer.dali.dto.configuration.control.RulePmfmDTO;
30 import fr.ifremer.dali.dto.enums.ControlFunctionValues;
31 import fr.ifremer.dali.dto.enums.FilterTypeValues;
32 import fr.ifremer.dali.dto.referential.pmfm.PmfmDTO;
33 import fr.ifremer.dali.ui.swing.content.manage.filter.select.SelectFilterUI;
34 import fr.ifremer.dali.ui.swing.util.AbstractDaliBeanUIModel;
35 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableModel;
36 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIHandler;
37 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
38 import org.jdesktop.swingx.table.TableColumnExt;
39
40 import java.awt.Dimension;
41 import java.util.List;
42 import java.util.stream.Collectors;
43
44 import static org.nuiton.i18n.I18n.t;
45
46
47
48
49 public class ControlPmfmTableUIHandler extends
50 AbstractDaliTableUIHandler<ControlPmfmRowModel, ControlPmfmTableUIModel, ControlPmfmTableUI> {
51
52
53
54
55 @Override
56 public void beforeInit(final ControlPmfmTableUI ui) {
57 super.beforeInit(ui);
58
59
60 final ControlPmfmTableUIModel model = new ControlPmfmTableUIModel();
61 ui.setContextValue(model);
62 }
63
64
65
66
67 @Override
68 public void afterInit(final ControlPmfmTableUI ui) {
69
70
71 initUI(ui);
72
73
74 initTable();
75 }
76
77
78
79
80 private void initTable() {
81
82
83 final SwingTable table = getTable();
84
85
86 TableColumnExt idCol = addColumn(ControlPmfmTableModel.PMFM_ID);
87 idCol.setSortable(true);
88 idCol.setEditable(false);
89
90
91 TableColumnExt nameCol = addColumn(ControlPmfmTableModel.NAME);
92 nameCol.setSortable(true);
93 nameCol.setEditable(false);
94
95
96 final TableColumnExt parameterCol = addColumn(
97 null,
98 newTableCellRender(
99 ControlPmfmTableModel.PARAMETER.getPropertyType(),
100 ControlPmfmTableModel.PARAMETER.getDecoratorName(),
101 DecoratorService.NAME
102 ),
103 ControlPmfmTableModel.PARAMETER);
104 parameterCol.setSortable(true);
105 parameterCol.setEditable(false);
106
107
108 final TableColumnExt matrixCol = addColumn(ControlPmfmTableModel.MATRIX);
109 matrixCol.setSortable(true);
110 matrixCol.setEditable(false);
111
112
113 final TableColumnExt fractionCol = addColumn(ControlPmfmTableModel.FRACTION);
114 fractionCol.setSortable(true);
115 fractionCol.setEditable(false);
116
117
118 final TableColumnExt methodCol = addColumn(ControlPmfmTableModel.METHOD);
119 methodCol.setSortable(true);
120 methodCol.setEditable(false);
121
122
123 final TableColumnExt unitCol = addColumn(ControlPmfmTableModel.UNIT);
124 unitCol.setSortable(true);
125 unitCol.setEditable(false);
126
127
128 ControlPmfmTableModel tableModel = new ControlPmfmTableModel(getTable().getColumnModel());
129 table.setModel(tableModel);
130
131
132 initTable(table);
133 idCol.setVisible(false);
134
135
136 table.setVisibleRowCount(3);
137 }
138
139
140
141
142
143
144 public void loadPmfms(ControlRuleDTO controlRule, boolean editable) {
145
146 if (controlRule == null) {
147
148
149 getModel().setBeans(null);
150
151
152 getModel().setPmfmsMandatory(false);
153
154 editable = false;
155
156 } else {
157
158
159 getModel().setPmfmsMandatory(DaliBeans.isPmfmMandatory(controlRule));
160
161
162 if (ControlFunctionValues.PRECONDITION.equals(controlRule.getFunction())) {
163 getTable().resetSortOrder();
164 getTable().setSortable(false);
165 } else {
166 getTable().setSortable(true);
167 }
168
169
170 getModel().setBeans(controlRule.getRulePmfms());
171
172 }
173
174 getTable().setEditable(editable);
175 recomputeRowsValidState(!getModel().isPmfmsMandatory());
176 }
177
178
179
180
181 @Override
182 protected void onRowModified(int rowIndex, ControlPmfmRowModel row, String propertyName, Integer propertyIndex, Object oldValue, Object newValue) {
183 super.onRowModified(rowIndex, row, propertyName, propertyIndex, oldValue, newValue);
184
185 saveToParentModel();
186 }
187
188 private void saveToParentModel() {
189 getModel().getParentModel().getControlRuleUIModel().getSingleSelectedRow().setRulePmfms(getModel().getBeans());
190
191 getModel().firePropertyChanged(AbstractDaliBeanUIModel.PROPERTY_MODIFY, null, true);
192
193 }
194
195
196
197
198 public void clearTable() {
199
200
201 getModel().setBeans(null);
202 getModel().setPmfmsMandatory(false);
203 getModel().setValid(true);
204
205 }
206
207
208
209
210 @Override
211 public AbstractDaliTableModel<ControlPmfmRowModel> getTableModel() {
212 return (ControlPmfmTableModel) getTable().getModel();
213 }
214
215
216
217
218 @Override
219 public SwingTable getTable() {
220 return ui.getControlPmfmTable();
221 }
222
223
224
225
226 public void openAddPmfmDialog() {
227 SelectFilterUI dialog = new SelectFilterUI(getContext(), FilterTypeValues.PMFM.getFilterTypeId());
228 dialog.setTitle(t("dali.filter.pmfm.addDialog.title"));
229 List<PmfmDTO> pmfms = getModel().getBeans().stream().map(RulePmfmDTO::getPmfm)
230 .sorted(getDecorator(PmfmDTO.class, DecoratorService.NAME_WITH_ID).getCurrentComparator())
231
232 .peek(pmfm -> pmfm.setReadOnly(true))
233 .collect(Collectors.toList());
234 dialog.getModel().setSelectedElements(pmfms);
235
236 openDialog(dialog, new Dimension(1024, 720));
237
238 if (dialog.getModel().isValid()) {
239
240 List<PmfmDTO> newPmfms = dialog.getModel().getSelectedElements().stream()
241 .map(element -> ((PmfmDTO) element))
242 .filter(newPmfm -> getModel().getBeans().stream().noneMatch(rulePmfm -> rulePmfm.getPmfm().equals(newPmfm)))
243 .collect(Collectors.toList());
244
245 if (!newPmfms.isEmpty()) {
246
247 getModel().addBeans(newPmfms.stream().map(DaliBeans::pmfmToRulePmfm).collect(Collectors.toList()));
248 getModel().setModify(true);
249 saveToParentModel();
250 }
251 }
252 }
253
254
255
256
257 public void removePmfm() {
258 getModel().deleteSelectedRows();
259 saveToParentModel();
260 recomputeRowsValidState(false);
261 }
262 }