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.data.Cruise;
28 import fr.ifremer.tutti.persistence.entities.data.Program;
29 import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrder;
30 import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrders;
31 import fr.ifremer.tutti.persistence.model.CruiseDataModel;
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.GenericFormatImportValidationHelper;
36 import fr.ifremer.tutti.service.genericformat.csv.SurveyModel;
37 import fr.ifremer.tutti.service.genericformat.csv.SurveyRow;
38 import org.nuiton.csv.ImportRow;
39 import org.nuiton.validator.NuitonValidatorResult;
40 import org.nuiton.validator.NuitonValidatorScope;
41
42 import java.nio.file.Path;
43 import java.util.List;
44 import java.util.Set;
45
46
47
48
49
50
51
52 public class CsvConsumerForSurvey extends CsvComsumer<SurveyRow, SurveyModel> {
53
54 public CsvConsumerForSurvey(Path file, char separator, GenericFormatImportEntityParserFactory parserFactory, boolean reportError) {
55 super(file, SurveyModel.forImport(separator, parserFactory), reportError);
56 }
57
58 public void validateRow(ImportRow<SurveyRow> row, GenericFormatContextSupport importContext) {
59
60 if (row.isValid()) {
61
62 SurveyRow bean = row.getBean();
63
64 Cruise cruise = bean.getCruise();
65
66 CruiseDataModel existingCruiseData = importContext.getImportRequest().getExistingCruiseData(cruise);
67
68 boolean cruiseExist = existingCruiseData != null;
69
70 if (importContext.isCruiseAlreadyImported(cruise)) {
71
72 addCheckError(row, new CruiseAlreadyExistException(cruise));
73
74 } else {
75
76 if (cruiseExist) {
77
78 cruise.setId(existingCruiseData.getId());
79
80 }
81
82 GenericFormatImportValidationHelper validationHelper = importContext.getValidationHelper();
83 NuitonValidatorResult nuitonValidatorResult = validationHelper.validateCruise(cruise);
84 if (nuitonValidatorResult.hasErrorMessagess()) {
85
86 Set<String> errorMessages = validationHelper.getMessages(nuitonValidatorResult, NuitonValidatorScope.ERROR);
87 addCheckError(row, new CruiseNotValidException(cruise, errorMessages));
88
89 }
90
91 Program program = cruise.getProgram();
92 if (program != null) {
93
94 Program expectedProgram = importContext.getImportRequest().getProgram();
95 if (!expectedProgram.equals(program)) {
96
97 addCheckError(row, new MismatchProgramException(cruise, expectedProgram));
98 }
99 }
100
101 }
102
103 }
104
105 reportError(row);
106
107 }
108
109 public void prepareRowForPersist(ImportRow<SurveyRow> row) {
110
111 Cruise bean = row.getBean().getCruise();
112
113 if (!bean.isGearEmpty()) {
114
115 List gear = bean.getGear();
116 List<GearWithOriginalRankOrder> gearWithOriginalRankOrders = GearWithOriginalRankOrders.toGearWithOriginalRankOrders(gear);
117 bean.setGear(gearWithOriginalRankOrders);
118 }
119
120 }
121
122 }