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