1 package fr.ifremer.dali.ui.swing.content.home;
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.dto.data.survey.SurveyDTO;
28 import fr.ifremer.dali.service.control.ControlRuleMessagesBean;
29 import fr.ifremer.dali.ui.swing.action.AbstractDaliSaveAction;
30 import fr.ifremer.quadrige3.core.dao.technical.Dates;
31 import org.apache.commons.collections4.CollectionUtils;
32
33 import java.util.Collection;
34
35 import static org.nuiton.i18n.I18n.t;
36
37
38
39
40 public class SaveAction extends AbstractDaliSaveAction<HomeUIModel, HomeUI, HomeUIHandler> {
41
42 private Collection<? extends SurveyDTO> surveysToSave;
43
44 private ControlRuleMessagesBean controlMessages;
45
46 private boolean controlSilently = false;
47
48 private boolean showControlIfSuccess = false;
49
50 private boolean updateControlDateWhenControlSucceed = false;
51
52
53
54
55
56
57 public SaveAction(final HomeUIHandler handler) {
58 super(handler, false);
59 }
60
61
62
63
64
65
66 public void setSurveysToSave(Collection<? extends SurveyDTO> surveysToSave) {
67 this.surveysToSave = surveysToSave;
68 }
69
70
71
72
73
74
75 public void setControlSilently(boolean controlSilently) {
76 this.controlSilently = controlSilently;
77 }
78
79
80
81
82
83
84 public void setShowControlIfSuccess(boolean showControlIfSuccess) {
85 this.showControlIfSuccess = showControlIfSuccess;
86 }
87
88
89
90
91
92
93 public void setUpdateControlDateWhenControlSucceed(boolean updateControlDateWhenControlSucceed) {
94 this.updateControlDateWhenControlSucceed = updateControlDateWhenControlSucceed;
95 }
96
97
98
99
100
101
102 public ControlRuleMessagesBean getControlMessages() {
103 return controlMessages;
104 }
105
106
107
108
109 @Override
110 public boolean prepareAction() throws Exception {
111 if (!super.prepareAction()) {
112 return false;
113 }
114
115 if (!getModel().isValid()) {
116
117
118 displayErrorMessage(t("dali.action.save.errors.title"), t("dali.action.save.errors.remove"));
119
120
121 return false;
122 }
123
124
125 if (surveysToSave == null) {
126 surveysToSave = getUI().getSurveysTableUI().getModel().getRows();
127 }
128
129 if (CollectionUtils.isEmpty(surveysToSave)) {
130 return false;
131 }
132
133
134 for (SurveyDTO survey : surveysToSave) {
135 if (survey.isDirty()) {
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177 if (survey.getCampaign() != null) {
178 if (survey.getDate().isBefore(Dates.convertToLocalDate(survey.getCampaign().getStartDate(), getConfig().getDbTimezone()))
179 || (survey.getCampaign().getEndDate() != null && survey.getDate().isAfter(Dates.convertToLocalDate(survey.getCampaign().getEndDate(), getConfig().getDbTimezone())))) {
180
181 getContext().getDialogHelper().showErrorDialog(
182 t("dali.action.save.observation.notInCampaign", DaliBeans.toString(survey), DaliBeans.toString(survey.getCampaign())),
183 t("dali.action.save.observations"));
184 return false;
185 }
186 }
187 }
188 }
189
190 return true;
191 }
192
193
194
195
196 @Override
197 public void doAction() throws Exception {
198
199 createProgressionUIModel();
200
201
202 getContext().getObservationService().saveSurveys(surveysToSave, getProgressionUIModel());
203
204
205 controlMessages = getContext().getRulesControlService().controlSurveys(surveysToSave,
206 updateControlDateWhenControlSucceed,
207 true,
208 getProgressionUIModel());
209
210 }
211
212
213
214
215 @Override
216 public void postSuccessAction() {
217 super.postSuccessAction();
218
219 sendMessage(t("dali.action.save.observations.success", surveysToSave.size()));
220
221
222 if (surveysToSave.size() == getModel().getSurveysTableUIModel().getRowCount()) {
223 getModel().getSurveysTableUIModel().setModify(false);
224 getModel().getOperationsTableUIModel().setModify(false);
225 getModel().setModify(false);
226 }
227
228
229 if (getModel().getSelectedSurvey() != null) {
230 getContext().setSelectedSurveyId(getModel().getSelectedSurvey().getId());
231 }
232
233
234 if (!isFromChangeScreenAction()) {
235
236 getUI().getOperationsTableUI().getHandler().loadOperations(getModel().getSelectedSurvey());
237
238 if (HomeUIHandler.SURVEYS_MAP_CARD.equals(getUI().getBottomPanelLayout().getSelected())) {
239 getUI().getSurveysMapUI().getHandler().buildMapPositions();
240 }
241 }
242
243
244 if (!controlSilently) {
245 getUI().getSurveysTableUI().getHandler().ensureColumnsWithErrorAreVisible(surveysToSave);
246 if (isFromChangeScreenAction()) {
247 setAllowChangeScreen(showControlResultAndAskContinue(controlMessages));
248 } else {
249 showControlResult(controlMessages, showControlIfSuccess);
250 }
251 }
252
253 }
254
255
256
257
258 @Override
259 protected void releaseAction() {
260 super.releaseAction();
261
262 surveysToSave = null;
263 controlSilently = false;
264 showControlIfSuccess = false;
265 updateControlDateWhenControlSucceed = false;
266 }
267 }