1 package fr.ifremer.dali.service.extraction;
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 import com.google.common.collect.Lists;
27 import fr.ifremer.dali.config.DaliConfiguration;
28 import fr.ifremer.dali.dao.system.extraction.DaliExtractionDao;
29 import fr.ifremer.dali.dto.DaliBeanFactory;
30 import fr.ifremer.dali.dto.DaliBeans;
31 import fr.ifremer.dali.dto.configuration.filter.FilterDTO;
32 import fr.ifremer.dali.dto.enums.ExtractionFilterTypeValues;
33 import fr.ifremer.dali.dto.system.extraction.ExtractionDTO;
34 import fr.ifremer.dali.dto.system.extraction.FilterTypeDTO;
35 import fr.ifremer.dali.service.administration.context.ContextService;
36 import fr.ifremer.quadrige3.core.dao.technical.Assert;
37 import org.apache.commons.collections4.CollectionUtils;
38 import org.nuiton.util.ObjectUtil;
39 import org.springframework.beans.factory.annotation.Autowired;
40 import org.springframework.stereotype.Service;
41
42 import javax.annotation.Resource;
43 import java.io.File;
44 import java.util.Collection;
45 import java.util.List;
46 import java.util.Objects;
47
48
49
50
51
52
53 @Service("daliExtractionService")
54 public class ExtractionServiceImpl implements ExtractionService {
55
56 @Resource(name = "daliContextService")
57 private ContextService contextService;
58
59 @Resource(name = "daliExtractionDao")
60 private DaliExtractionDao extractionDao;
61
62 @Autowired
63 protected DaliConfiguration config;
64
65
66
67
68 @Override
69 public List<FilterTypeDTO> getFilterTypes() {
70 List<FilterTypeDTO> result = Lists.newArrayList();
71
72
73 for (ExtractionFilterTypeValues extractionFilter : ExtractionFilterTypeValues.values()) {
74 if (extractionFilter.isHidden()) continue;
75 FilterTypeDTO filterType = DaliBeanFactory.newFilterTypeDTO();
76 filterType.setId(extractionFilter.getFilterTypeId());
77 filterType.setName(extractionFilter.getLabel());
78 result.add(filterType);
79 }
80
81 return result;
82 }
83
84 @Override
85 public List<ExtractionDTO> getAllLightExtractions() {
86 return extractionDao.getAllLightExtractions();
87 }
88
89
90
91
92 @Override
93 public List<ExtractionDTO> getExtractions(Integer extractionId, String programCode) {
94 if (extractionId != null) {
95 return Lists.newArrayList(extractionDao.getExtractionById(extractionId));
96 } else if (programCode != null) {
97 return extractionDao.searchExtractionByProgram(programCode);
98 } else {
99 return extractionDao.getAllExtractions();
100 }
101 }
102
103
104
105
106 @Override
107 public void loadFilteredElements(ExtractionDTO extraction) {
108 Assert.notNull(extraction);
109
110 extraction.getFilters().stream()
111 .filter(filter -> filter.getFilterTypeId() >= 0 && !filter.isFilterLoaded())
112 .forEach(filter -> contextService.loadFilteredElements(filter));
113
114 }
115
116
117
118
119 @Override
120 public void saveExtractions(Collection<? extends ExtractionDTO> extractions) {
121
122 if (CollectionUtils.isEmpty(extractions)) return;
123
124 extractions.stream().filter(ExtractionDTO::isDirty).forEach(this::saveExtraction);
125
126 }
127
128 private void saveExtraction(ExtractionDTO extraction) {
129 Assert.notNull(extraction);
130 Assert.notEmpty(extraction.getFilters());
131 Assert.notNull(DaliBeans.getFilterOfType(extraction, ExtractionFilterTypeValues.PERIOD));
132 Assert.notNull(DaliBeans.getFilterOfType(extraction, ExtractionFilterTypeValues.PROGRAM));
133 Assert.notNull(DaliBeans.getFilterOfType(extraction, ExtractionFilterTypeValues.ORDER_ITEM_TYPE));
134
135
136 extractionDao.saveExtraction(extraction);
137
138 extraction.setDirty(false);
139 }
140
141
142
143
144 @Override
145 public void deleteExtractions(List<Integer> idExtractionToDelete) {
146
147 if (CollectionUtils.isEmpty(idExtractionToDelete)) return;
148 idExtractionToDelete.stream().filter(Objects::nonNull).distinct().forEach(id -> extractionDao.remove(id));
149
150 }
151
152
153
154
155 @Override
156 public ExtractionDTO duplicateExtraction(ExtractionDTO extraction) throws CloneNotSupportedException {
157 ExtractionDTO duplicatedExtraction = DaliBeanFactory.newExtractionDTO();
158
159 duplicatedExtraction.setUser(extraction.getUser());
160 duplicatedExtraction.setDirty(true);
161
162
163 for (FilterDTO filter: extraction.getFilters()) {
164 duplicatedExtraction.addFilters(contextService.duplicateFilter(filter));
165 }
166
167
168 duplicatedExtraction.setParameter(ObjectUtil.deepClone(extraction.getParameter()));
169
170 return duplicatedExtraction;
171 }
172
173 @Override
174 public void exportExtraction(ExtractionDTO extraction, File exportFile) {
175
176 Assert.notNull(extraction);
177 Assert.notNull(exportFile);
178 exportFile.getParentFile().mkdirs();
179
180 extractionDao.exportExtraction(extraction, exportFile);
181 }
182
183 @Override
184 public ExtractionDTO importExtraction(File importFile) {
185
186 Assert.notNull(importFile);
187
188 return extractionDao.importExtraction(importFile);
189 }
190
191 }