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.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
45
46
47
48
49 public class ImportProtocolAction extends ImportActionSupport {
50
51
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
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
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
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
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 }