1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package fr.ifremer.coser.web.actions.search;
23
24 import com.google.common.collect.Lists;
25 import fr.ifremer.coser.result.request.ExtractRawDataAndResultsRequest;
26 import fr.ifremer.coser.result.request.GetIndicatorsForExtractRawDataAndResultsRequest;
27 import fr.ifremer.coser.result.request.GetSpeciesForExtractRawDataAndResultsRequest;
28 import fr.ifremer.coser.result.request.GetZonesForExtractRawDataAndResultsRequest;
29 import fr.ifremer.coser.result.result.FileResult;
30 import fr.ifremer.coser.util.DataType;
31 import fr.ifremer.coser.web.actions.common.AbstractCoserJspAction;
32 import org.apache.commons.collections4.CollectionUtils;
33 import org.apache.commons.lang3.StringUtils;
34 import org.apache.struts2.convention.annotation.Action;
35 import org.apache.struts2.convention.annotation.InterceptorRef;
36 import org.apache.struts2.convention.annotation.InterceptorRefs;
37 import org.apache.struts2.convention.annotation.Result;
38 import org.apache.struts2.interceptor.ServletRequestAware;
39
40 import javax.servlet.http.HttpServletRequest;
41 import java.io.InputStream;
42 import java.util.List;
43 import java.util.Locale;
44 import java.util.Map;
45
46
47
48
49
50
51
52
53
54 @InterceptorRefs({
55 @InterceptorRef("defaultStack"),
56 @InterceptorRef(value = "execAndWait",
57 params = {"excludeMethods", "execute,quality"})
58 })
59 public class ExtractAction extends AbstractCoserJspAction implements ServletRequestAware {
60
61
62 private static final long serialVersionUID = 8497086194191374797L;
63
64 public static final String DOWNLOAD = "download";
65
66 public static final String LOCALE_ATTRIBUTE = "locale";
67
68 protected Map<String, String> zones;
69
70 protected Map<String, String> types;
71
72 protected List<String> selectZones;
73
74 protected List<DataType> selectTypes;
75
76 protected Map<String, String> species;
77
78 protected List<String> selectSpecies;
79
80 protected Map<String, String> comIndicators;
81
82 protected List<String> selectComIndicators;
83
84 protected Map<String, String> popIndicators;
85
86 protected List<String> selectPopIndicators;
87
88 protected String submitAction;
89
90 protected boolean accepted;
91
92
93 protected transient HttpServletRequest servletRequest;
94
95 protected FileResult resultFile;
96
97 public Map<String, String> getZones() {
98 return zones;
99 }
100
101 public List<String> getSelectZones() {
102 return selectZones;
103 }
104
105 public void setSelectZones(List<String> selectZones) {
106 this.selectZones = selectZones;
107 }
108
109 public Map<String, String> getTypes() {
110 return types;
111 }
112
113 public List<DataType> getSelectTypes() {
114 return selectTypes;
115 }
116
117 public void setSelectTypes(List<DataType> selectTypes) {
118 this.selectTypes = selectTypes;
119 }
120
121 public List<String> getSelectSpecies() {
122 return selectSpecies;
123 }
124
125 public void setSelectSpecies(List<String> selectSpecies) {
126 this.selectSpecies = selectSpecies;
127 }
128
129 public List<String> getSelectComIndicators() {
130 return selectComIndicators;
131 }
132
133 public void setSelectComIndicators(List<String> selectComIndicators) {
134 this.selectComIndicators = selectComIndicators;
135 }
136
137 public List<String> getSelectPopIndicators() {
138 return selectPopIndicators;
139 }
140
141 public void setSelectPopIndicators(List<String> selectPopIndicators) {
142 this.selectPopIndicators = selectPopIndicators;
143 }
144
145 public Map<String, String> getSpecies() {
146 return species;
147 }
148
149 public Map<String, String> getComIndicators() {
150 return comIndicators;
151 }
152
153 public Map<String, String> getPopIndicators() {
154 return popIndicators;
155 }
156
157 public void setSubmitAction(String submitAction) {
158 this.submitAction = submitAction;
159 }
160
161
162 public boolean isAccepted() {
163 return accepted;
164 }
165
166 public void setAccepted(boolean accepted) {
167 this.accepted = accepted;
168 }
169
170
171
172
173
174 @Override
175 public void setServletRequest(HttpServletRequest servletrequest) {
176 this.servletRequest = servletrequest;
177 }
178
179 @Override
180 public String execute() {
181
182 String result;
183
184 if (StringUtils.isNotBlank(submitAction)) {
185 result = SUCCESS;
186 } else {
187 result = INPUT;
188
189 types = DataType.getExtractTypes(getLocale());
190
191
192 GetZonesForExtractRawDataAndResultsRequest zonesRequest =
193 requestBuilder(GetZonesForExtractRawDataAndResultsRequest.class).
194 toRequest();
195 zones = getService().toMap(zonesRequest);
196
197 if (CollectionUtils.isNotEmpty(selectZones)) {
198
199 GetSpeciesForExtractRawDataAndResultsRequest speciesRequest =
200 requestBuilder(GetSpeciesForExtractRawDataAndResultsRequest.class).
201 addZoneList(selectZones).
202 addExtractTypeList(selectTypes).
203 toRequest();
204 species = getService().toMap(speciesRequest);
205
206 if (selectTypes != null) {
207
208 GetIndicatorsForExtractRawDataAndResultsRequest indicatorsRequest =
209 requestBuilder(GetIndicatorsForExtractRawDataAndResultsRequest.class).
210 addZoneList(selectZones).
211 toRequest();
212
213 if (selectTypes.contains(DataType.COMMUNITY)) {
214
215 indicatorsRequest.setExtractTypeList(Lists.newArrayList(DataType.COMMUNITY));
216 comIndicators = getService().toMap(indicatorsRequest);
217 }
218
219 if (selectTypes.contains(DataType.POPULATION)) {
220 indicatorsRequest.setExtractTypeList(Lists.newArrayList(DataType.POPULATION));
221 popIndicators = getService().toMap(indicatorsRequest);
222 }
223 }
224 }
225 }
226
227 return result;
228 }
229
230 @Action(value = "extract-quality",
231 results = {
232 @Result(name = "input", location = "/WEB-INF/content/search/extract-success.jsp"),
233 @Result(name = DOWNLOAD, type = "redirect", params = {"location", "${location}"})})
234 public String quality() {
235
236
237 servletRequest.getSession().setAttribute(LOCALE_ATTRIBUTE, getLocale());
238 return DOWNLOAD;
239 }
240
241
242
243
244
245
246
247 public String getLocation() {
248 String url = "extract-download?accepted=true";
249 if (selectZones != null) {
250 for (String zone : selectZones) {
251 url += "&selectZones=" + zone;
252 }
253 }
254 if (selectTypes != null) {
255 for (DataType type : selectTypes) {
256 url += "&selectTypes=" + type;
257 }
258 }
259 if (selectSpecies != null) {
260 for (String species : selectSpecies) {
261 url += "&selectSpecies=" + species;
262 }
263 }
264 if (selectComIndicators != null) {
265 for (String selectComIndicator : selectComIndicators) {
266 url += "&selectComIndicators=" + selectComIndicator;
267 }
268 }
269 if (selectPopIndicators != null) {
270 for (String selectPopIndicator : selectPopIndicators) {
271 url += "&selectPopIndicators=" + selectPopIndicator;
272 }
273 }
274 return url;
275 }
276
277 @Action(value = "extract-download",
278 results = {
279 @Result(name = "wait", location = "/WEB-INF/content/search/extract-wait.jsp"),
280 @Result(type = "stream", params = {"contentType", "application/zip", "contentDisposition", "attachment; filename=\"${filename}\""})})
281 public String download() {
282
283 Locale locale = (Locale) servletRequest.getSession().getAttribute(LOCALE_ATTRIBUTE);
284
285 ExtractRawDataAndResultsRequest request =
286 requestBuilder(locale, ExtractRawDataAndResultsRequest.class).
287 addZoneList(selectZones).
288 addExtractTypeList(selectTypes).
289 addSpeciesList(selectSpecies).
290 addCommunityIndicatorList(selectComIndicators).
291 addPopulationIndicatorList(selectPopIndicators).
292 toRequest();
293
294 resultFile = getService().extractRawDataAndResults(locale, request);
295 return SUCCESS;
296 }
297
298 public InputStream getInputStream() {
299 InputStream is = resultFile.getInputStream();
300 return is;
301 }
302
303 public String getFilename() {
304 return "Indicateurs_Ifremer.zip";
305 }
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390 }