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.protocol.TuttiProtocol;
28  import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols;
29  import fr.ifremer.tutti.persistence.entities.referential.Species;
30  import fr.ifremer.tutti.service.genericformat.GenericFormatArchive;
31  import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport;
32  import fr.ifremer.tutti.service.genericformat.GenericFormatFileResult;
33  import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper;
34  import org.apache.commons.logging.Log;
35  import org.apache.commons.logging.LogFactory;
36  import org.nuiton.jaxx.application.ApplicationTechnicalException;
37  
38  import java.util.List;
39  import java.util.Map;
40  
41  import static org.nuiton.i18n.I18n.t;
42  
43  /**
44   * Created on 3/3/15.
45   *
46   * @author Tony Chemit - chemit@codelutin.com
47   * @since 3.14
48   */
49  public class ImportProtocolAction extends ImportActionSupport {
50  
51      /** Logger. */
52      private static final Log log = LogFactory.getLog(ImportProtocolAction.class);
53  
54      private final GenericformatImportPersistenceHelper persistenceHelper;
55  
56      public ImportProtocolAction(GenericFormatContextSupport importContext, GenericformatImportPersistenceHelper persistenceHelper) {
57          super(importContext);
58          this.persistenceHelper = persistenceHelper;
59      }
60  
61      @Override
62      protected boolean canExecute() {
63          return importContext.getReferentialTemporarySpeciesFileResult().isValid()
64                 && importContext.getProtocolFileResult().isFound();
65      }
66  
67      @Override
68      protected void skipExecute() {
69  
70          if (log.isInfoEnabled()) {
71              log.info("Skip import protocol (no file found or archive is not valid).");
72          }
73  
74          importContext.increments(t("tutti.service.genericFormat.skip.import.protocol"));
75  
76      }
77  
78      @Override
79      protected void doExecute() {
80  
81          GenericFormatArchive archive = importContext.getImportRequest().getArchive();
82  
83          if (log.isInfoEnabled()) {
84              log.info("Import protocol.");
85          }
86          GenericFormatFileResult fileResult = importContext.getProtocolFileResult();
87          fileResult.setImported(true);
88  
89          try {
90  
91              TuttiProtocol tuttiProtocol = persistenceHelper.importProtocol(archive.getProtocolPath().toFile());
92  
93              // get id translations
94              Map<Integer, Integer> referenceTaxonIdMap = importContext.getReferentialTemporarySpeciesFileResult().getReferenceTaxonIdTranslationMap();
95  
96              TuttiProtocols.translateReferenceTaxonIds(tuttiProtocol, referenceTaxonIdMap);
97  
98              String protocolOriginalName = tuttiProtocol.getName();
99  
100             String newName = persistenceHelper.getProtocolFirstAvailableName(protocolOriginalName);
101             tuttiProtocol.setName(newName);
102 
103             List<Species> referentSpecies = persistenceHelper.getAllReferentSpecies();
104 
105             // Check missing species
106             Map<Integer, String> missingSpecies = TuttiProtocols.detectMissingSpecies(tuttiProtocol, referentSpecies);
107             if (!missingSpecies.isEmpty()) {
108 
109                 String message = TuttiProtocols.getBadSpeciesMessage(missingSpecies);
110                 fileResult.addGlobalError(message);
111             }
112 
113             // Check missing benthos
114             Map<Integer, String> missingBenthos = TuttiProtocols.detectMissingBenthos(tuttiProtocol, referentSpecies);
115             if (!missingBenthos.isEmpty()) {
116 
117                 String message = TuttiProtocols.getBadBenthosMessage(missingBenthos);
118                 fileResult.addGlobalError(message);
119 
120             }
121 
122             // TODO Check lenghtClassPmfm ?
123 
124             if (fileResult.isValid()) {
125 
126                 importContext.increments(t("tutti.service.genericFormat.import.protocol", protocolOriginalName));
127 
128                 tuttiProtocol = persistenceHelper.createProtocol(tuttiProtocol);
129 
130                 importContext.setImportedProtocol(tuttiProtocol);
131                 importContext.setProtocolOriginalName(protocolOriginalName);
132 
133             } else {
134 
135                 importContext.increments(t("tutti.service.genericFormat.import.protocol.notValid", protocolOriginalName));
136 
137             }
138 
139         } catch (ApplicationTechnicalException e) {
140 
141             fileResult.addGlobalError(e.getCause().getMessage());
142 
143         }
144 
145     }
146 }