1 package fr.ifremer.reefdb.ui.swing.content.manage.referential.pmfm.parameter.local;
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.quadrige3.core.dao.referential.StatusCode;
27 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
28 import fr.ifremer.reefdb.dao.technical.Daos;
29 import fr.ifremer.reefdb.dto.ReefDbBeans;
30 import fr.ifremer.reefdb.dto.referential.pmfm.ParameterDTO;
31 import fr.ifremer.reefdb.service.StatusFilter;
32 import fr.ifremer.reefdb.ui.swing.content.manage.referential.pmfm.parameter.menu.ManageParametersMenuUIModel;
33 import fr.ifremer.reefdb.ui.swing.content.manage.referential.pmfm.parameter.table.ParameterTableModel;
34 import fr.ifremer.reefdb.ui.swing.content.manage.referential.pmfm.parameter.table.ParameterTableRowModel;
35 import fr.ifremer.reefdb.ui.swing.util.table.AbstractReefDbTableModel;
36 import fr.ifremer.reefdb.ui.swing.util.table.AbstractReefDbTableUIHandler;
37 import fr.ifremer.reefdb.ui.swing.util.table.editor.AssociatedQualitativeValueCellEditor;
38 import fr.ifremer.reefdb.ui.swing.util.table.renderer.AssociatedQualitativeValueCellRenderer;
39 import org.apache.commons.collections4.CollectionUtils;
40 import org.apache.commons.lang3.StringUtils;
41 import org.apache.commons.logging.Log;
42 import org.apache.commons.logging.LogFactory;
43 import org.jdesktop.swingx.table.TableColumnExt;
44
45 import javax.swing.SwingUtilities;
46 import java.util.List;
47
48 import static org.nuiton.i18n.I18n.t;
49
50
51
52
53 public class ManageParametersLocalUIHandler extends AbstractReefDbTableUIHandler<ParameterTableRowModel, ManageParametersLocalUIModel, ManageParametersLocalUI> {
54
55
56
57
58 private static final Log LOG = LogFactory.getLog(ManageParametersLocalUIHandler.class);
59
60
61 @Override
62 public void beforeInit(final ManageParametersLocalUI ui) {
63 super.beforeInit(ui);
64
65
66 final ManageParametersLocalUIModel model = new ManageParametersLocalUIModel();
67 ui.setContextValue(model);
68 }
69
70
71 @Override
72 public void afterInit(final ManageParametersLocalUI ui) {
73 initUI(ui);
74
75
76 initTable();
77
78
79 getUI().getDeleteButton().setEnabled(false);
80 getUI().getReplaceButton().setEnabled(false);
81
82 ManageParametersMenuUIModel menuUIModel = getUI().getMenuUI().getModel();
83 menuUIModel.setLocal(true);
84
85
86 menuUIModel.addPropertyChangeListener(ManageParametersMenuUIModel.PROPERTY_RESULTS, evt -> loadParametersManageLocal((List<ParameterDTO>) evt.getNewValue()));
87
88 }
89
90
91
92
93 private void initTable() {
94
95
96 final TableColumnExt codeCol = addColumn(ParameterTableModel.CODE);
97 codeCol.setSortable(true);
98 codeCol.setEditable(false);
99
100
101 final TableColumnExt mnemonicCol = addColumn(ParameterTableModel.NAME);
102 mnemonicCol.setSortable(true);
103
104
105 final TableColumnExt descriptionCol = addColumn(ParameterTableModel.DESCRIPTION);
106 descriptionCol.setSortable(true);
107
108
109 final TableColumnExt qualitativeCol = addBooleanColumnToModel(ParameterTableModel.IS_QUALITATIVE, getTable());
110 qualitativeCol.setSortable(true);
111
112
113 final TableColumnExt calculatedCol = addBooleanColumnToModel(ParameterTableModel.IS_CALCULATED, getTable());
114 calculatedCol.setSortable(true);
115
116
117 final TableColumnExt taxonomicCol = addBooleanColumnToModel(ParameterTableModel.IS_TAXONOMIC, getTable());
118 taxonomicCol.setSortable(true);
119
120
121 final TableColumnExt associatedQualitativeValueCol = addColumn(
122 new AssociatedQualitativeValueCellEditor(getTable(), getUI(), true),
123 new AssociatedQualitativeValueCellRenderer(),
124 ParameterTableModel.ASSOCIATED_QUALITATIVE_VALUE);
125 associatedQualitativeValueCol.setSortable(true);
126
127
128 addCommentColumn(ParameterTableModel.COMMENT);
129 TableColumnExt creationDateCol = addDatePickerColumnToModel(ParameterTableModel.CREATION_DATE, getConfig().getDateTimeFormat(), false);
130 fixColumnWidth(creationDateCol, 120);
131 TableColumnExt updateDateCol = addDatePickerColumnToModel(ParameterTableModel.UPDATE_DATE, getConfig().getDateTimeFormat(), false);
132 fixColumnWidth(updateDateCol, 120);
133
134
135 final TableColumnExt statusCol = addFilterableComboDataColumnToModel(
136 ParameterTableModel.STATUS,
137 getContext().getReferentialService().getStatus(StatusFilter.LOCAL),
138 false);
139 statusCol.setSortable(true);
140 fixDefaultColumnWidth(statusCol);
141
142
143 final TableColumnExt parameterGroupCol = addFilterableComboDataColumnToModel(
144 ParameterTableModel.PARAMETER_GROUP,
145 getContext().getReferentialService().getParameterGroup(StatusFilter.ACTIVE),
146 false);
147 parameterGroupCol.setSortable(true);
148
149
150 final ParameterTableModel tableModel = new ParameterTableModel(getTable().getColumnModel(), true);
151 getTable().setModel(tableModel);
152
153
154 addExportToCSVAction(t("reefdb.property.pmfm.parameters.local", ParameterTableModel.ASSOCIATED_QUALITATIVE_VALUE));
155
156
157 initTable(getTable());
158
159
160 parameterGroupCol.setVisible(false);
161
162 creationDateCol.setVisible(false);
163 updateDateCol.setVisible(false);
164
165 getTable().setVisibleRowCount(5);
166 }
167
168
169 @Override
170 public AbstractReefDbTableModel<ParameterTableRowModel> getTableModel() {
171 return (ParameterTableModel) getTable().getModel();
172 }
173
174
175 @Override
176 public SwingTable getTable() {
177 return ui.getParametersLocalTable();
178 }
179
180
181
182
183
184
185 public void loadParametersManageLocal(final List<ParameterDTO> parameters) {
186
187
188 getUI().getNewButton().setEnabled(true);
189
190
191 getModel().setBeans(parameters);
192 getModel().setModify(false);
193 }
194
195
196 @Override
197 protected void onRowsAdded(List<ParameterTableRowModel> addedRows) {
198 super.onRowsAdded(addedRows);
199
200 if (addedRows.size() == 1) {
201 final ParameterTableRowModel rowModel = addedRows.get(0);
202
203 if (checkNewCode(rowModel)) {
204
205
206 rowModel.setStatus(Daos.getStatus(StatusCode.LOCAL_ENABLE));
207 rowModel.setNewCode(true);
208 setFocusOnCell(rowModel);
209
210 } else {
211
212 SwingUtilities.invokeLater(() -> {
213 getModel().deleteRow(rowModel);
214 getModel().setSingleSelectedRow(null);
215 });
216 }
217 }
218 }
219
220 private boolean checkNewCode(ParameterTableRowModel row) {
221
222 boolean edit = StringUtils.isNotBlank(row.getCode());
223 String newCode = (String) getContext().getDialogHelper().showInputDialog(
224 getUI(),
225 t("reefdb.property.pmfm.parameter.code"),
226 edit ? t("reefdb.parameter.editCode.title") : t("reefdb.parameter.setCode.title"),
227 null,
228 row.getCode());
229 if (StringUtils.isBlank(newCode)) {
230 return false;
231 }
232 newCode = newCode.trim();
233
234
235 for (ParameterTableRowModel otherRow : getModel().getRows()) {
236 if (row == otherRow) continue;
237 if (newCode.equalsIgnoreCase(otherRow.getCode())) {
238
239 getContext().getDialogHelper().showErrorDialog(
240 t("reefdb.error.alreadyExists.referential", t("reefdb.property.pmfm.parameter"), newCode, t("reefdb.property.referential.local")),
241 edit ? t("reefdb.parameter.editCode.title") : t("reefdb.parameter.setCode.title")
242 );
243 return false;
244 }
245 }
246
247
248 List<ParameterDTO> existingParameters = getContext().getReferentialService().searchParameters(StatusFilter.ALL, newCode, null, null);
249 if (CollectionUtils.isNotEmpty(existingParameters)) {
250 ParameterDTO parameter = existingParameters.get(0);
251
252 getContext().getDialogHelper().showErrorDialog(
253 t("reefdb.error.alreadyExists.referential", t("reefdb.property.pmfm.parameter"), newCode,
254 ReefDbBeans.isLocalStatus(parameter.getStatus()) ? t("reefdb.property.referential.local") : t("reefdb.property.referential.national")),
255 edit ? t("reefdb.parameter.editCode.title") : t("reefdb.parameter.setCode.title")
256 );
257 return false;
258 }
259
260 row.setCode(newCode);
261 return true;
262
263 }
264
265
266
267
268 public void editParameterCode() {
269 ParameterTableRowModel row = getModel().getSingleSelectedRow();
270 if (row != null && row.isLocal() && row.isNewCode()) {
271 if (checkNewCode(row)) {
272 row.setDirty(true);
273 }
274 }
275 }
276
277
278 @Override
279 protected void onRowModified(int rowIndex, ParameterTableRowModel row, String propertyName, Integer propertyIndex, Object oldValue, Object newValue) {
280 super.onRowModified(rowIndex, row, propertyName, propertyIndex, oldValue, newValue);
281 row.setDirty(true);
282 }
283
284
285 @Override
286 protected void onRowModifyStateChanged(int rowIndex, ParameterTableRowModel row, Boolean oldValue, Boolean newValue) {
287 super.onRowModifyStateChanged(rowIndex, row, oldValue, newValue);
288 row.setDirty(true);
289 getModel().setModify(true);
290 }
291
292 }