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
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)