1 package fr.ifremer.tutti.service.referential;
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.Lists;
28 import fr.ifremer.tutti.persistence.entities.TuttiEntities;
29 import fr.ifremer.tutti.persistence.entities.referential.Species;
30 import fr.ifremer.tutti.persistence.entities.referential.Speciess;
31 import fr.ifremer.tutti.service.AbstractTuttiService;
32 import fr.ifremer.tutti.service.DecoratorService;
33 import fr.ifremer.tutti.service.PersistenceService;
34 import fr.ifremer.tutti.service.TuttiServiceContext;
35 import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpecies;
36 import fr.ifremer.tutti.service.referential.csv.SpeciesRow;
37 import fr.ifremer.tutti.service.referential.producer.CsvProducerForTemporarySpecies;
38 import org.apache.commons.logging.Log;
39 import org.apache.commons.logging.LogFactory;
40 import org.nuiton.csv.ImportRow;
41 import org.nuiton.jaxx.application.ApplicationTechnicalException;
42
43 import java.io.File;
44 import java.io.IOException;
45 import java.util.List;
46
47 import static org.nuiton.i18n.I18n.t;
48
49
50
51
52
53
54
55 public class ReferentialTemporarySpeciesService extends AbstractTuttiService {
56
57
58 private static final Log log =
59 LogFactory.getLog(ReferentialTemporarySpeciesService.class);
60
61 protected PersistenceService persistenceService;
62
63 protected DecoratorService decoratorService;
64
65 @Override
66 public void setServiceContext(TuttiServiceContext context) {
67 super.setServiceContext(context);
68 persistenceService = getService(PersistenceService.class);
69 decoratorService = getService(DecoratorService.class);
70 }
71
72 public ReferentialImportRequest<Species, Integer> createReferentialImportRequest() {
73
74 List<Species> allSpecies = persistenceService.getAllSpecies();
75 return new ReferentialImportRequest<>(allSpecies, TuttiEntities.<Species>newIdAstIntFunction(), Speciess.GET_NAME);
76
77 }
78
79 public ReferentialImportResult<Species> importTemporarySpecies(File file) {
80
81 if (log.isInfoEnabled()) {
82 log.info("Will import species from file: " + file);
83 }
84
85 ReferentialImportRequest<Species, Integer> requestResult = createReferentialImportRequest();
86
87 try (CsvConsumerForTemporarySpecies consumer = new CsvConsumerForTemporarySpecies(file.toPath(), getCsvSeparator(), false, true)) {
88
89 for (ImportRow<SpeciesRow> bean : consumer) {
90
91 consumer.checkRow(bean, persistenceService, decoratorService, requestResult);
92
93 }
94
95 } catch (IOException e) {
96 throw new ApplicationTechnicalException(t("tutti.service.referential.import.species.error", file), e);
97 }
98
99 return executeImportRequest(requestResult);
100
101 }
102
103 public ReferentialImportResult<Species> executeImportRequest(ReferentialImportRequest<Species, Integer> requestResult) {
104
105 ReferentialImportResult<Species> result = new ReferentialImportResult<>();
106
107 if (requestResult.withEntitiesToDelete()) {
108
109 List<Integer> idsToDelete = requestResult.getIdsToDelete();
110 persistenceService.deleteTemporarySpecies(idsToDelete);
111 result.setNbRefDeleted(idsToDelete.size());
112
113 }
114
115 if (requestResult.withEntitiesToAdd()) {
116
117 List<Species> entitiesToAdd = requestResult.getEntitiesToAdd();
118 List<Species> entitiesAdded = persistenceService.addTemporarySpecies(entitiesToAdd);
119 result.addAllRefsAdded(entitiesAdded);
120 }
121
122 if (requestResult.withEntitiesToUpdate()) {
123
124 List<Species> entitiesToUpdate = requestResult.getEntitiesToUpdate();
125 List<Species> entitiesUpdated = persistenceService.updateTemporarySpecies(entitiesToUpdate);
126 result.addAllRefsUpdated(entitiesUpdated);
127
128 }
129
130 if (requestResult.withEntitiesToLink()) {
131
132 List<Species> entitiesToLink = requestResult.getEntitiesToLink();
133 List<Species> entitiesLinked = persistenceService.linkTemporarySpecies(entitiesToLink);
134 result.addAllRefsLinked(entitiesLinked);
135
136 }
137
138 return result;
139
140 }
141
142 public List<Species> getTemporarySpeciess() {
143
144 if (log.isInfoEnabled()) {
145 log.info("Getting all species from database");
146 }
147 List<Species> targetList = Lists.newArrayList(persistenceService.getAllReferentSpecies());
148
149 if (log.isInfoEnabled()) {
150 log.info("Got " + targetList.size() + " species");
151 }
152 List<Species> toExport = persistenceService.retainTemporarySpeciesList(targetList);
153 if (log.isInfoEnabled()) {
154 log.info("Got " + toExport.size() + " temporary species");
155 }
156 return toExport;
157
158 }
159
160 public void exportExistingTemporarySpecies(File file) throws IOException {
161
162 List<Species> toExport = getTemporarySpeciess();
163 exportTemporarySpecies(file, toExport);
164
165 }
166
167 public void exportTemporarySpeciesExample(File file) throws IOException {
168
169 List<Species> toExport = Lists.newArrayList();
170
171 {
172 Species s = Speciess.newSpecies();
173 s.setName("Temporary Species name 1");
174 toExport.add(s);
175 }
176 {
177 Species s = Speciess.newSpecies();
178 s.setName("Temporary Species name 2");
179 toExport.add(s);
180 }
181 {
182 Species s = Speciess.newSpecies();
183 s.setName("Temporary Species name 3");
184 toExport.add(s);
185 }
186 exportTemporarySpecies(file, toExport);
187
188 }
189
190 public void exportTemporarySpecies(File file, List<Species> toExport) throws IOException {
191
192 try (CsvProducerForTemporarySpecies producerForTemporarySpecies = new CsvProducerForTemporarySpecies(file.toPath(), getCsvSeparator(), false)) {
193
194 List<SpeciesRow> dataToExport = producerForTemporarySpecies.getDataToExport(toExport);
195 producerForTemporarySpecies.write(dataToExport);
196
197 } catch (Exception e) {
198 throw new ApplicationTechnicalException(t("tutti.service.referential.export.species.error", file), e);
199 }
200
201 }
202
203 protected char getCsvSeparator() {
204 return ';';
205 }
206 }