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.adagio.core.dao.referential.ObjectTypeCode;
28 import fr.ifremer.tutti.persistence.ProgressionModel;
29 import fr.ifremer.tutti.persistence.entities.data.FishingOperation;
30 import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch;
31 import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult;
32 import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext;
33 import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext;
34 import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext;
35 import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelper;
36 import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForMarineLitter;
37 import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow;
38 import fr.ifremer.tutti.service.genericformat.csv.MarineLitterRow;
39 import org.apache.commons.logging.Log;
40 import org.apache.commons.logging.LogFactory;
41 import org.nuiton.csv.ImportRow;
42 import org.nuiton.csv.ImportRuntimeException;
43 import org.nuiton.jaxx.application.ApplicationTechnicalException;
44
45 import java.io.IOException;
46 import java.util.Collection;
47
48 import static org.nuiton.i18n.I18n.t;
49
50
51
52
53
54
55
56 public class ImportMarineLitterAction extends ImportActionSupport {
57
58
59 private static final Log log = LogFactory.getLog(ImportMarineLitterAction.class);
60
61 private final GenericformatImportPersistenceHelper persistenceHelper;
62
63 public ImportMarineLitterAction(GenericFormatImportContext importContext, GenericformatImportPersistenceHelper persistenceHelper) {
64 super(importContext);
65 this.persistenceHelper = persistenceHelper;
66 }
67
68 @Override
69 protected boolean canExecute() {
70 return importContext.isTechnicalFilesValid()
71 && importContext.getSurveyFileResult().isValid()
72 && importContext.getOperationFileResult().isValid()
73 && importContext.getImportRequest().isImportMarineLitter();
74 }
75
76 @Override
77 protected void skipExecute() {
78
79 importContext.increments(t("tutti.service.genericFormat.skip.import.marineLitters"));
80
81 if (!importContext.getImportRequest().isImportMarineLitter()) {
82 GenericFormatCsvFileResult importFileResult = importContext.getMarineLitterFileResult();
83 importFileResult.setSkipped(true);
84 }
85
86 }
87
88 @Override
89 protected void doExecute() {
90
91 if (log.isInfoEnabled()) {
92 log.info("Import marineLitter.csv file.");
93 }
94 importContext.increments(t("tutti.service.genericFormat.import.marineLitters"));
95 GenericFormatCsvFileResult importFileResult = importContext.getMarineLitterFileResult();
96 try (CsvConsumerForMarineLitter consumer = importContext.loadMarineLitters(true)) {
97 for (ImportRow<MarineLitterRow> row : consumer) {
98
99 GenericFormatImportOperationContext operationContext = consumer.validateRow(row, importContext);
100 if (operationContext != null) {
101 consumer.prepareRowForPersist(operationContext, row);
102 }
103
104 }
105 } catch (IOException e) {
106 throw new ApplicationTechnicalException("Could not close marineLitter.csv file", e);
107 } catch (ImportRuntimeException e) {
108
109 importFileResult.addGlobalError(e.getMessage());
110
111 }
112
113 persistMarineLitterBatches();
114
115 }
116
117 public void persistMarineLitterBatches() {
118
119 importContext.doActionOnCruiseContexts(new GenericFormatImportContext.CruiseContextAction() {
120
121 @Override
122 public void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel) {
123
124 for (GenericFormatImportOperationContext fishingOperationContext : cruiseContext) {
125
126 boolean override = fishingOperationContext.isOverride();
127
128 if (override) {
129
130 deleteMarineLitterBatches(fishingOperationContext);
131
132 }
133
134 String cruiseStr = cruiseContext.getCruiseLabel();
135 String operationStr = fishingOperationContext.getFishingOperationLabel();
136
137 importContext.increments(t("tutti.service.genericFormat.persist.operation.marineLitters", cruiseStr, operationStr));
138
139 if (fishingOperationContext.withMarineLitterBatches()) {
140
141 Collection<MarineLitterBatch> marineLitterBatches = fishingOperationContext.getMarineLitterBatches();
142 if (log.isInfoEnabled()) {
143 log.info("Persist " + marineLitterBatches.size() + " marine litter(s) of " + operationStr + " for cruise: " + cruiseStr);
144 }
145 persistMarineLitterBatches(marineLitterBatches);
146
147 }
148
149 }
150
151 }
152
153 private void persistMarineLitterBatches(Collection<MarineLitterBatch> batches) {
154
155 for (MarineLitterBatch marineLitterBatch : batches) {
156
157 Integer objectId = marineLitterBatch.getIdAsInt();
158 Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.BATCH, objectId);
159
160
161 marineLitterBatch.setId((String) null);
162
163 MarineLitterBatch createdMarineLitterBatch = persistenceHelper.createMarineLitterBatch(marineLitterBatch);
164 persistenceHelper.persistAttachments(createdMarineLitterBatch.getIdAsInt(), attachmentRows);
165
166 }
167
168 }
169
170 private void deleteMarineLitterBatches(GenericFormatImportOperationContext fishingOperationContext) {
171
172 FishingOperation fishingOperation = fishingOperationContext.getFishingOperation();
173 persistenceHelper.deleteMarineLitterForFishingOperation(fishingOperation.getIdAsInt());
174
175 }
176
177 });
178
179 }
180
181 }