1 package fr.ifremer.dali.dao.data.measurement;
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 com.google.common.collect.Lists;
27 import fr.ifremer.dali.dao.administration.user.DaliDepartmentDao;
28 import fr.ifremer.dali.dao.referential.pmfm.DaliPmfmDao;
29 import fr.ifremer.dali.dao.referential.pmfm.DaliQualitativeValueDao;
30 import fr.ifremer.dali.dao.referential.taxon.DaliTaxonGroupDao;
31 import fr.ifremer.dali.dao.referential.taxon.DaliTaxonNameDao;
32 import fr.ifremer.dali.dao.technical.Daos;
33 import fr.ifremer.dali.dto.DaliBeanFactory;
34 import fr.ifremer.dali.dto.DaliBeans;
35 import fr.ifremer.dali.dto.data.measurement.MeasurementDTO;
36 import fr.ifremer.dali.service.DaliDataContext;
37 import fr.ifremer.quadrige3.core.dao.administration.program.Program;
38 import fr.ifremer.quadrige3.core.dao.administration.user.DepartmentImpl;
39 import fr.ifremer.quadrige3.core.dao.data.measurement.Measurement;
40 import fr.ifremer.quadrige3.core.dao.data.measurement.MeasurementDaoImpl;
41 import fr.ifremer.quadrige3.core.dao.data.measurement.TaxonMeasurement;
42 import fr.ifremer.quadrige3.core.dao.data.measurement.TaxonMeasurementDao;
43 import fr.ifremer.quadrige3.core.dao.data.samplingoperation.SamplingOperation;
44 import fr.ifremer.quadrige3.core.dao.data.samplingoperation.SamplingOperationImpl;
45 import fr.ifremer.quadrige3.core.dao.data.survey.Survey;
46 import fr.ifremer.quadrige3.core.dao.data.survey.SurveyImpl;
47 import fr.ifremer.quadrige3.core.dao.referential.ObjectTypeImpl;
48 import fr.ifremer.quadrige3.core.dao.referential.QualityFlag;
49 import fr.ifremer.quadrige3.core.dao.referential.QualityFlagCode;
50 import fr.ifremer.quadrige3.core.dao.referential.QualityFlagImpl;
51 import fr.ifremer.quadrige3.core.dao.referential.pmfm.PmfmImpl;
52 import fr.ifremer.quadrige3.core.dao.referential.pmfm.QualitativeValueImpl;
53 import fr.ifremer.quadrige3.core.dao.referential.taxon.ReferenceTaxonImpl;
54 import fr.ifremer.quadrige3.core.dao.referential.taxon.TaxonGroupImpl;
55 import fr.ifremer.quadrige3.core.dao.technical.Assert;
56 import org.apache.commons.collections4.CollectionUtils;
57 import org.apache.commons.lang3.ArrayUtils;
58 import org.apache.commons.lang3.StringUtils;
59 import org.hibernate.Query;
60 import org.hibernate.SessionFactory;
61 import org.hibernate.type.DateType;
62 import org.hibernate.type.IntegerType;
63 import org.springframework.beans.factory.annotation.Autowired;
64 import org.springframework.stereotype.Repository;
65
66 import javax.annotation.Resource;
67 import java.util.*;
68
69
70
71
72
73
74 @Repository("daliMeasurementDao")
75 public class DaliMeasurementDaoImpl extends MeasurementDaoImpl implements DaliMeasurementDao {
76
77 @Resource(name = "daliPmfmDao")
78 protected DaliPmfmDao pmfmDao;
79
80 @Resource(name = "daliQualitativeValueDao")
81 private DaliQualitativeValueDao qualitativeValueDao;
82
83 @Resource(name = "daliTaxonGroupDao")
84 private DaliTaxonGroupDao taxonGroupDao;
85
86 @Resource(name = "daliTaxonNameDao")
87 private DaliTaxonNameDao taxonNameDao;
88
89 @Resource(name = "taxonMeasurementDao")
90 private TaxonMeasurementDao taxonMeasurementDao;
91
92 @Resource(name = "daliDepartmentDao")
93 protected DaliDepartmentDao departmentDao;
94
95 @Resource(name = "daliDataContext")
96 private DaliDataContext dataContext;
97
98
99
100
101
102
103 @Autowired
104 public DaliMeasurementDaoImpl(SessionFactory sessionFactory) {
105 super(sessionFactory);
106 }
107
108
109
110
111 @Override
112 public Measurement getMeasurementEntityBySurveyId(int surveyId, int pmfmId, boolean createIfNotExists) {
113
114 Measurement measurement = queryUniqueTyped("measurementEntityBySurveyId",
115 "surveyId", IntegerType.INSTANCE, surveyId,
116 "pmfmId", IntegerType.INSTANCE, pmfmId);
117
118 if (measurement == null && createIfNotExists) {
119 measurement = Measurement.Factory.newInstance(surveyId,
120 load(ObjectTypeImpl.class, Daos.SURVEY_OBJECT_TYPE),
121 getDefaultQualityFlag(),
122 load(PmfmImpl.class, pmfmId));
123
124
125 measurement.setSurvey(load(SurveyImpl.class, surveyId));
126 }
127
128 return measurement;
129 }
130
131
132
133
134 @Override
135 public void removeMeasurementBySurveyId(int surveyId, int pmfmId) {
136
137 queryUpdate("deleteMeasurementsBySurveyId",
138 "surveyId", IntegerType.INSTANCE, surveyId,
139 "pmfmId", IntegerType.INSTANCE, pmfmId);
140 }
141
142
143
144
145 @Override
146 public List<MeasurementDTO> getMeasurementsBySurveyId(int surveyId, Integer... excludePmfmId) {
147
148
149 List<MeasurementDTO> result = getMeasurementsByParentId("measurementsBySurveyId", "surveyId", surveyId, excludePmfmId);
150 result.addAll(getMeasurementsByParentId("taxonMeasurementsBySurveyId", "surveyId", surveyId, excludePmfmId));
151 return result;
152 }
153
154
155
156
157 @Override
158 public List<MeasurementDTO> getMeasurementsBySamplingOperationId(int samplingOperationId, boolean withTaxonMeasurements, Integer... excludePmfmId) {
159
160
161 List<MeasurementDTO> result = getMeasurementsByParentId("measurementsBySamplingOperationId", "samplingOperationId", samplingOperationId, excludePmfmId);
162 if (withTaxonMeasurements) {
163 result.addAll(getMeasurementsByParentId("taxonMeasurementsBySamplingOperationId", "samplingOperationId", samplingOperationId, excludePmfmId));
164 }
165 return result;
166 }
167
168
169
170
171 @Override
172 public void saveMeasurementsBySurveyId(int surveyId, Collection<MeasurementDTO> measurements, Integer... excludePmfmId) {
173
174
175 List<Integer> existingMeasurementIds = DaliBeans.collectIds(getMeasurementsByParentId("measurementsBySurveyId", "surveyId", surveyId, excludePmfmId));
176 List<Integer> existingTaxonMeasurementIds = DaliBeans.collectIds(getMeasurementsByParentId("taxonMeasurementsBySurveyId", "surveyId", surveyId, excludePmfmId));
177
178 Survey survey = get(SurveyImpl.class, surveyId);
179
180 if (CollectionUtils.isNotEmpty(measurements)) {
181 for (MeasurementDTO measurement : measurements) {
182
183 Assert.notNull(measurement.getPmfm(), "measurement must have a pmfm");
184
185
186 if (excludePmfmId != null && Arrays.asList(excludePmfmId).contains(measurement.getPmfm().getId())) {
187 continue;
188 }
189
190 if (DaliBeans.isTaxonMeasurement(measurement)) {
191
192 if (saveSurveyTaxonMeasurement(survey, measurement)) {
193
194 existingTaxonMeasurementIds.remove(measurement.getId());
195 }
196 } else {
197
198 if (saveSurveyMeasurement(survey, measurement)) {
199
200 existingMeasurementIds.remove(measurement.getId());
201 }
202 }
203
204 }
205 }
206
207
208 removeMeasurementsByIds(existingMeasurementIds);
209 removeTaxonMeasurementsByIds(existingTaxonMeasurementIds);
210 }
211
212
213
214
215 @Override
216 public void saveMeasurementsBySamplingOperationId(int samplingOperationId, Collection<MeasurementDTO> measurements, boolean withIndividual, Integer... excludePmfmId) {
217 List<Integer> existingMeasurementIds = DaliBeans.collectIds(getMeasurementsByParentId("measurementsBySamplingOperationId", "samplingOperationId", samplingOperationId, excludePmfmId));
218 List<Integer> existingTaxonMeasurementIds = DaliBeans.collectIds(getMeasurementsByParentId("taxonMeasurementsBySamplingOperationId", "samplingOperationId", samplingOperationId, excludePmfmId));
219
220 SamplingOperation samplingOperation = get(SamplingOperationImpl.class, samplingOperationId);
221
222 if (CollectionUtils.isNotEmpty(measurements)) {
223 for (MeasurementDTO measurement : measurements) {
224
225 Assert.notNull(measurement.getPmfm(), "measurement must have a pmfm");
226
227
228 if (excludePmfmId != null && Arrays.asList(excludePmfmId).contains(measurement.getPmfm().getId())) {
229 continue;
230 }
231
232 if (DaliBeans.isTaxonMeasurement(measurement)) {
233
234 if (saveSamplingOperationTaxonMeasurement(samplingOperation, measurement)) {
235
236 existingTaxonMeasurementIds.remove(measurement.getId());
237 }
238 } else {
239
240 if (saveSamplingOperationMeasurement(samplingOperation, measurement)) {
241
242 existingMeasurementIds.remove(measurement.getId());
243 }
244 }
245 }
246 }
247
248
249 if (withIndividual) {
250
251
252 removeMeasurementsByIds(existingMeasurementIds);
253 removeTaxonMeasurementsByIds(existingTaxonMeasurementIds);
254
255 } else {
256
257
258 existingMeasurementIds.stream().distinct().forEach(measurementId -> {
259 Measurement measurement = get(measurementId);
260 if (measurement != null && measurement.getMeasIndivId() == null) {
261 remove(measurement);
262 }
263 });
264 existingTaxonMeasurementIds.stream().distinct().forEach(taxonMeasurementId -> {
265 TaxonMeasurement taxonMeasurement = taxonMeasurementDao.get(taxonMeasurementId);
266 if (taxonMeasurement != null && taxonMeasurement.getTaxonMeasIndivId() == null) {
267 taxonMeasurementDao.remove(taxonMeasurement);
268 }
269 });
270 }
271 }
272
273
274
275
276 @Override
277 public void removeMeasurementsByIds(Collection<Integer> measurementIds) {
278 if (measurementIds == null) return;
279
280 measurementIds.stream().distinct().forEach(this::remove);
281 }
282
283
284
285
286 @Override
287 public void removeTaxonMeasurementsByIds(Collection<Integer> taxonMeasurementIds) {
288 if (taxonMeasurementIds == null) return;
289
290 taxonMeasurementIds.stream().distinct().forEach(taxonMeasurementId -> taxonMeasurementDao.remove(taxonMeasurementId));
291 }
292
293
294
295
296 @Override
297 public void removeAllMeasurementsBySurveyId(int surveyId) {
298
299
300 queryUpdate("deleteMeasurementsBySurveyId",
301 "surveyId", IntegerType.INSTANCE, surveyId,
302 "pmfmId", IntegerType.INSTANCE, null);
303
304
305 queryUpdate("deleteTaxonMeasurementsBySurveyId", "surveyId", IntegerType.INSTANCE, surveyId,
306 "pmfmId", IntegerType.INSTANCE, null);
307 }
308
309
310
311
312 @Override
313 public void removeAllMeasurementsBySamplingOperationId(int samplingOperationId) {
314
315
316 queryUpdate("deleteMeasurementsBySamplingOperationId", "samplingOperationId", IntegerType.INSTANCE, samplingOperationId,
317 "pmfmId", IntegerType.INSTANCE, null);
318
319
320 queryUpdate("deleteTaxonMeasurementsBySamplingOperationId", "samplingOperationId", IntegerType.INSTANCE, samplingOperationId,
321 "pmfmId", IntegerType.INSTANCE, null);
322 }
323
324 @Override
325 public int validateAllMeasurementsBySurveyIds(Collection<Integer> surveyIds, Date validationDate) {
326 int nbUpdates = createQuery("validateSurveyMeasurementsBySurveyIds",
327 "validationDate", DateType.INSTANCE, validationDate)
328 .setParameterList("surveyIds", surveyIds).executeUpdate();
329 nbUpdates += createQuery("validateSamplingOperationMeasurementsBySurveyIds",
330 "validationDate", DateType.INSTANCE, validationDate)
331 .setParameterList("surveyIds", surveyIds).executeUpdate();
332 nbUpdates += createQuery("validateSurveyTaxonMeasurementsBySurveyIds",
333 "validationDate", DateType.INSTANCE, validationDate)
334 .setParameterList("surveyIds", surveyIds).executeUpdate();
335 nbUpdates += createQuery("validateSamplingOperationTaxonMeasurementsBySurveyIds",
336 "validationDate", DateType.INSTANCE, validationDate)
337 .setParameterList("surveyIds", surveyIds).executeUpdate();
338 return nbUpdates;
339 }
340
341 @Override
342 public int unvalidateAllMeasurementsBySurveyIds(Collection<Integer> surveyIds) {
343 int nbUpdates = createQuery("unvalidateSurveyMeasurementsBySurveyIds")
344 .setParameterList("surveyIds", surveyIds).executeUpdate();
345 nbUpdates += createQuery("unvalidateSamplingOperationMeasurementsBySurveyIds")
346 .setParameterList("surveyIds", surveyIds).executeUpdate();
347 nbUpdates += createQuery("unvalidateSurveyTaxonMeasurementsBySurveyIds")
348 .setParameterList("surveyIds", surveyIds).executeUpdate();
349 nbUpdates += createQuery("unvalidateSamplingOperationTaxonMeasurementsBySurveyIds")
350 .setParameterList("surveyIds", surveyIds).executeUpdate();
351 return nbUpdates;
352 }
353
354 @Override
355 public int qualifyAllMeasurementsBySurveyIds(List<Integer> surveyIds, Date qualificationDate) {
356 int nbUpdates = createQuery("qualifySurveyMeasurementsBySurveyIds",
357 "qualificationDate", DateType.INSTANCE, qualificationDate)
358 .setParameterList("surveyIds", surveyIds).executeUpdate();
359 nbUpdates += createQuery("qualifySamplingOperationMeasurementsBySurveyIds",
360 "qualificationDate", DateType.INSTANCE, qualificationDate)
361 .setParameterList("surveyIds", surveyIds).executeUpdate();
362 nbUpdates += createQuery("qualifySurveyTaxonMeasurementsBySurveyIds",
363 "qualificationDate", DateType.INSTANCE, qualificationDate)
364 .setParameterList("surveyIds", surveyIds).executeUpdate();
365 nbUpdates += createQuery("qualifySamplingOperationTaxonMeasurementsBySurveyIds",
366 "qualificationDate", DateType.INSTANCE, qualificationDate)
367 .setParameterList("surveyIds", surveyIds).executeUpdate();
368 return nbUpdates;
369 }
370
371
372
373
374 @Override
375 public void updateMeasurementsControlDate(Collection<Integer> measurementIds, Date controlDate) {
376 createQuery("updateMeasurementControlDate")
377 .setParameterList("measurementIds", measurementIds)
378 .setParameter("controlDate", controlDate).executeUpdate();
379 }
380
381
382
383
384 @Override
385 public void updateTaxonMeasurementsControlDate(Collection<Integer> taxonMeasurementIds, Date controlDate) {
386 createQuery("updateTaxonMeasurementControlDate")
387 .setParameterList("taxonMeasurementIds", taxonMeasurementIds)
388 .setParameter("controlDate", controlDate).executeUpdate();
389 }
390
391
392 @SuppressWarnings("unchecked")
393 private List<MeasurementDTO> getMeasurementsByParentId(String queryName, String parentParameter, int parentId, Integer... excludePmfmIds) {
394
395 Query query = createQuery(queryName, parentParameter, IntegerType.INSTANCE, parentId);
396
397 List<Integer> pmfmIdsToExclude = ArrayUtils.isEmpty(excludePmfmIds) ? Lists.newArrayList(0) : Lists.newArrayList(excludePmfmIds);
398 query.setParameterList("pmfmIds", pmfmIdsToExclude);
399
400 Iterator<Object[]> it = query.iterate();
401
402 List<MeasurementDTO> result = Lists.newArrayList();
403
404 while (it.hasNext()) {
405 Object[] row = it.next();
406 result.add(toMeasurement(Arrays.asList(row).iterator()));
407 }
408
409 return result;
410 }
411
412 private boolean saveSurveyMeasurement(Survey survey, MeasurementDTO measurement) {
413
414 return saveMeasurement(measurement, survey, null);
415 }
416
417 private boolean saveSurveyTaxonMeasurement(Survey survey, MeasurementDTO measurement) {
418
419 return saveTaxonMeasurement(measurement, survey, null);
420 }
421
422 private boolean saveSamplingOperationMeasurement(SamplingOperation samplingOperation, MeasurementDTO measurement) {
423
424 return saveMeasurement(measurement, null, samplingOperation);
425 }
426
427 private boolean saveSamplingOperationTaxonMeasurement(SamplingOperation samplingOperation, MeasurementDTO measurement) {
428
429 return saveTaxonMeasurement(measurement, null, samplingOperation);
430
431 }
432
433
434
435
436
437
438
439
440
441 private boolean saveMeasurement(MeasurementDTO measurement, Survey survey, SamplingOperation samplingOperation) {
442
443 if (DaliBeans.isMeasurementEmpty(measurement)) {
444 return false;
445 }
446
447 Integer objectId;
448 String objectType;
449 Collection<Program> programs;
450
451 if (survey != null) {
452 Assert.isNull(samplingOperation, "if a survey is provided, samplingOperation must be null");
453 objectId = survey.getSurveyId();
454 objectType = Daos.SURVEY_OBJECT_TYPE;
455 programs = survey.getPrograms();
456 } else {
457 Assert.notNull(samplingOperation, "if a samplingOperation is provided, survey must be null");
458 objectId = samplingOperation.getSamplingOperId();
459 objectType = Daos.SAMPLING_OPERATION_OBJECT_TYPE;
460 programs = samplingOperation.getPrograms();
461 }
462
463 Measurement target;
464 if (measurement.getId() == null || measurement.getId() < 0) {
465 target = Measurement.Factory.newInstance();
466 } else {
467 target = get(measurement.getId());
468 }
469
470 target.setObjectType(load(ObjectTypeImpl.class, objectType));
471 target.setObjectId(objectId);
472
473
474 target.setSurvey(survey);
475
476 target.setSamplingOperation(samplingOperation);
477
478 if (CollectionUtils.isNotEmpty(programs)) {
479 for (Program program : programs) {
480 target.addPrograms(program);
481 }
482 }
483
484
485 if (target.getRecorderDepartment() == null) {
486 target.setRecorderDepartment(load(DepartmentImpl.class, dataContext.getRecorderDepartmentId()));
487 }
488
489 target.setQualityFlag(getDefaultQualityFlag());
490 target.setPmfm(load(PmfmImpl.class, measurement.getPmfm().getId()));
491 target.setMeasIndivId(measurement.getIndividualId());
492 target.setMeasCm(measurement.getComment());
493
494 if (measurement.getAnalyst() != null) {
495 target.setDepartment(load(DepartmentImpl.class, measurement.getAnalyst().getId()));
496 } else {
497 target.setDepartment(null);
498 }
499
500 if (measurement.getPmfm().getParameter().isQualitative() && measurement.getQualitativeValue() != null) {
501
502 target.setQualitativeValue(load(QualitativeValueImpl.class, measurement.getQualitativeValue().getId()));
503 target.setMeasNumerValue(null);
504 target.setMeasDigitNumber(null);
505 target.setMeasPrecisionValue(null);
506 } else {
507
508 target.setMeasNumerValue(measurement.getNumericalValue() == null ? null : measurement.getNumericalValue().floatValue());
509 target.setMeasPrecisionValue(measurement.getPrecision() == null ? null : measurement.getPrecision().floatValue());
510 target.setMeasDigitNumber(measurement.getDigitNb());
511 target.setQualitativeValue(null);
512 }
513
514 getSession().save(target);
515 measurement.setId(target.getMeasId());
516 return true;
517 }
518
519
520
521
522
523
524
525
526
527 private boolean saveTaxonMeasurement(MeasurementDTO measurement, Survey survey, SamplingOperation samplingOperation) {
528
529 if (DaliBeans.isMeasurementEmpty(measurement)) {
530 return false;
531 }
532
533 Integer objectId;
534 String objectType;
535 Collection<Program> programs;
536
537 if (survey != null) {
538 Assert.isNull(samplingOperation, "if a survey is provided, samplingOperation must be null");
539 objectId = survey.getSurveyId();
540 objectType = Daos.SURVEY_OBJECT_TYPE;
541 programs = survey.getPrograms();
542 } else {
543 Assert.notNull(samplingOperation, "if a samplingOperation is provided, survey must be null");
544 objectId = samplingOperation.getSamplingOperId();
545 objectType = Daos.SAMPLING_OPERATION_OBJECT_TYPE;
546 programs = samplingOperation.getPrograms();
547 }
548
549 TaxonMeasurement target;
550 boolean isNew;
551 if (measurement.getId() == null || measurement.getId() < 0) {
552 target = TaxonMeasurement.Factory.newInstance();
553 isNew = true;
554 } else {
555 target = taxonMeasurementDao.get(measurement.getId());
556 isNew = false;
557 }
558
559 target.setObjectType(load(ObjectTypeImpl.class, objectType));
560 target.setObjectId(objectId);
561
562
563 target.setSurvey(survey);
564
565 target.setSamplingOperation(samplingOperation);
566
567 if (CollectionUtils.isNotEmpty(programs)) {
568 for (Program program : programs) {
569 target.addPrograms(program);
570 }
571 }
572
573
574 if (target.getRecorderDepartment() == null) {
575 target.setRecorderDepartment(load(DepartmentImpl.class, dataContext.getRecorderDepartmentId()));
576 }
577
578 target.setQualityFlag(getDefaultQualityFlag());
579 target.setPmfm(load(PmfmImpl.class, measurement.getPmfm().getId()));
580 target.setTaxonMeasIndivId(measurement.getIndividualId());
581 target.setTaxonMeasCm(measurement.getComment());
582
583 if (measurement.getAnalyst() != null) {
584 target.setDepartment(load(DepartmentImpl.class, measurement.getAnalyst().getId()));
585 } else {
586 target.setDepartment(null);
587 }
588
589 if (measurement.getTaxonGroup() == null) {
590 target.setTaxonGroup(null);
591 } else {
592 target.setTaxonGroup(load(TaxonGroupImpl.class, measurement.getTaxonGroup().getId()));
593 }
594
595 if (measurement.getTaxon() == null) {
596 target.setReferenceTaxon(null);
597 } else {
598 target.setReferenceTaxon(load(ReferenceTaxonImpl.class, measurement.getTaxon().getReferenceTaxonId()));
599 }
600
601
602 if (measurement.getTaxon() != null) {
603 if (measurement.getInputTaxonId() == null) {
604 measurement.setInputTaxonId(measurement.getTaxon().getId());
605 }
606 if (StringUtils.isBlank(measurement.getInputTaxonName())) {
607 measurement.setInputTaxonName(measurement.getTaxon().getName());
608 }
609 } else {
610 measurement.setInputTaxonId(null);
611 measurement.setInputTaxonName(null);
612 }
613
614
615 target.setTaxonNameId(measurement.getInputTaxonId());
616 target.setTaxonNameNm(measurement.getInputTaxonName());
617
618 if (measurement.getPmfm().getParameter().isQualitative() && measurement.getQualitativeValue() != null) {
619
620 target.setQualitativeValue(load(QualitativeValueImpl.class, measurement.getQualitativeValue().getId()));
621 target.setTaxonMeasNumerValue(null);
622 target.setTaxonMeasDigitNumber(null);
623 target.setTaxonMeasPrecisionValue(null);
624 } else {
625
626 target.setTaxonMeasNumerValue(measurement.getNumericalValue() == null ? null : measurement.getNumericalValue().floatValue());
627 target.setTaxonMeasPrecisionValue(measurement.getPrecision() == null ? null : measurement.getPrecision().floatValue());
628 target.setTaxonMeasDigitNumber(measurement.getDigitNb());
629 target.setQualitativeValue(null);
630 }
631
632
633 if (isNew) {
634 getSession().save(target);
635
636 measurement.setId(target.getTaxonMeasId());
637 } else {
638 getSession().update(target);
639 }
640
641 return true;
642 }
643
644
645
646
647
648
649 private QualityFlag getDefaultQualityFlag() {
650 return load(QualityFlagImpl.class, QualityFlagCode.NOT_QUALIFIED.getValue());
651 }
652
653 private MeasurementDTO toMeasurement(Iterator<Object> it) {
654 MeasurementDTO result = DaliBeanFactory.newMeasurementDTO();
655 Integer pmfmId = (Integer) it.next();
656 Assert.notNull(pmfmId);
657 result.setPmfm(pmfmDao.getPmfmById(pmfmId));
658 result.setId((Integer) it.next());
659 Double value = Daos.convertToDouble((Float) it.next());
660 result.setPrecision(Daos.convertToInteger((Number) it.next()));
661 result.setDigitNb(Daos.convertToInteger((Number) it.next()));
662
663
664 result.setNumericalValue(Daos.convertToBigDecimal(value, result.getDigitNb()));
665
666 result.setIndividualId((Integer) it.next());
667 result.setComment((String) it.next());
668 result.setControlDate(Daos.convertToDate(it.next()));
669 result.setValidationDate(Daos.convertToDate(it.next()));
670 result.setQualificationDate(Daos.convertToDate(it.next()));
671 result.setQualificationComment((String) it.next());
672 Integer departmentId = (Integer) it.next();
673 if (departmentId != null) {
674 result.setAnalyst(departmentDao.getDepartmentById(departmentId));
675 }
676 Integer qualitativeValueId = (Integer) it.next();
677 if (qualitativeValueId != null) {
678 result.setQualitativeValue(qualitativeValueDao.getQualitativeValueById(qualitativeValueId));
679 }
680 if (it.hasNext()) {
681
682
683 Integer taxonGroupId = (Integer) it.next();
684 if (taxonGroupId != null) {
685 result.setTaxonGroup(taxonGroupDao.getTaxonGroupById(taxonGroupId));
686 }
687 Integer refTaxonId = (Integer) it.next();
688 if (refTaxonId != null) {
689 result.setTaxon(taxonNameDao.getTaxonNameByReferenceId(refTaxonId));
690 }
691
692 result.setInputTaxonId((Integer) it.next());
693 result.setInputTaxonName((String) it.next());
694 }
695 return result;
696 }
697
698 }