1 package fr.ifremer.dali.ui.swing.content.extraction.config.preset;
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.referential.pmfm.PmfmDTO;
27 import fr.ifremer.dali.dto.referential.pmfm.QualitativeValueDTO;
28 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIHandler;
29 import fr.ifremer.quadrige3.ui.swing.table.AbstractTableModel;
30 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
31 import jaxx.runtime.validator.swing.SwingValidator;
32 import org.apache.commons.logging.Log;
33 import org.apache.commons.logging.LogFactory;
34 import org.jdesktop.swingx.table.TableColumnExt;
35 import org.nuiton.jaxx.application.swing.util.Cancelable;
36
37 import java.awt.Dimension;
38 import java.util.ArrayList;
39 import java.util.HashMap;
40 import java.util.List;
41 import java.util.Map;
42
43
44
45
46 public class PmfmPresetUIHandler extends AbstractDaliTableUIHandler<PmfmPresetRowModel, PmfmPresetUIModel, PmfmPresetUI> implements Cancelable {
47
48 public static final Log LOG = LogFactory.getLog(PmfmPresetUIHandler.class);
49
50
51
52
53 @Override
54 public void beforeInit(PmfmPresetUI ui) {
55 super.beforeInit(ui);
56
57 ui.setContextValue(new PmfmPresetUIModel());
58 }
59
60
61
62
63 @Override
64 public void afterInit(PmfmPresetUI ui) {
65 initUI(ui);
66
67 initTable();
68
69 initBeanList(ui.getValueDoubleList(), null, null);
70 ui.getValueDoubleList().getHandler().addAdditionalControls();
71
72 initBeanList(ui.getResultPmfmDoubleList(), null, new ArrayList<>());
73
74
75 Dimension size = ui.getResultPmfmDoubleList().getPreferredSize();
76 ui.getResultPmfmDoubleList().setPreferredSize(new Dimension(size.width, 130));
77
78 initListeners();
79
80
81 registerValidators(getValidator());
82 listenValidatorValid(getValidator(), getModel());
83
84 }
85
86 @Override
87 public SwingValidator<PmfmPresetUIModel> getValidator() {
88 return getUI().getValidator();
89 }
90
91 private void initTable() {
92
93 addColumn(PmfmPresetTableModel.PMFM);
94
95 TableColumnExt valuesCol = addColumn(PmfmPresetTableModel.QUALITATIVE_VALUES);
96 fixColumnWidth(valuesCol, 50);
97
98 PmfmPresetTableModel tableModel = new PmfmPresetTableModel(getTable().getColumnModel());
99 getTable().setModel(tableModel);
100
101 initTable(getTable(), true);
102
103 getTable().setHorizontalScrollEnabled(false);
104 getTable().setVisibleRowCount(6);
105 getTable().setEditable(false);
106 }
107
108 private void initListeners() {
109
110 getModel().addPropertyChangeListener(evt -> {
111
112 switch (evt.getPropertyName()) {
113 case PmfmPresetUIModel.PROPERTY_INITIAL_PMFM_PRESETS:
114
115 loadTable();
116 break;
117
118 case PmfmPresetUIModel.PROPERTY_SINGLE_ROW_SELECTED:
119
120 updateDoubleList();
121 break;
122
123 case PmfmPresetUIModel.PROPERTY_SELECTED_VALUES:
124
125 if (getModel().getSingleSelectedRow() != null) {
126
127 getModel().getSingleSelectedRow().setQualitativeValues(
128 new ArrayList<>(getModel().getSelectedValues()));
129 }
130 break;
131
132 case PmfmPresetUIModel.PROPERTY_AVAILABLE_RESULT_PMFMS:
133
134 getUI().getResultPmfmDoubleList().getHandler().setUniverse(getModel().getAvailableResultPmfms());
135 break;
136
137 case PmfmPresetUIModel.PROPERTY_INITIAL_RESULT_PMFMS:
138
139 getUI().getResultPmfmDoubleList().getHandler().setSelected(getModel().getInitialResultPmfms());
140 break;
141 }
142 });
143 }
144
145 private void loadTable() {
146
147 getModel().setLoading(true);
148 List<PmfmPresetRowModel> rows = new ArrayList<>();
149
150 Map<PmfmDTO, List<QualitativeValueDTO>> initialPmfmPresetMap = getModel().getInitialPmfmPresets().stream().collect(
151 HashMap::new, (map, pmfmPreset) -> map.put(pmfmPreset.getPmfm(), pmfmPreset.getQualitativeValues()),
152 HashMap::putAll
153 );
154
155
156 for (PmfmDTO availablePmfm: getModel().getAvailablePmfms()) {
157 PmfmPresetRowModel row = getTableModel().createNewRow();
158 row.setPmfm(availablePmfm);
159
160 row.setQualitativeValues(initialPmfmPresetMap.get(availablePmfm));
161 rows.add(row);
162 }
163
164 getModel().setRows(rows);
165 recomputeRowsValidState();
166 getModel().setLoading(false);
167 }
168
169 private void updateDoubleList() {
170
171 List<QualitativeValueDTO> universeList = null;
172 List<QualitativeValueDTO> selectedList = null;
173
174 if (getModel().getSingleSelectedRow() != null) {
175
176 universeList = getModel().getSingleSelectedRow().getPmfm() == null
177 ? null
178 : getModel().getSingleSelectedRow().getPmfm().getQualitativeValues();
179 selectedList = new ArrayList<>(getModel().getSingleSelectedRow().getQualitativeValues());
180
181 }
182
183 getUI().getValueDoubleList().getHandler().setUniverse(universeList);
184 getUI().getValueDoubleList().getHandler().setSelected(selectedList);
185 }
186
187
188
189
190 public void valid() {
191
192 if (getModel().isValid()) {
193 stopListenValidatorValid(getValidator());
194 closeDialog();
195 }
196 }
197
198
199
200
201 @Override
202 public void cancel() {
203 stopListenValidatorValid(getValidator());
204 getModel().setValid(false);
205 closeDialog();
206 }
207
208 @Override
209 public AbstractTableModel<PmfmPresetRowModel> getTableModel() {
210 return (PmfmPresetTableModel) getTable().getModel();
211 }
212
213 @Override
214 public SwingTable getTable() {
215 return getUI().getPmfmTable();
216 }
217
218 }