View Javadoc
1   package fr.ifremer.tutti.service.genericformat.importactions;
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.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   * Created on 3/3/15.
49   *
50   * @author Tony Chemit - chemit@codelutin.com
51   * @since 3.14
52   */
53  public class ImportReferentialSpeciesAction extends ImportActionSupport {
54  
55      /** Logger. */
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             // On ajoute aussi le dictionnaire de taxons référents obsolètes
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 }