1 package fr.ifremer.tutti.service.genericformat.importactions;
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.referential.Species;
28 import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport;
29 import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialSpeciesImportResult;
30 import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper;
31 import fr.ifremer.tutti.service.referential.ReferentialImportRequest;
32 import fr.ifremer.tutti.service.referential.ReferentialImportResult;
33 import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpecies;
34 import fr.ifremer.tutti.service.referential.csv.SpeciesRow;
35 import org.apache.commons.logging.Log;
36 import org.apache.commons.logging.LogFactory;
37 import org.nuiton.csv.ImportRow;
38 import org.nuiton.csv.ImportRuntimeException;
39 import org.nuiton.jaxx.application.ApplicationTechnicalException;
40
41 import java.io.IOException;
42 import java.util.Map;
43 import java.util.TreeMap;
44
45 import static org.nuiton.i18n.I18n.t;
46
47
48
49
50
51
52
53 public class ImportReferentialSpeciesAction extends ImportActionSupport {
54
55
56 private static final Log log = LogFactory.getLog(ImportReferentialSpeciesAction.class);
57
58 private final GenericformatImportPersistenceHelper persistenceHelper;
59
60 public ImportReferentialSpeciesAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) {
61 super(importContext);
62 this.persistenceHelper = persistenceHelper;
63 }
64
65 @Override
66 protected boolean canExecute() {
67 return importContext.getReferentialTemporarySpeciesFileResult().isFound();
68 }
69
70 @Override
71 protected void skipExecute() {
72
73 if (log.isInfoEnabled()) {
74 log.info("Skip import temporary species (no file found).");
75 }
76 importContext.increments(t("tutti.service.genericFormat.skip.import.temporarySpecies"));
77
78 }
79
80 @Override
81 protected void doExecute() {
82
83 importContext.increments(t("tutti.service.genericFormat.import.temporarySpecies"));
84
85 if (log.isInfoEnabled()) {
86 log.info("Import temporary species.");
87 }
88
89 ReferentialImportRequest<Species, Integer> referentialImportRequest = persistenceHelper.createSpeciesImportRequest();
90
91 Map<Integer, Integer> referenceTaxonIdById = new TreeMap<>();
92
93 GenericFormatReferentialSpeciesImportResult importFileResult = importContext.getReferentialTemporarySpeciesFileResult();
94 try (CsvConsumerForTemporarySpecies consumer = importContext.loadTemporarySpecies(false)) {
95 for (ImportRow<SpeciesRow> row : consumer) {
96 consumer.checkRowForGenericFormatImport(row, referentialImportRequest);
97 referenceTaxonIdById.put(row.getBean().getIdAsInt(), row.getBean().getReferenceTaxonId());
98 }
99
100 importFileResult.flushErrors(consumer);
101
102 } catch (IOException e) {
103 throw new ApplicationTechnicalException("Could not close species.csv file", e);
104 } catch (ImportRuntimeException e) {
105
106 importFileResult.addGlobalError(e.getMessage());
107
108 }
109
110 if (importFileResult.isValid()) {
111
112 ReferentialImportResult<Species> referentialImportResult = persistenceHelper.importSpecies(referentialImportRequest);
113 importFileResult.flushResult(referentialImportRequest, referentialImportResult);
114
115
116 importFileResult.flushObsoleteReferenceTaxonIds(persistenceHelper.getAllObsoleteReferentTaxons());
117
118 importFileResult.flushReferenceTaxonIds(referenceTaxonIdById);
119
120 if (log.isInfoEnabled()) {
121 log.info("Temporary species import result: " + importFileResult.getReport());
122 }
123
124 } else {
125
126 if (log.isWarnEnabled()) {
127 log.warn("Do not import temporary species (the incoming file is not valid)");
128 }
129
130 }
131
132
133 }
134 }