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 com.google.common.collect.ArrayListMultimap;
28 import com.google.common.collect.Multimap;
29 import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport;
30 import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult;
31 import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAttachment;
32 import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow;
33 import org.apache.commons.logging.Log;
34 import org.apache.commons.logging.LogFactory;
35 import org.nuiton.csv.ImportRow;
36 import org.nuiton.csv.ImportRuntimeException;
37 import org.nuiton.jaxx.application.ApplicationTechnicalException;
38
39 import java.io.IOException;
40
41 import static org.nuiton.i18n.I18n.t;
42
43
44
45
46
47
48
49 public class LoadAttachmentsAction extends ImportActionSupport {
50
51
52 private static final Log log = LogFactory.getLog(LoadAttachmentsAction.class);
53
54 public LoadAttachmentsAction(GenericFormatContextSupport importContext) {
55 super(importContext);
56 }
57
58 @Override
59 protected boolean canExecute() {
60 return importContext.getImportRequest().isImportAttachments();
61 }
62
63 @Override
64 protected void skipExecute() {
65
66 importContext.increments(t("tutti.service.genericFormat.skip.load.attachments"));
67
68 if (!importContext.getImportRequest().isImportAttachments()) {
69 GenericFormatCsvFileResult importFileResult = importContext.getAttachmentFileResult();
70 importFileResult.setSkipped(true);
71 }
72
73 }
74
75 @Override
76 protected void doExecute() {
77
78 if (log.isInfoEnabled()) {
79 log.info("Load attachments definitions.");
80 }
81
82 importContext.increments(t("tutti.service.genericFormat.load.attachments"));
83
84 GenericFormatCsvFileResult importFileResult = importContext.getAttachmentFileResult();
85 try (CsvConsumerForAttachment consumer = importContext.loadAttachments(false)) {
86
87 Multimap<String, AttachmentRow> attachmentRowsByObjectId = ArrayListMultimap.create();
88
89 for (ImportRow<AttachmentRow> row : consumer) {
90
91 consumer.validateRow(row);
92
93 if (row.isValid()) {
94
95 AttachmentRow bean = row.getBean();
96 attachmentRowsByObjectId.put(bean.getObjectType() + "_" + bean.getObjectId(), bean);
97
98 }
99
100 }
101
102 importFileResult.flushErrors(consumer);
103
104 importContext.setAttachmentRows(attachmentRowsByObjectId);
105
106 } catch (IOException e) {
107 throw new ApplicationTechnicalException("Could not close attachments.csv file", e);
108 } catch (ImportRuntimeException e) {
109
110 importFileResult.addGlobalError(e.getMessage());
111
112 }
113
114 }
115
116 }