1 package fr.ifremer.dali.ui.swing.content.extraction.filters.period;
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 import org.nuiton.jaxx.application.swing.util.Cancelable;
32
33 import javax.swing.JComponent;
34 import java.awt.Component;
35 import java.time.LocalDate;
36 import java.util.List;
37
38 import static org.nuiton.i18n.I18n.t;
39
40
41
42
43
44 public class ExtractionPeriodUIHandler extends AbstractDaliTableUIHandler<ExtractionPeriodRowModel, ExtractionPeriodUIModel, ExtractionPeriodUI> implements Cancelable {
45
46
47 @Override
48 public void beforeInit(ExtractionPeriodUI ui) {
49 super.beforeInit(ui);
50
51 ExtractionPeriodUIModel model = new ExtractionPeriodUIModel();
52 ui.setContextValue(model);
53 }
54
55
56 @Override
57 public void afterInit(ExtractionPeriodUI ui) {
58 initUI(ui);
59
60 initTable();
61
62 getModel().addPropertyChangeListener(ExtractionPeriodUIModel.PROPERTY_BEANS_LOADED, evt -> {
63
64 if (getModel().getRowCount() == 0) {
65
66 getModel().addNewRow();
67 } else {
68
69 setFocusOnCell(getModel().getRows().get(0));
70 }
71 });
72 }
73
74 private void initTable() {
75
76 TableColumnExt startDateCol = addLocalDatePickerColumnToModel(ExtractionPeriodTableModel.START_DATE, getConfig().getDateFormat());
77 fixColumnWidth(startDateCol, 120);
78 TableColumnExt endDateCol = addLocalDatePickerColumnToModel(ExtractionPeriodTableModel.END_DATE, getConfig().getDateFormat());
79 fixColumnWidth(endDateCol, 120);
80
81 ExtractionPeriodTableModel tableModel = new ExtractionPeriodTableModel(getTable().getColumnModel());
82 getTable().setModel(tableModel);
83
84 getTable().setVisibleRowCount(5);
85
86 initTable(getTable());
87 }
88
89
90 @Override
91 protected JComponent getComponentToFocus() {
92 return getTable();
93 }
94
95
96 @Override
97 public Component getNextComponentToFocus() {
98 return getUI().getValidButton();
99 }
100
101
102 @Override
103 protected void onRowsAdded(List<ExtractionPeriodRowModel> addedRows) {
104 super.onRowsAdded(addedRows);
105
106 if (addedRows.size() == 1) {
107 ExtractionPeriodRowModel row = addedRows.get(0);
108 setFocusOnCell(row);
109 }
110 }
111
112
113 @Override
114 protected void onRowModified(int rowIndex, ExtractionPeriodRowModel row, String propertyName, Integer propertyIndex, Object oldValue, Object newValue) {
115 super.onRowModified(rowIndex, row, propertyName, propertyIndex, oldValue, newValue);
116 recomputeRowsValidState(false);
117 }
118
119
120 void removeSelectedRows() {
121
122 getTable().removeEditor();
123 getModel().deleteSelectedRows();
124 }
125
126
127 @Override
128 protected boolean isRowValid(ExtractionPeriodRowModel row) {
129 return isPeriodValid(row);
130 }
131
132 private boolean isPeriodValid(ExtractionPeriodRowModel row) {
133
134 row.getErrors().clear();
135
136 final LocalDate startDate = row.getStartDate();
137 final LocalDate endDate = row.getEndDate();
138
139 if (startDate == null) {
140
141
142 DaliBeans.addError(row, t("dali.extraction.period.empty.message"), ExtractionPeriodRowModel.PROPERTY_START_DATE);
143
144 } else if (endDate == null) {
145
146
147 DaliBeans.addError(row, t("dali.extraction.period.empty.message"), ExtractionPeriodRowModel.PROPERTY_END_DATE);
148
149 } else if (endDate.isBefore(startDate)) {
150
151
152 DaliBeans.addError(row, t("dali.extraction.period.invalid.message"), ExtractionPeriodRowModel.PROPERTY_END_DATE);
153
154 }
155
156 return row.getErrors().isEmpty();
157 }
158
159
160
161
162 public void valid() {
163
164 if (getModel().isValid()) {
165 closeDialog();
166 }
167 }
168
169
170 @Override
171 public void cancel() {
172 getModel().setValid(false);
173 closeDialog();
174 }
175
176
177 @Override
178 public AbstractDaliTableModel<ExtractionPeriodRowModel> getTableModel() {
179 return (ExtractionPeriodTableModel) getTable().getModel();
180 }
181
182
183 @Override
184 public SwingTable getTable() {
185 return getUI().getPeriodTable();
186 }
187 }