1 package fr.ifremer.dali.ui.swing.content.manage.campaign.table;
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.DaliBeans;
27 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableModel;
28 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIHandler;
29 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
30 import org.jdesktop.swingx.table.TableColumnExt;
31
32 import javax.swing.SortOrder;
33 import java.util.List;
34
35 import static org.nuiton.i18n.I18n.t;
36
37
38
39
40 public class CampaignsTableUIHandler extends AbstractDaliTableUIHandler<CampaignsTableRowModel, CampaignsTableUIModel, CampaignsTableUI> {
41
42
43
44
45 public CampaignsTableUIHandler() {
46 super(CampaignsTableRowModel.PROPERTY_NAME,
47 CampaignsTableRowModel.PROPERTY_SISMER_LINK,
48 CampaignsTableRowModel.PROPERTY_START_DATE,
49 CampaignsTableRowModel.PROPERTY_END_DATE,
50 CampaignsTableRowModel.PROPERTY_MANAGER,
51 CampaignsTableRowModel.PROPERTY_COMMENT);
52 }
53
54
55
56
57 @Override
58 protected String[] getRowPropertiesToIgnore() {
59 return new String[]{CampaignsTableRowModel.PROPERTY_ERRORS};
60 }
61
62
63
64
65 @Override
66 public AbstractDaliTableModel<CampaignsTableRowModel> getTableModel() {
67 return (CampaignsTableModel) getTable().getModel();
68 }
69
70
71
72
73 @Override
74 public SwingTable getTable() {
75 return getUI().getCampaignsTable();
76 }
77
78
79
80
81 @Override
82 public void beforeInit(final CampaignsTableUI ui) {
83 super.beforeInit(ui);
84
85
86 final CampaignsTableUIModel model = new CampaignsTableUIModel();
87 ui.setContextValue(model);
88 }
89
90
91
92
93 @Override
94 public void afterInit(CampaignsTableUI ui) {
95
96
97 initUI(ui);
98
99
100 initTable();
101
102
103 initListeners();
104
105 getModel().setModify(false);
106 recomputeRowsValidState(true);
107 }
108
109
110
111
112 @Override
113 public boolean isRowValid(final CampaignsTableRowModel row) {
114 row.getErrors().clear();
115 return !row.isEditable() || (super.isRowValid(row) && isCampaignValid(row));
116 }
117
118 private boolean isCampaignValid(CampaignsTableRowModel row) {
119
120
121 boolean nameDuplicateInTable = false;
122 for (CampaignsTableRowModel otherRow : getModel().getRows()) {
123 if (otherRow == row) continue;
124 if (otherRow.getName().equals(row.getName())) {
125 DaliBeans.addError(row, t("dali.campaign.name.duplicates"), CampaignsTableRowModel.PROPERTY_NAME);
126 nameDuplicateInTable = true;
127 break;
128 }
129 }
130
131 if (!nameDuplicateInTable && row.isDirty()) {
132 if (getContext().getCampaignService().checkCampaignNameDuplicates(row.getId(), row.getName())) {
133 DaliBeans.addError(row, t("dali.campaign.name.duplicates"), CampaignsTableRowModel.PROPERTY_NAME);
134 }
135 }
136
137
138 if (row.getStartDate() != null && row.getEndDate() != null && row.getEndDate().before(row.getStartDate())) {
139 DaliBeans.addError(row, t("dali.campaign.endDate.before"), CampaignsTableRowModel.PROPERTY_END_DATE);
140 }
141
142 return row.isErrorsEmpty();
143 }
144
145 @Override
146 protected void onRowsAdded(List<CampaignsTableRowModel> addedRows) {
147 super.onRowsAdded(addedRows);
148
149 if (addedRows.size() == 1) {
150 CampaignsTableRowModel newRow = addedRows.get(0);
151
152 setFocusOnCell(newRow);
153 }
154 }
155
156
157
158
159 @Override
160 protected void onRowModified(int rowIndex, CampaignsTableRowModel row, String propertyName, Integer propertyIndex, Object oldValue, Object newValue) {
161 super.onRowModified(rowIndex, row, propertyName, propertyIndex, oldValue, newValue);
162
163 row.setDirty(true);
164 }
165
166
167
168
169 private void initListeners() {
170
171
172 getModel().addPropertyChangeListener(CampaignsTableUIModel.PROPERTY_SAVE_ENABLED, evt -> {
173 getModel().getRows().forEach(campaignsTableRowModel -> campaignsTableRowModel.setEditable(getModel().isSaveEnabled()));
174 getUI().getCampaignsTable().invalidate();
175 getUI().getCampaignsTable().repaint();
176 });
177
178 }
179
180
181
182
183 private void initTable() {
184
185
186 final TableColumnExt columnName = addColumn(
187 CampaignsTableModel.NAME);
188 columnName.setSortable(true);
189
190
191 final TableColumnExt columnSismer = addColumn(
192 CampaignsTableModel.SISMER_LINK);
193 columnSismer.setSortable(true);
194
195 final TableColumnExt columnStartDate = addDatePickerColumnToModel(
196 CampaignsTableModel.START_DATE,
197 getConfig().getDateFormat(),
198 true
199 );
200 columnStartDate.setSortable(true);
201
202 final TableColumnExt columnEndDate = addDatePickerColumnToModel(
203 CampaignsTableModel.END_DATE,
204 getConfig().getDateFormat(),
205 true
206 );
207 columnEndDate.setSortable(true);
208
209 final TableColumnExt columnRecorderPerson = addExtendedComboDataColumnToModel(
210 CampaignsTableModel.MANAGER,
211 getContext().getUserService().getActiveUsers(),
212 false
213 );
214 columnRecorderPerson.setSortable(true);
215
216
217 addCommentColumn(CampaignsTableModel.COMMENT);
218 TableColumnExt updateDateCol = addDatePickerColumnToModel(CampaignsTableModel.UPDATE_DATE, getConfig().getDateTimeFormat(), false);
219 fixColumnWidth(updateDateCol, 120);
220
221
222 final CampaignsTableModel tableModel = new CampaignsTableModel(getTable().getColumnModel());
223 getTable().setModel(tableModel);
224
225
226 columnName.setHideable(false);
227 columnStartDate.setHideable(false);
228 columnRecorderPerson.setHideable(false);
229
230
231 initTable(getTable());
232
233
234 getTable().setSortOrder(CampaignsTableModel.NAME, SortOrder.ASCENDING);
235 }
236
237 }