1 package fr.ifremer.tutti.service.genericformat.consumer;
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.IndividualObservationBatch;
29 import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatchs;
30 import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
31 import fr.ifremer.tutti.service.csv.CaracteristicValueParseException;
32 import fr.ifremer.tutti.service.csv.CsvComsumer;
33 import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport;
34 import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory;
35 import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext;
36 import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationModel;
37 import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationRow;
38 import org.apache.commons.logging.Log;
39 import org.apache.commons.logging.LogFactory;
40 import org.nuiton.csv.ImportRow;
41
42 import java.io.Serializable;
43 import java.nio.file.Path;
44
45
46
47
48
49
50
51 public class CsvConsumerForIndividualObservation extends CsvComsumer<IndividualObservationRow, IndividualObservationModel> {
52
53
54 private static final Log log = LogFactory.getLog(CsvConsumerForIndividualObservation.class);
55
56 public CsvConsumerForIndividualObservation(Path file, char separator, GenericFormatImportEntityParserFactory parserFactory, boolean reportError) {
57 super(file, IndividualObservationModel.forImport(separator, parserFactory), reportError);
58 }
59
60 public GenericFormatImportOperationContext validateRow(ImportRow<IndividualObservationRow> row, GenericFormatContextSupport importContext) {
61
62 GenericFormatImportOperationContext operationContext = importContext.getValidationHelper().getFishingOperationContext(this, row, importContext);
63
64 if (operationContext != null) {
65
66 IndividualObservationRow bean = row.getBean();
67
68 Caracteristic caracteristic = bean.getCaracteristic();
69 if (caracteristic == null) {
70 addCheckError(row, new NullPointerException("Caracteristique non définie."));
71 }
72
73 if (bean.getCaracteristicValue() == null) {
74 addCheckError(row, new NullPointerException("Valeur de caracteristique non définie."));
75 }
76
77
78 String value = (String) bean.getCaracteristicValue();
79 try {
80 Serializable serializable = importContext.parseCaracteristicValue(caracteristic, value);
81 bean.setCaracteristicValue(serializable);
82 } catch (CaracteristicValueParseException e) {
83 addCheckError(row, e);
84 }
85
86 }
87
88 reportError(row);
89
90 return operationContext;
91
92 }
93
94 public void prepareRowForPersist(GenericFormatImportOperationContext operationContext, ImportRow<IndividualObservationRow> row) {
95
96 IndividualObservationRow bean = row.getBean();
97 Integer individualObservationBatchId = bean.getId();
98 IndividualObservationBatch batch = operationContext.getIndividualObservationBatchById(individualObservationBatchId);
99 if (batch == null) {
100
101 if (log.isInfoEnabled()) {
102 log.info("Detects individualObservationBatch: " + individualObservationBatchId);
103 }
104
105 batch = IndividualObservationBatchs.newIndividualObservationBatch();
106 batch.setFishingOperation(operationContext.getFishingOperation());
107 batch.setCaracteristics(new CaracteristicMap());
108 batch.setComment(bean.getComment());
109 batch.setSpecies(bean.getSpecies());
110 batch.setId(individualObservationBatchId);
111 batch.setBatchId(bean.getBatchId());
112 batch.setRankOrder(bean.getRankOrder());
113 operationContext.addIndividualObservationBatch(individualObservationBatchId, batch);
114
115 }
116
117 Caracteristic caracteristic = bean.getCaracteristic();
118 Serializable caracteristicValue = bean.getCaracteristicValue();
119 batch.getCaracteristics().put(caracteristic, caracteristicValue);
120
121 }
122
123 }