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