Mercurial > lada > lada-server
annotate src/main/java/de/intevation/lada/rest/AuditTrailService.java @ 1345:883ab3a6f525 tip
changed version to 2.7-SNAPSHOT after release2.6.2 for default branch
author | Marco Lechner, Bundesamt fuer Strahlenschutz, SW 2.1 <mlechner@bfs.de> |
---|---|
date | Fri, 07 Apr 2017 11:14:37 +0200 |
parents | 6fbfb8f0927a |
children |
rev | line source |
---|---|
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
1 /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
2 * Software engineering by Intevation GmbH |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
3 * |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
4 * This file is Free Software under the GNU GPL (v>=3) |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
6 * the documentation coming with IMIS-Labordaten-Application for details. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
7 */ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
8 package de.intevation.lada.rest; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
9 |
1309
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
10 import java.text.DateFormat; |
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
11 import java.text.ParseException; |
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
12 import java.text.SimpleDateFormat; |
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
13 import java.util.Date; |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
14 import java.util.HashMap; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
15 import java.util.Iterator; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
16 import java.util.List; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
17 import java.util.Map; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
18 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
19 import javax.annotation.PostConstruct; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
20 import javax.enterprise.context.RequestScoped; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
21 import javax.inject.Inject; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
22 import javax.persistence.EntityManager; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
23 import javax.servlet.http.HttpServletRequest; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
24 import javax.ws.rs.GET; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
25 import javax.ws.rs.Path; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
26 import javax.ws.rs.PathParam; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
27 import javax.ws.rs.Produces; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
28 import javax.ws.rs.core.Context; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
29 import javax.ws.rs.core.MediaType; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
30 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
31 import org.apache.log4j.Logger; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
32 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
33 import com.fasterxml.jackson.databind.ObjectMapper; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
34 import com.fasterxml.jackson.databind.node.ArrayNode; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
35 import com.fasterxml.jackson.databind.node.ObjectNode; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
36 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
37 import de.intevation.lada.model.land.AuditTrailMessung; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
38 import de.intevation.lada.model.land.AuditTrailProbe; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
39 import de.intevation.lada.model.land.Messung; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
40 import de.intevation.lada.model.land.Probe; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
41 import de.intevation.lada.util.annotation.AuthorizationConfig; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
42 import de.intevation.lada.util.annotation.RepositoryConfig; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
43 import de.intevation.lada.util.auth.Authorization; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
44 import de.intevation.lada.util.auth.AuthorizationType; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
45 import de.intevation.lada.util.data.QueryBuilder; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
46 import de.intevation.lada.util.data.Repository; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
47 import de.intevation.lada.util.data.RepositoryType; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
48 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
49 /** |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
50 * REST service for AuditTrail. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
51 * <p> |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
52 * The services produce data in the application/json media type. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
53 * All HTTP methods use the authorization module to determine if the user is |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
54 * allowed to perform the requested action. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
55 * A typical response holds information about the action performed and the data. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
56 * <pre> |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
57 * <code> |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
58 * { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
59 * "success": [boolean]; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
60 * "message": [string], |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
61 * "data":[{ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
62 * "id": [number], |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
63 * "identifier: [string] |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
64 * "audit": [array] |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
65 * }], |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
66 * } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
67 * </code> |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
68 * </pre> |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
69 * |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
70 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a> |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
71 */ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
72 @Path("rest/audit") |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
73 @RequestScoped |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
74 public class AuditTrailService { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
75 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
76 /** |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
77 * Class to store tablename and value field for foreign key mappings. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
78 */ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
79 private class TableMapper { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
80 public String mappingTable; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
81 public String valueField; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
82 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
83 public TableMapper( |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
84 String mappingTable, |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
85 String valueField |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
86 ) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
87 this.mappingTable = mappingTable; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
88 this.valueField = valueField; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
89 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
90 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
91 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
92 @Inject Logger logger; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
93 /** |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
94 * The data repository granting read/write access. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
95 */ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
96 @Inject |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
97 @RepositoryConfig(type=RepositoryType.RO) |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
98 private Repository repository; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
99 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
100 /** |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
101 * The authorization module. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
102 */ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
103 @Inject |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
104 @AuthorizationConfig(type=AuthorizationType.HEADER) |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
105 private Authorization authorization; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
106 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
107 /** |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
108 * Map foreign key to their associated table and the display value. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
109 */ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
110 private Map<String, TableMapper> mappings; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
111 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
112 /** |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
113 * Initialize the object with key <-> table mappings. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
114 */ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
115 @PostConstruct |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
116 public void initialize() { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
117 mappings = new HashMap<String, TableMapper>(); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
118 mappings.put("messgroesse_id", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
119 new TableMapper("messgroesse", "messgroesse")); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
120 mappings.put("meh_id", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
121 new TableMapper("mess_einheit", "einheit")); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
122 mappings.put("ort_id", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
123 new TableMapper("ort", "ort_id")); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
124 mappings.put("datenbasis_id", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
125 new TableMapper("datenbasis", "datenbasis")); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
126 mappings.put("ba_id", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
127 new TableMapper("betriebsart", "name")); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
128 mappings.put("mpl_id", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
129 new TableMapper("messprogramm_kategorie", "code")); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
130 mappings.put("probenart_id", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
131 new TableMapper("probenart", "probenart")); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
132 mappings.put("probe_nehmer_id", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
133 new TableMapper("probenehmer", "prn_id")); |
1309
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
134 mappings.put("probeentnahme_beginn", |
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
135 new TableMapper("date", "dd.MM.yy HH:mm")); |
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
136 mappings.put("probeentnahme_ende", |
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
137 new TableMapper("date", "dd.MM.yy HH:mm")); |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
138 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
139 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
140 /** |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
141 * Service to generate audit trail for probe objects. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
142 */ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
143 @GET |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
144 @Path("/probe/{id}") |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
145 @Produces(MediaType.APPLICATION_JSON) |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
146 public String getProbe( |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
147 @Context HttpServletRequest request, |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
148 @PathParam("id") String id |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
149 ) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
150 if (id == null || "".equals(id)) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
151 String ret = "{\"success\": false," + |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
152 "\"message\":698,\"data\":null}"; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
153 return ret; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
154 } |
1318
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
155 |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
156 Integer pId = null; |
1318
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
157 String ret = "{\"success\": false," + |
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
158 "\"message\":600,\"data\":null}"; |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
159 try { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
160 pId = Integer.valueOf(id); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
161 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
162 catch(NumberFormatException nfe) { |
1318
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
163 return ret; |
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
164 } |
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
165 // Get the plain probe object to have the hauptproben_nr. |
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
166 Probe probe = repository.getByIdPlain(Probe.class, pId, "land"); |
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
167 if (probe == null) { |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
168 return ret; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
169 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
170 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
171 // Get all entries for the probe and its sub objects. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
172 QueryBuilder<AuditTrailProbe> builder = |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
173 new QueryBuilder<AuditTrailProbe>( |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
174 repository.entityManager("land"), |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
175 AuditTrailProbe.class); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
176 builder.and("objectId", id); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
177 builder.and("tableName", "probe"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
178 builder.or("probeId", id); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
179 builder.orderBy("tstamp", true); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
180 List<AuditTrailProbe> audit = |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
181 repository.filterPlain(builder.getQuery(), "land"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
182 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
183 // Create an empty JsonObject |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
184 ObjectMapper mapper = new ObjectMapper(); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
185 ObjectNode responseNode = mapper.createObjectNode(); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
186 responseNode.put("success", true); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
187 responseNode.put("message", 200); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
188 ObjectNode auditJson = responseNode.putObject("data"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
189 ArrayNode entries = auditJson.putArray("audit"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
190 auditJson.put("id", probe.getId()); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
191 auditJson.put("identifier", probe.getHauptprobenNr()); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
192 for (AuditTrailProbe a : audit) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
193 entries.add(createEntry(a, mapper)); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
194 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
195 return responseNode.toString(); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
196 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
197 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
198 /** |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
199 * Create a JSON object for an AuditTrailProbe entry. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
200 * |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
201 * @param audit The table entry |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
202 * @param mapper JSON object mapper |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
203 */ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
204 private ObjectNode createEntry(AuditTrailProbe audit, ObjectMapper mapper) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
205 ObjectNode node = mapper.createObjectNode(); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
206 node.put("timestamp", audit.getTstamp().getTime()); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
207 node.put("type", audit.getTableName()); |
1308
db46646375e3
Added action to probe audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1304
diff
changeset
|
208 node.put("action", audit.getAction()); |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
209 ObjectNode data = (ObjectNode)audit.getChangedFields(); |
1309
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
210 data = translateValues(data); |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
211 node.putPOJO("changedFields", data); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
212 if ("kommentar_p".equals(audit.getTableName())) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
213 node.put("identifier", audit.getRowData().get("datum").toString()); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
214 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
215 if ("zusatz_wert".equals(audit.getTableName())) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
216 node.put("identifier", audit.getRowData().get("pzs_id").toString()); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
217 } |
1304
e51c56914e52
Fixed typo in audit trail service.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1301
diff
changeset
|
218 if ("ortszuordnung".equals(audit.getTableName())) { |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
219 String value = translateId( |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
220 "ort", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
221 "ort_id", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
222 audit.getRowData().get("ort_id").toString(), |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
223 "id", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
224 "stamm"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
225 node.put("identifier", value); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
226 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
227 if ("messung".equals(audit.getTableName())) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
228 logger.debug("npr: " + audit.getRowData()); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
229 node.put("identifier", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
230 audit.getRowData() |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
231 .get("nebenproben_nr").toString().replaceAll("\"", "")); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
232 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
233 if (audit.getMessungsId() != null) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
234 Messung m = repository.getByIdPlain( |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
235 Messung.class, audit.getMessungsId(), "land"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
236 ObjectNode identifier = node.putObject("identifier"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
237 identifier.put("messung", m.getNebenprobenNr()); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
238 if ("kommentar_m".equals(audit.getTableName())) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
239 identifier.put("identifier", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
240 audit.getRowData().get("datum").toString()); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
241 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
242 if ("messwert".equals(audit.getTableName())) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
243 String value = translateId( |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
244 "messgroesse", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
245 "messgroesse", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
246 audit.getRowData().get("messgroesse_id").toString(), |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
247 "id", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
248 "stamm"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
249 identifier.put("identifier", value); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
250 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
251 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
252 return node; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
253 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
254 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
255 /** |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
256 * Service to generate audit trail for messung objects. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
257 */ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
258 @GET |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
259 @Path("/messung/{id}") |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
260 @Produces(MediaType.APPLICATION_JSON) |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
261 public String getMessung( |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
262 @Context HttpServletRequest request, |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
263 @PathParam("id") String id |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
264 ) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
265 if (id == null || "".equals(id)) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
266 String ret = "{\"success\": false," + |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
267 "\"message\":698,\"data\":null}"; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
268 return ret; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
269 } |
1318
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
270 |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
271 Integer mId = null; |
1318
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
272 String ret = "{\"success\": false," + |
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
273 "\"message\":600,\"data\":null}"; |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
274 try { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
275 mId = Integer.valueOf(id); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
276 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
277 catch(NumberFormatException nfe) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
278 return ret; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
279 } |
1318
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
280 Messung messung = repository.getByIdPlain(Messung.class, mId, "land"); |
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
281 if (messung == null) { |
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
282 return ret; |
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
283 } |
6fbfb8f0927a
Audit trail: handle request with non-existant numeric ID.
Tom Gottfried <tom@intevation.de>
parents:
1310
diff
changeset
|
284 |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
285 QueryBuilder<AuditTrailMessung> builder = |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
286 new QueryBuilder<AuditTrailMessung>( |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
287 repository.entityManager("land"), |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
288 AuditTrailMessung.class); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
289 builder.and("objectId", mId); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
290 builder.and("tableName", "messung"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
291 builder.or("messungsId", mId); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
292 builder.orderBy("tstamp", true); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
293 List<AuditTrailMessung> audit = |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
294 repository.filterPlain(builder.getQuery(), "land"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
295 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
296 // Create an empty JsonObject |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
297 ObjectMapper mapper = new ObjectMapper(); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
298 ObjectNode responseNode = mapper.createObjectNode(); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
299 responseNode.put("success", true); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
300 responseNode.put("message", 200); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
301 ObjectNode auditJson = responseNode.putObject("data"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
302 ArrayNode entries = auditJson.putArray("audit"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
303 auditJson.put("id", messung.getId()); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
304 auditJson.put("identifier", messung.getNebenprobenNr()); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
305 for (AuditTrailMessung a : audit) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
306 entries.add(createEntry(a, mapper)); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
307 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
308 return responseNode.toString(); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
309 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
310 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
311 /** |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
312 * Create a JSON object for an AuditTrailMessung entry. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
313 * |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
314 * @param audit The table entry |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
315 * @param mapper JSON object mapper |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
316 */ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
317 private ObjectNode createEntry(AuditTrailMessung audit, ObjectMapper mapper) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
318 ObjectNode node = mapper.createObjectNode(); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
319 node.put("timestamp", audit.getTstamp().getTime()); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
320 node.put("type", audit.getTableName()); |
1308
db46646375e3
Added action to probe audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1304
diff
changeset
|
321 node.put("action", audit.getAction()); |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
322 ObjectNode data = (ObjectNode)audit.getChangedFields(); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
323 node.putPOJO("changedFields", data); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
324 if ("kommentar_m".equals(audit.getTableName())) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
325 node.put("identifier", audit.getRowData().get("datum").toString()); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
326 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
327 if ("messwert".equals(audit.getTableName())) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
328 String value = translateId( |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
329 "messgroesse", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
330 "messgroesse", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
331 audit.getRowData().get("messgroesse_id").toString(), |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
332 "id", |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
333 "stamm"); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
334 node.put("identifier", value); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
335 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
336 return node; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
337 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
338 |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
339 /** |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
340 * Translate a foreign key into the associated value. |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
341 */ |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
342 private String translateId( |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
343 String table, |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
344 String field, |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
345 String id, |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
346 String idField, |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
347 String source |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
348 ) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
349 EntityManager manager = repository.entityManager(source); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
350 String sql = "SELECT " + field + " FROM " + table + |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
351 " WHERE " + idField + " = " + id + ";"; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
352 javax.persistence.Query query = manager.createNativeQuery(sql); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
353 List<String> result = query.getResultList(); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
354 return result.get(0); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
355 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
356 |
1310
c5721e624c0e
Insert timestamp into audit trail changed fields instead of date string.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1309
diff
changeset
|
357 private Long formatDate(String format, String date) { |
1309
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
358 DateFormat inFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssXXX"); |
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
359 try { |
1310
c5721e624c0e
Insert timestamp into audit trail changed fields instead of date string.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1309
diff
changeset
|
360 return inFormat.parse(date).getTime(); |
1309
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
361 } catch (ParseException e) { |
1310
c5721e624c0e
Insert timestamp into audit trail changed fields instead of date string.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1309
diff
changeset
|
362 return 0L; |
1309
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
363 } |
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
364 } |
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
365 |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
366 /** |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
367 * Translate all known foreign keys |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
368 */ |
1309
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
369 private ObjectNode translateValues(ObjectNode node) { |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
370 for (Iterator<String> i = node.fieldNames(); i.hasNext();) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
371 String key = i.next(); |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
372 if (mappings.containsKey(key)) { |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
373 TableMapper m = mappings.get(key); |
1309
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
374 if (m.mappingTable.equals("date")) { |
1310
c5721e624c0e
Insert timestamp into audit trail changed fields instead of date string.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1309
diff
changeset
|
375 Long value = formatDate(m.valueField, node.get(key).asText()); |
c5721e624c0e
Insert timestamp into audit trail changed fields instead of date string.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1309
diff
changeset
|
376 node.put(key, value); |
1309
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
377 } |
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
378 else { |
1310
c5721e624c0e
Insert timestamp into audit trail changed fields instead of date string.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1309
diff
changeset
|
379 String value = translateId( |
c5721e624c0e
Insert timestamp into audit trail changed fields instead of date string.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1309
diff
changeset
|
380 m.mappingTable, |
c5721e624c0e
Insert timestamp into audit trail changed fields instead of date string.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1309
diff
changeset
|
381 m.valueField, |
c5721e624c0e
Insert timestamp into audit trail changed fields instead of date string.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1309
diff
changeset
|
382 node.get(key).asText(), |
c5721e624c0e
Insert timestamp into audit trail changed fields instead of date string.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1309
diff
changeset
|
383 "id", |
c5721e624c0e
Insert timestamp into audit trail changed fields instead of date string.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1309
diff
changeset
|
384 "stamm"); |
c5721e624c0e
Insert timestamp into audit trail changed fields instead of date string.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1309
diff
changeset
|
385 node.put(key, value); |
1309
d531e8e8afa2
Format date values for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1308
diff
changeset
|
386 } |
1301
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
387 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
388 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
389 return node; |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
390 } |
a3f281b350f2
Added service for audit trail.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
391 } |