1 package fr.ifremer.dali.ui.swing.content.observation.operation.measurement.grouped.initGrid;
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 com.google.common.collect.Lists;
27 import fr.ifremer.dali.dto.DaliBeans;
28 import fr.ifremer.dali.dto.referential.pmfm.PmfmDTO;
29 import fr.ifremer.dali.dto.referential.pmfm.QualitativeValueDTO;
30 import fr.ifremer.dali.service.referential.ReferentialService;
31 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIHandler;
32 import fr.ifremer.quadrige3.ui.swing.table.AbstractTableModel;
33 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
34 import jaxx.runtime.validator.swing.SwingValidator;
35 import org.jdesktop.swingx.table.TableColumnExt;
36 import org.nuiton.jaxx.application.swing.util.Cancelable;
37
38 import java.util.ArrayList;
39 import java.util.List;
40
41
42
43
44 public class InitGridUIHandler extends AbstractDaliTableUIHandler<InitGridRowModel, InitGridUIModel, InitGridUI> implements Cancelable {
45
46
47
48
49 @Override
50 public void beforeInit(InitGridUI ui) {
51 super.beforeInit(ui);
52
53 InitGridUIModel model = new InitGridUIModel();
54 ui.setContextValue(model);
55 }
56
57
58
59
60 @Override
61 public void afterInit(InitGridUI ui) {
62 initUI(ui);
63
64 initTable();
65
66 initBeanList(ui.getValueDoubleList(), null, null);
67 ui.getValueDoubleList().getHandler().addAdditionalControls();
68
69 initListeners();
70
71
72 registerValidators(getValidator());
73 listenValidatorValid(getValidator(), getModel());
74
75 }
76
77 @Override
78 public SwingValidator<InitGridUIModel> getValidator() {
79 return getUI().getValidator();
80 }
81
82 private void initTable() {
83
84 addColumn(InitGridTableModel.PMFM);
85
86 TableColumnExt valuesCol = addColumn(InitGridTableModel.QUALITATIVE_VALUES);
87 fixColumnWidth(valuesCol, 50);
88
89 InitGridTableModel tableModel = new InitGridTableModel(getTable().getColumnModel());
90 getTable().setModel(tableModel);
91
92 initTable(getTable(), true);
93
94 getTable().setHorizontalScrollEnabled(false);
95 getTable().setVisibleRowCount(6);
96 getTable().setEditable(false);
97 }
98
99 private void initListeners() {
100
101 getModel().addPropertyChangeListener(evt -> {
102
103 switch (evt.getPropertyName()) {
104 case InitGridUIModel.PROPERTY_AVAILABLE_PMFMS:
105
106 loadTable();
107 break;
108
109 case InitGridUIModel.PROPERTY_PRESET:
110
111
112 buildRowsWithPreset();
113 break;
114
115 case InitGridUIModel.PROPERTY_SINGLE_ROW_SELECTED:
116
117 updateDoubleList();
118 break;
119
120 case InitGridUIModel.PROPERTY_SELECTED_VALUES:
121
122 if (getModel().getSingleSelectedRow() != null) {
123
124 getModel().getSingleSelectedRow().setQualitativeValues(
125 new ArrayList<>(getModel().getSelectedValues()));
126 }
127 break;
128 }
129 });
130 }
131
132 private void loadTable() {
133
134 getModel().setLoading(true);
135 List<InitGridRowModel> rows = Lists.newArrayList();
136
137 for (PmfmDTO pmfm : getModel().getAvailablePmfms()) {
138 InitGridRowModel row = getTableModel().createNewRow();
139 row.setPmfm(pmfm);
140 rows.add(row);
141 }
142
143 getModel().setRows(rows);
144 recomputeRowsValidState();
145 getModel().setLoading(false);
146 }
147
148 private void buildRowsWithPreset() {
149
150 if (getModel().getRowCount() == 0) return;
151
152 getModel().setLoading(true);
153 ReferentialService service = getContext().getReferentialService();
154
155 for (Integer pmfmId : getModel().getPreset().getPmfmIds()) {
156 InitGridRowModel row = DaliBeans.findByProperty(getModel().getRows(), InitGridRowModel.PROPERTY_PMFM + "." + PmfmDTO.PROPERTY_ID, pmfmId);
157 if (row == null) continue;
158 row.setQualitativeValues(service.getQualitativeValues(getModel().getPreset().getQualitativeValueIds(pmfmId)));
159 }
160
161 recomputeRowsValidState();
162 getModel().setLoading(false);
163 }
164
165 private void updateDoubleList() {
166
167 List<QualitativeValueDTO> universeList = null;
168 List<QualitativeValueDTO> selectedList = null;
169
170 if (getModel().getSingleSelectedRow() != null) {
171
172 universeList = getModel().getSingleSelectedRow().getPmfm() == null
173 ? null
174 : getModel().getSingleSelectedRow().getPmfm().getQualitativeValues();
175 selectedList = getModel().getSingleSelectedRow().getQualitativeValues();
176
177 }
178
179 getUI().getValueDoubleList().getHandler().setUniverse(universeList);
180 getUI().getValueDoubleList().getHandler().setSelected(selectedList);
181 }
182
183
184
185
186 public void valid() {
187
188 if (getModel().isValid()) {
189
190
191 buildPresetWithRows();
192
193
194 savePreset();
195
196 closeDialog();
197 }
198 }
199
200 private void buildPresetWithRows() {
201
202 getModel().getPreset().clearPmfmPresets();
203
204 for (InitGridRowModel row: getModel().getRows()) {
205
206 getModel().getPreset().addPmfmPreset(
207 row.getPmfm().getId(),
208 DaliBeans.collectIds(row.getQualitativeValues())
209 );
210 }
211
212 }
213
214 private void savePreset() {
215
216 PresetFileLoader.save(getModel().getPreset());
217 }
218
219
220
221
222 @Override
223 public void cancel() {
224 stopListenValidatorValid(getValidator());
225 getModel().setValid(false);
226 closeDialog();
227 }
228
229 @Override
230 public AbstractTableModel<InitGridRowModel> getTableModel() {
231 return (InitGridTableModel) getTable().getModel();
232 }
233
234 @Override
235 public SwingTable getTable() {
236 return getUI().getPmfmTable();
237 }
238
239 }