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