1 package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency;
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
27 import fr.ifremer.tutti.persistence.entities.CaracteristicMap;
28 import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode;
29 import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
30 import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
31 import fr.ifremer.tutti.service.sampling.SamplingCodePrefix;
32 import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchRowModel;
33 import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel;
34 import org.apache.commons.logging.Log;
35 import org.apache.commons.logging.LogFactory;
36 import org.nuiton.jaxx.application.bean.JavaBeanObject;
37
38 import java.io.Serializable;
39 import java.util.ArrayList;
40 import java.util.Collection;
41 import java.util.List;
42
43
44
45
46
47
48 public class IndividualObservationBatchUIModel extends AbstractTuttiTableUIModel<SpeciesBatchRowModel, IndividualObservationBatchRowModel, IndividualObservationBatchUIModel> implements JavaBeanObject {
49
50 private static final long serialVersionUID = 1L;
51
52
53 private static final Log log = LogFactory.getLog(IndividualObservationBatchUIModel.class);
54
55
56
57
58
59
60 private final SpeciesFrequencyUIModel parentModel;
61
62
63
64
65
66
67 private final SamplingNotificationZoneModel samplingNotificationZoneModel;
68
69
70
71
72
73
74 private final Caracteristic sexCaracteristic;
75
76
77
78
79
80
81 private final List<Caracteristic> protocolIndividualObservationCaracteristics;
82
83
84
85
86 private Caracteristic maturityCaracteristic;
87
88
89
90
91
92
93 private Collection<Caracteristic> notEditableCaracteristic;
94
95
96
97
98
99
100 protected SamplingCodePrefix samplingCodePrefix;
101
102
103
104
105
106
107 private IndividualObservationBatchTableModel individualObservationTableModel;
108
109 @Override
110 protected SpeciesBatchRowModel newEntity() {
111 return null;
112 }
113
114 public IndividualObservationBatchUIModel(SpeciesFrequencyUIModel parentModel,
115 Caracteristic sexCaracteristic,
116 List<Caracteristic> protocolIndividualObservationCaracteristics) {
117 super(SpeciesBatchRowModel.class, null, null);
118 this.parentModel = parentModel;
119 this.sexCaracteristic = sexCaracteristic;
120 this.protocolIndividualObservationCaracteristics = protocolIndividualObservationCaracteristics == null ?
121 new ArrayList<>() : new ArrayList<>(protocolIndividualObservationCaracteristics);
122 this.samplingNotificationZoneModel = new SamplingNotificationZoneModel();
123 }
124
125 public SamplingNotificationZoneModel getSamplingNotificationZoneModel() {
126 return samplingNotificationZoneModel;
127 }
128
129 public SamplingCodePrefix getSamplingCodePrefix() {
130 return samplingCodePrefix;
131 }
132
133 public void setSamplingCodePrefix(SamplingCodePrefix samplingCodePrefix) {
134 this.samplingCodePrefix = samplingCodePrefix;
135 }
136
137 public List<Caracteristic> getProtocolIndividualObservationCaracteristics() {
138 return protocolIndividualObservationCaracteristics;
139 }
140
141 public boolean withMaturityCaracteristic() {
142 return maturityCaracteristic != null;
143 }
144
145 public Caracteristic getMaturityCaracteristic() {
146 return maturityCaracteristic;
147 }
148
149 public void setMaturityCaracteristic(Caracteristic maturityCaracteristic) {
150 this.maturityCaracteristic = maturityCaracteristic;
151 }
152
153 public CaracteristicQualitativeValue getMaturityValue(IndividualObservationBatchRowModel row) {
154
155 CaracteristicQualitativeValue caracteristicValue = null;
156 if (withMaturityCaracteristic()) {
157 caracteristicValue = row.getCaracteristicQualitativeValue(maturityCaracteristic);
158 }
159 return caracteristicValue;
160
161 }
162
163 public CaracteristicQualitativeValue getMaturityValue(CaracteristicMap caracteristicMap) {
164
165 CaracteristicQualitativeValue caracteristicValue = null;
166 if (withMaturityCaracteristic()) {
167 caracteristicValue = caracteristicMap.getQualitativeValue(maturityCaracteristic);
168 }
169 return caracteristicValue;
170
171 }
172
173 public void moveMaturityValueFromCaracteristicsToDefaultCaracteristics(IndividualObservationBatchRowModel newRow) {
174
175 if (withMaturityCaracteristic()) {
176
177 Serializable caracteristicValue = newRow.getCaracteristics().remove(maturityCaracteristic);
178 newRow.getDefaultCaracteristics().putIfAbsent(maturityCaracteristic, caracteristicValue);
179
180 }
181 }
182
183 public void setMaturityValueToDefaultCaracterictis(IndividualObservationBatchRowModel result, CaracteristicQualitativeValue maturityState) {
184 result.getDefaultCaracteristics().put(maturityCaracteristic, maturityState);
185 }
186
187 public Caracteristic getSexCaracteristic() {
188 return sexCaracteristic;
189 }
190
191 public CaracteristicQualitativeValue getGender(IndividualObservationBatchRowModel row) {
192 return row.getCaracteristicQualitativeValue(sexCaracteristic);
193 }
194
195 public CaracteristicQualitativeValue getGender(CaracteristicMap caracteristicMap) {
196 return caracteristicMap.getQualitativeValue(sexCaracteristic);
197 }
198
199 public void setGenderValueToDefaultCaracterictis(IndividualObservationBatchRowModel result, CaracteristicQualitativeValue gender) {
200 result.getDefaultCaracteristics().put(sexCaracteristic, gender);
201 }
202
203 public void moveGenderValueFromCaracteristicsToDefaultCaracteristics(IndividualObservationBatchRowModel newRow) {
204 Serializable caracteristicValue = newRow.getCaracteristics().remove(sexCaracteristic);
205 if (caracteristicValue != null) {
206 newRow.getDefaultCaracteristics().putIfAbsent(sexCaracteristic, caracteristicValue);
207 }
208 }
209
210 public void setNotEditableCaracteristic(Collection<Caracteristic> notEditableCaracteristic) {
211 this.notEditableCaracteristic = notEditableCaracteristic;
212 }
213
214
215
216
217
218
219 public boolean isNonEmptyRowInError() {
220 return rowsInError.stream().anyMatch(row -> !row.isEmpty(notEditableCaracteristic));
221 }
222
223 public void recomputeRowsValidateState() {
224
225 if (log.isInfoEnabled()) {
226 log.info("Revalidate all individual observation rows");
227 }
228
229 rowsInError.clear();
230
231 rows.forEach(row -> {
232
233 boolean valid = row.computeValid();
234
235
236 row.setValid(valid);
237 if (!valid) {
238 rowsInError.add(row);
239 }
240
241 });
242
243 firePropertyChange(PROPERTY_ROWS_IN_ERROR, null, rowsInError);
244
245 }
246
247 public boolean recomputeCanEditLengthStep() {
248 boolean result = true;
249 if (rows != null) {
250 for (IndividualObservationBatchRowModel row : rows) {
251
252 if (row.isEmpty(notEditableCaracteristic)) {
253
254 continue;
255 }
256
257
258
259 result = false;
260 break;
261 }
262 }
263 return result;
264 }
265
266 @Override
267 public void firePropertyChanged(String propertyName, Object oldValue, Object newValue) {
268 super.firePropertyChange(propertyName, oldValue, newValue);
269 }
270
271 public void recomputeRowValidState(IndividualObservationBatchRowModel row) {
272
273
274 boolean valid = row.computeValid();
275
276
277 row.setValid(valid);
278
279 if (valid) {
280 removeRowInError(row);
281 } else {
282 addRowInError(row);
283 }
284
285 }
286
287 public void setCopyIndividualObservationMode(CopyIndividualObservationMode newCopyMode) {
288
289 getRows().forEach(row -> row.setCopyIndividualObservationMode(newCopyMode));
290 recomputeRowsValidateState();
291
292 individualObservationTableModel.fireTableDataChanged();
293
294 }
295
296 public void removeIndividualObservations(Collection<IndividualObservationBatchRowModel> rows) {
297
298
299 parentModel.getIndividualObservationUICache().removeIndividualObservations(rows);
300 parentModel.getSamplingCodeUICache().removeIndividualObservations(rows);
301
302 List<IndividualObservationBatchRowModel> newRows = new ArrayList<>(getRows());
303 newRows.removeAll(rows);
304
305 setRows(newRows);
306
307 }
308
309 public void setIndividualObservationTableModel(IndividualObservationBatchTableModel individualObservationTableModel) {
310 this.individualObservationTableModel = individualObservationTableModel;
311 }
312
313 public void clear() {
314
315 removeIndividualObservations(rows);
316
317 }
318 }