Mercurial > lada > lada-server
annotate src/main/java/de/intevation/lada/rest/exporter/LafExportService.java @ 1043:1b9516c60a5a schema-update
Added json export.
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Mon, 05 Sep 2016 10:19:23 +0200 |
parents | 5bdd1631a451 |
children | f252a92aae1c |
rev | line source |
---|---|
629
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
1 /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
2 * Software engineering by Intevation GmbH |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
3 * |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
4 * This file is Free Software under the GNU GPL (v>=3) |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
6 * the documentation coming with IMIS-Labordaten-Application for details. |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
7 */ |
612
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
8 package de.intevation.lada.rest.exporter; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
9 |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
10 import java.io.InputStream; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
11 import java.util.ArrayList; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
12 import java.util.List; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
13 |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
14 import javax.enterprise.context.RequestScoped; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
15 import javax.inject.Inject; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
16 import javax.json.JsonArray; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
17 import javax.json.JsonObject; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
18 import javax.servlet.http.HttpServletRequest; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
19 import javax.ws.rs.Consumes; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
20 import javax.ws.rs.POST; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
21 import javax.ws.rs.Path; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
22 import javax.ws.rs.Produces; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
23 import javax.ws.rs.core.Context; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
24 import javax.ws.rs.core.Response; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
25 import javax.ws.rs.core.Response.ResponseBuilder; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
26 |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
27 import de.intevation.lada.exporter.ExportConfig; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
28 import de.intevation.lada.exporter.ExportFormat; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
29 import de.intevation.lada.exporter.Exporter; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
30 import de.intevation.lada.util.annotation.AuthorizationConfig; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
31 import de.intevation.lada.util.auth.Authorization; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
32 import de.intevation.lada.util.auth.AuthorizationType; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
33 import de.intevation.lada.util.auth.UserInfo; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
34 |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
35 /** |
629
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
36 * REST service to export probe objects and the child objects associated with |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
37 * the selected Probe objects. |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
38 * <p> |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
39 * To request objects post a JSON formatted string with an array of probe ids. |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
40 * <pre> |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
41 * <code> |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
42 * { |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
43 * "proben": [[number], [number], ...] |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
44 * } |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
45 * </code> |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
46 * </pre> |
612
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
47 * |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
48 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a> |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
49 */ |
1043
1b9516c60a5a
Added json export.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
827
diff
changeset
|
50 @Path("data/export") |
612
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
51 @RequestScoped |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
52 public class LafExportService { |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
53 |
629
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
54 /** |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
55 * The exporter. |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
56 */ |
612
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
57 @Inject |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
58 @ExportConfig(format=ExportFormat.LAF) |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
59 private Exporter exporter; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
60 |
629
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
61 /** |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
62 * The authorization module. |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
63 */ |
612
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
64 @Inject |
722
c81881dac97e
Switch to shibboleth authorization in all REST-services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
684
diff
changeset
|
65 @AuthorizationConfig(type=AuthorizationType.HEADER) |
629
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
66 private Authorization authorization; |
612
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
67 |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
68 |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
69 /** |
629
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
70 * Export Probe objects. |
612
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
71 * |
629
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
72 * The service takes JSON formatted POST data containing probe ids and |
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
73 * exports the Probe objects filtered by these ids. |
612
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
74 * |
629
3bbfdef05ee1
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
612
diff
changeset
|
75 * @param proben JSON formatted string with an array of probe ids. |
612
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
76 * @param header The HTTP header containing authorization information. |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
77 * @return The LAF file to export. |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
78 */ |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
79 @POST |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
80 @Path("/laf") |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
81 @Consumes("application/json") |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
82 @Produces("text/plain") |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
83 public Response download( |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
84 JsonObject proben, |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
85 @Context HttpServletRequest request |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
86 ) { |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
87 JsonArray array = proben.getJsonArray("proben"); |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
88 List<Integer> probeIds = new ArrayList<Integer>(); |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
89 String fileName = "export.laf"; |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
90 UserInfo userInfo = authorization.getInfo(request); |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
91 for (int i = 0; i < array.size(); i++) { |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
92 Integer probeId = array.getInt(i); |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
93 //if (authorization.isAuthorized(userInfo, probeId)) { |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
94 probeIds.add(probeId); |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
95 //} |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
96 } |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
97 InputStream exported = exporter.export(probeIds, userInfo); |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
98 ResponseBuilder response = Response.ok((Object)exported); |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
99 response.header( |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
100 "Content-Disposition", |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
101 "attachment; filename=\"" + fileName + "\""); |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
102 return response.build(); |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
103 } |
23ab3247b36e
Added REST services for Im-/Export for laf files.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
104 } |