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 import com.google.common.collect.Lists;
26 import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode;
27 import fr.ifremer.tutti.persistence.entities.CaracteristicMap;
28 import fr.ifremer.tutti.persistence.entities.data.Attachment;
29 import fr.ifremer.tutti.persistence.entities.data.CopyIndividualObservationMode;
30 import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
31 import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch;
32 import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatchs;
33 import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch;
34 import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
35 import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue;
36 import fr.ifremer.tutti.persistence.entities.referential.Species;
37 import fr.ifremer.tutti.service.sampling.SamplingCodePrefix;
38 import fr.ifremer.tutti.type.WeightUnit;
39 import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel;
40 import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentModelAware;
41 import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapColumnRowModel;
42 import org.apache.commons.lang3.StringUtils;
43 import org.nuiton.util.beans.Binder;
44 import org.nuiton.util.beans.BinderFactory;
45
46 import java.io.Serializable;
47 import java.util.Collection;
48 import java.util.Collections;
49 import java.util.List;
50 import java.util.Map;
51
52
53
54
55
56 public class IndividualObservationBatchRowModel extends AbstractTuttiBeanUIModel<IndividualObservationBatch, IndividualObservationBatchRowModel>
57 implements AttachmentModelAware, IndividualObservationBatch, CaracteristicMapColumnRowModel {
58
59 private static final long serialVersionUID = 1L;
60
61 public static final String PROPERTY_DEFAULT_CARACTERISTICS = "defaultCaracteristics";
62
63
64
65
66
67
68 protected final IndividualObservationBatch editObject = IndividualObservationBatchs.newIndividualObservationBatch();
69
70
71
72
73
74
75 protected final List<Attachment> attachment = Lists.newArrayList();
76
77
78
79
80
81
82 protected CaracteristicMap defaultCaracteristics = new CaracteristicMap();
83
84
85
86
87
88
89 protected final WeightUnit weightUnit;
90
91
92
93
94
95
96 protected static final Binder<IndividualObservationBatch, IndividualObservationBatchRowModel> fromBeanBinder =
97 BinderFactory.newBinder(IndividualObservationBatch.class,
98 IndividualObservationBatchRowModel.class);
99
100 protected static final Binder<IndividualObservationBatchRowModel, IndividualObservationBatch> toBeanBinder =
101 BinderFactory.newBinder(IndividualObservationBatchRowModel.class,
102 IndividualObservationBatch.class);
103
104 public IndividualObservationBatchRowModel(WeightUnit weightUnit,
105 CaracteristicMap defaultCaracteristicMap) {
106 super(fromBeanBinder, toBeanBinder);
107 this.weightUnit = weightUnit;
108 if (getCaracteristics() == null) {
109 setCaracteristics(new CaracteristicMap());
110 }
111 setDefaultCaracteristics(CaracteristicMap.copy(defaultCaracteristicMap));
112 }
113
114 public IndividualObservationBatchRowModel(WeightUnit weightUnit,
115 Collection<Caracteristic> defaultCaracteristicsSet,
116 IndividualObservationBatch entity) {
117
118 this(weightUnit, CaracteristicMap.fromCollection(defaultCaracteristicsSet));
119
120 fromEntity(entity);
121 }
122
123
124
125
126
127 public CaracteristicMap getDefaultCaracteristics() {
128 return defaultCaracteristics;
129 }
130
131 public void setDefaultCaracteristics(CaracteristicMap defaultCaracteristics) {
132 Object oldValue = CaracteristicMap.copy(getDefaultCaracteristics());
133 this.defaultCaracteristics = defaultCaracteristics;
134 firePropertyChange(PROPERTY_DEFAULT_CARACTERISTICS, oldValue, defaultCaracteristics);
135 }
136
137
138
139
140
141 @Override
142 public void fromEntity(IndividualObservationBatch entity) {
143 super.fromEntity(entity);
144
145
146 setWeight(weightUnit.fromEntity(getWeight()));
147
148 CaracteristicMap caracteristics = getCaracteristics();
149 if (caracteristics == null) {
150 setCaracteristics(new CaracteristicMap());
151
152 } else {
153
154 for (Caracteristic caracteristic : getDefaultCaracteristics().keySet()) {
155 if (caracteristics.containsKey(caracteristic)) {
156 Serializable value = caracteristics.remove(caracteristic);
157 defaultCaracteristics.put(caracteristic, value);
158 }
159 }
160 }
161 }
162
163 public static List<IndividualObservationBatchRowModel> fromEntity(WeightUnit weightUnit,
164 Collection<Caracteristic> defaultCaracteristicsSet,
165 List<IndividualObservationBatch> entities) {
166 List<IndividualObservationBatchRowModel> result = Lists.newArrayList();
167 for (IndividualObservationBatch entity : entities) {
168
169 IndividualObservationBatchRowModel row =
170 new IndividualObservationBatchRowModel(weightUnit, defaultCaracteristicsSet, entity);
171 result.add(row);
172 }
173 return result;
174 }
175
176 @Override
177 public IndividualObservationBatch toEntity() {
178 IndividualObservationBatch result = super.toEntity();
179
180
181 result.setWeight(weightUnit.toEntity(getWeight()));
182
183 CaracteristicMap caracteristics = new CaracteristicMap();
184 result.setCaracteristics(caracteristics);
185
186
187 for (Map.Entry<Caracteristic, Serializable> entry : getCaracteristics().entrySet()) {
188 Serializable value = entry.getValue();
189 if (value != null) {
190 caracteristics.put(entry.getKey(), value);
191 }
192 }
193
194
195 for (Map.Entry<Caracteristic, Serializable> entry : getDefaultCaracteristics().entrySet()) {
196 Serializable value = entry.getValue();
197 if (value != null) {
198 caracteristics.put(entry.getKey(), value);
199 }
200 }
201
202 return result;
203 }
204
205 public static List<IndividualObservationBatch> toEntity(List<IndividualObservationBatchRowModel> rows,
206 SpeciesBatch batch) {
207 List<IndividualObservationBatch> result = Lists.newArrayList();
208 for (IndividualObservationBatchRowModel row : rows) {
209
210 IndividualObservationBatch entity = row.toEntity();
211 entity.setBatchId(batch.getIdAsInt());
212 entity.setFishingOperation(batch.getFishingOperation());
213 entity.setSpecies(batch.getSpecies());
214 result.add(entity);
215 }
216 return result;
217 }
218
219 @Override
220 protected IndividualObservationBatch newEntity() {
221 return IndividualObservationBatchs.newIndividualObservationBatch();
222 }
223
224
225
226
227
228 @Override
229 public Integer getBatchId() {
230 return editObject.getBatchId();
231 }
232
233 @Override
234 public void setBatchId(Integer batchId) {
235 editObject.setBatchId(batchId);
236 }
237
238 @Override
239 public FishingOperation getFishingOperation() {
240 return editObject.getFishingOperation();
241 }
242
243 @Override
244 public void setFishingOperation(FishingOperation fishingOperation) {
245 editObject.setFishingOperation(fishingOperation);
246 }
247
248 @Override
249 public Float getWeight() {
250 return editObject.getWeight();
251 }
252
253 @Override
254 public void setWeight(Float weight) {
255 Float oldValue = getWeight();
256 editObject.setWeight(weight);
257 firePropertyChange(PROPERTY_WEIGHT, oldValue, weight);
258 }
259
260 public boolean withWeight() {
261 return getWeight() != null;
262 }
263
264 @Override
265 public Species getSpecies() {
266 return editObject.getSpecies();
267 }
268
269 @Override
270 public void setSpecies(Species species) {
271 Object oldValue = getSpecies();
272 editObject.setSpecies(species);
273 firePropertyChange(PROPERTY_SPECIES, oldValue, species);
274 }
275
276 @Override
277 public Float getSize() {
278 return editObject.getSize();
279 }
280
281 @Override
282 public void setSize(Float size) {
283 Float oldValue = getSize();
284 editObject.setSize(size);
285 firePropertyChange(PROPERTY_SIZE, oldValue, size);
286 }
287
288 public boolean withSize() {
289 return getSize() != null;
290 }
291
292 @Override
293 public Caracteristic getLengthStepCaracteristic() {
294 return editObject.getLengthStepCaracteristic();
295 }
296
297 @Override
298 public void setLengthStepCaracteristic(Caracteristic lengthStepCaracteristic) {
299 Object oldValue = getLengthStepCaracteristic();
300 editObject.setLengthStepCaracteristic(lengthStepCaracteristic);
301 firePropertyChange(PROPERTY_LENGTH_STEP_CARACTERISTIC, oldValue, lengthStepCaracteristic);
302 }
303
304 @Override
305 public CaracteristicMap getCaracteristics() {
306 return editObject.getCaracteristics();
307 }
308
309 @Override
310 public void setCaracteristics(CaracteristicMap caracteristics) {
311 Object oldValue = getCaracteristics();
312 editObject.setCaracteristics(caracteristics);
313 firePropertyChange(PROPERTY_CARACTERISTICS, oldValue, caracteristics);
314 }
315
316 @Override
317 public String getComment() {
318 return editObject.getComment();
319 }
320
321 @Override
322 public void setComment(String comment) {
323 Object oldValue = getComment();
324 editObject.setComment(comment);
325 firePropertyChange(PROPERTY_COMMENT, oldValue, comment);
326 }
327
328 @Override
329 public Integer getRankOrder() {
330 return editObject.getRankOrder();
331 }
332
333 @Override
334 public void setRankOrder(Integer rankOrder) {
335 editObject.setRankOrder(rankOrder);
336 }
337
338 @Override
339 public String getSynchronizationStatus() {
340 return editObject.getSynchronizationStatus();
341 }
342
343 @Override
344 public void setSynchronizationStatus(String synchronizationStatus) {
345 String oldValue = getSynchronizationStatus();
346 editObject.setSynchronizationStatus(synchronizationStatus);
347 firePropertyChange(PROPERTY_SYNCHRONIZATION_STATUS, oldValue, synchronizationStatus);
348 }
349
350 @Override
351 public CopyIndividualObservationMode getCopyIndividualObservationMode() {
352 return editObject.getCopyIndividualObservationMode();
353 }
354
355 @Override
356 public void setCopyIndividualObservationMode(CopyIndividualObservationMode copyIndividualObservationMode) {
357 editObject.setCopyIndividualObservationMode(copyIndividualObservationMode);
358 }
359
360 @Override
361 public String getSamplingCode() {
362 return editObject.getSamplingCode();
363 }
364
365 @Override
366 public void setSamplingCode(String samplingCode) {
367 Object oldValue = getSamplingCode();
368 editObject.setSamplingCode(samplingCode);
369 firePropertyChange(PROPERTY_SAMPLING_CODE, oldValue, samplingCode);
370 }
371
372 public Integer getSamplingCodeId() {
373 return SamplingCodePrefix.extractSamplingCodeIdFromSamplingCode(getSamplingCode());
374 }
375
376
377
378
379
380
381
382
383
384 public boolean withSamplingCode() {
385 return StringUtils.isNotBlank(getSamplingCode());
386 }
387
388
389
390
391
392
393
394
395
396 @Override
397 public ObjectTypeCode getObjectType() {
398 return ObjectTypeCode.SAMPLE;
399 }
400
401 @Override
402 public Integer getObjectId() {
403 return getIdAsInt();
404 }
405
406 @Override
407 public List<Attachment> getAttachment() {
408 return attachment;
409 }
410
411 @Override
412 public void addAllAttachment(Collection<Attachment> attachments) {
413 this.attachment.addAll(attachments);
414 firePropertyChange(PROPERTY_ATTACHMENT, null, getAttachment());
415 }
416
417 @Override
418 public void addAttachment(Attachment attachment) {
419 this.attachment.add(attachment);
420 firePropertyChange(PROPERTY_ATTACHMENT, null, getAttachment());
421 }
422
423 @Override
424 public void removeAllAttachment(Collection<Attachment> attachments) {
425 this.attachment.removeAll(attachments);
426 firePropertyChange(PROPERTY_ATTACHMENT, null, getAttachment());
427 }
428
429 @Override
430 public void removeAttachment(Attachment attachment) {
431 this.attachment.remove(attachment);
432 firePropertyChange(PROPERTY_ATTACHMENT, null, getAttachment());
433 }
434
435 public boolean isEmpty() {
436 return isEmpty(Collections.emptySet());
437 }
438
439 public boolean isEmpty(Collection<Caracteristic> caracteristicsToIgnore) {
440 return getSize() == null
441 && getWeight() == null
442 && (getCaracteristics() == null || !getCaracteristics().hasNonNullValues(caracteristicsToIgnore))
443 && (getDefaultCaracteristics() == null || !getDefaultCaracteristics().hasNonNullValues(caracteristicsToIgnore))
444 && StringUtils.isBlank(getSamplingCode())
445 && getComment() == null
446 && (getAttachment() == null || getAttachment().isEmpty());
447 }
448
449 public void copy(IndividualObservationBatchRowModel source) {
450 setId(source.getId());
451 setLengthStepCaracteristic(source.getLengthStepCaracteristic());
452 setSize(source.getSize());
453 setWeight(source.getWeight());
454 setBatchId(source.getBatchId());
455 setCaracteristics(source.getCaracteristics());
456 setDefaultCaracteristics(source.getDefaultCaracteristics());
457 setComment(source.getComment());
458 setSamplingCode(source.getSamplingCode());
459 setCopyIndividualObservationMode(source.getCopyIndividualObservationMode());
460 addAllAttachment(source.getAttachment());
461 }
462
463 public CaracteristicQualitativeValue getCaracteristicQualitativeValue(Caracteristic caracteristic) {
464 CaracteristicQualitativeValue result = null;
465 if (caracteristic != null) {
466 result = getCaracteristics().getQualitativeValue(caracteristic);
467 if (result == null) {
468 result = defaultCaracteristics.getQualitativeValue(caracteristic);
469 }
470 }
471 return result;
472 }
473
474 public boolean computeValid() {
475 return computeValid(withSize(), withWeight());
476 }
477
478 public boolean computeValid(boolean withSize, boolean withWeight) {
479 CopyIndividualObservationMode copyIndividualObservationMode = getCopyIndividualObservationMode();
480 return copyIndividualObservationMode == CopyIndividualObservationMode.NOTHING
481 || (copyIndividualObservationMode == CopyIndividualObservationMode.SIZE && withSize)
482 || (copyIndividualObservationMode == CopyIndividualObservationMode.ALL && withSize && withWeight);
483 }
484
485 }