1 package fr.ifremer.tutti.ui.swing.content.cruise;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import com.google.common.base.Preconditions;
26 import com.google.common.collect.Lists;
27 import fr.ifremer.tutti.persistence.entities.CaracteristicMap;
28 import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
29 import fr.ifremer.tutti.persistence.entities.referential.Gear;
30 import fr.ifremer.tutti.service.DecoratorService;
31 import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor;
32 import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicValueEditor;
33 import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicValueRenderer;
34 import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler;
35 import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox;
36 import jaxx.runtime.validator.swing.SwingValidator;
37 import org.apache.commons.logging.Log;
38 import org.apache.commons.logging.LogFactory;
39 import org.jdesktop.swingx.JXTable;
40 import org.jdesktop.swingx.table.DefaultTableColumnModelExt;
41
42 import javax.swing.JComponent;
43 import java.util.List;
44 import java.util.stream.Collectors;
45
46
47
48
49
50 public class GearCaracteristicsEditorUIHandler
51 extends AbstractTuttiTableUIHandler<GearCaracteristicsEditorRowModel, GearCaracteristicsEditorUIModel, GearCaracteristicsEditorUI> {
52
53 private final static Log log =
54 LogFactory.getLog(GearCaracteristicsEditorUIHandler.class);
55
56 public GearCaracteristicsEditorUIHandler() {
57 super(GearCaracteristicsEditorRowModel.PROPERTY_VALUE);
58 }
59
60 @Override
61 public GearCaracteristicsEditorTableModel getTableModel() {
62 return (GearCaracteristicsEditorTableModel) getTable().getModel();
63 }
64
65 @Override
66 public JXTable getTable() {
67 return ui.getGearCaracteristicsEditorTable();
68 }
69
70 @Override
71 protected boolean isRowValid(GearCaracteristicsEditorRowModel row) {
72 return row.getKey() != null && row.getValue() != null;
73 }
74
75 @Override
76 protected void onRowModified(int rowIndex, GearCaracteristicsEditorRowModel row,
77 String propertyName, Object oldValue, Object newValue) {
78 recomputeRowValidState(row);
79 super.onRowModified(rowIndex, row, propertyName, oldValue, newValue);
80 saveSelectedRowIfNeeded();
81 }
82
83 @Override
84 protected void onAfterSelectedRowChanged(int oldRowIndex, GearCaracteristicsEditorRowModel oldRow, int newRowIndex, GearCaracteristicsEditorRowModel newRow) {
85 super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow);
86 if (newRow != null) {
87 recomputeRowValidState(newRow);
88 }
89
90 }
91
92 @Override
93 protected void beforeOpenPopup(int rowIndex, int columnIndex) {
94 super.beforeOpenPopup(rowIndex, columnIndex);
95
96 getModel().setRemoveCaracteristicEnabled(rowIndex != -1);
97 }
98
99 @Override
100 protected void saveSelectedRowIfRequired(TuttiBeanMonitor<GearCaracteristicsEditorRowModel> rowMonitor,
101 GearCaracteristicsEditorRowModel row) {
102 if (row.isValid()) {
103
104
105 if (rowMonitor.wasModified()) {
106
107
108 if (log.isDebugEnabled()) {
109 log.debug("Row " + row + " was modified, will save it");
110 }
111
112 saveRow(row);
113
114 }
115 }
116 }
117
118 @Override
119 public void beforeInit(GearCaracteristicsEditorUI ui) {
120 super.beforeInit(ui);
121 GearCaracteristicsEditorUIModel model =
122 new GearCaracteristicsEditorUIModel();
123 ui.setContextValue(model);
124
125 model.addPropertyChangeListener(GearCaracteristicsEditorUIModel.PROPERTY_GEAR, evt -> editGear((Gear) evt.getNewValue()));
126
127 }
128
129 @Override
130 public void afterInit(GearCaracteristicsEditorUI ui) {
131 initUI(ui);
132
133 initBeanFilterableComboBox(getKeyCombo(), Lists.<Caracteristic>newArrayList(), null);
134 getModel().setAvailableCaracteristics(getDataContext().getCaracteristics());
135
136 JXTable table = getTable();
137
138
139 DefaultTableColumnModelExt columnModel =
140 new DefaultTableColumnModelExt();
141
142 {
143
144 addColumnToModel(columnModel,
145 null,
146 newTableCellRender(Caracteristic.class, DecoratorService.CARACTERISTIC_WITH_UNIT),
147 GearCaracteristicsEditorTableModel.KEY);
148 }
149
150 {
151
152 addColumnToModel(columnModel,
153 new CaracteristicValueEditor(getContext()),
154 new CaracteristicValueRenderer(getContext()),
155 GearCaracteristicsEditorTableModel.VALUE);
156 }
157
158
159 GearCaracteristicsEditorTableModel tableModel =
160 new GearCaracteristicsEditorTableModel(columnModel);
161
162 table.setModel(tableModel);
163 table.setColumnModel(columnModel);
164
165 initTable(table);
166 }
167
168 @Override
169 protected JComponent getComponentToFocus() {
170 return getUI().getNewRowKey();
171 }
172
173 @Override
174 public void onCloseUI() {
175 if (log.isDebugEnabled()) {
176 log.debug("closing: " + ui);
177 }
178
179 EditCruiseUI ui = getUI().getParentContainer(EditCruiseUI.class);
180 ui.getMainPanelLayout().setSelected(EditCruiseUIHandler.CRUISE_CARD);
181
182
183 getModel().setValid(false);
184 getModel().setGear(null);
185 }
186
187 @Override
188 public SwingValidator<GearCaracteristicsEditorUIModel> getValidator() {
189 return null;
190 }
191
192
193
194
195
196
197
198
199
200
201
202
203 protected BeanFilterableComboBox<Caracteristic> getKeyCombo() {
204 return ui.getNewRowKey();
205 }
206
207 protected void saveRow(GearCaracteristicsEditorRowModel row) {
208
209 if (row.isValid()) {
210 CaracteristicMap caracteristics = getModel().getCaracteristicMap();
211 Preconditions.checkNotNull(caracteristics);
212
213 caracteristics.put(row.getKey(), row.getValue());
214 }
215 }
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283 protected void editGear(Gear gear) {
284
285 if (gear != null) {
286 GearCaracteristicsEditorTableModel tableModel = getTableModel();
287 GearCaracteristicsEditorUIModel model = getModel();
288
289 CaracteristicMap caracteristicMap = gear.getCaracteristics();
290 if (caracteristicMap == null) {
291 caracteristicMap = new CaracteristicMap();
292 }
293
294 model.getCaracteristicMap().clear();
295 model.getCaracteristicMap().putAll(caracteristicMap);
296
297 List<GearCaracteristicsEditorRowModel> rows = Lists.newArrayList();
298 List<Caracteristic> caracteristics = Lists.newArrayList(caracteristicMap.keySet());
299
300 List<Caracteristic> availableCaracteristics = model.getAvailableCaracteristics();
301
302 for (Caracteristic key : caracteristics) {
303 GearCaracteristicsEditorRowModel newRow = tableModel.createNewRow();
304 newRow.setKey(key);
305 newRow.setValue(caracteristicMap.get(key));
306 rows.add(newRow);
307 }
308
309 model.setRows(rows);
310
311 List<Caracteristic> caracteristicList = Lists.newArrayList();
312
313 caracteristicList.addAll(availableCaracteristics
314 .stream()
315 .filter(caracteristic -> !caracteristics.contains(caracteristic))
316 .collect(Collectors.toList()));
317
318 BeanFilterableComboBox<Caracteristic> keyCombo = getKeyCombo();
319 keyCombo.setData(caracteristicList);
320
321 keyCombo.getHandler().reset();
322 model.setModify(false);
323
324 } else {
325 cleanrRowMonitor();
326 getModel().setRows(Lists.<GearCaracteristicsEditorRowModel>newArrayList());
327 getTable().clearSelection();
328 }
329 }
330 }