View Javadoc
1   package fr.ifremer.tutti.service.genericformat.consumer;
2   
3   /*
4    * #%L
5    * Tutti :: Service
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2012 - 2015 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU General Public License as
13   * published by the Free Software Foundation, either version 3 of the
14   * License, or (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU General Public
22   * License along with this program.  If not, see
23   * <http://www.gnu.org/licenses/gpl-3.0.html>.
24   * #L%
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   * Created on 2/11/15.
48   *
49   * @author Tony Chemit - chemit@codelutin.com
50   * @since 3.14
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 }