annotate src/main/java/de/intevation/lada/rest/stamm/FilterService.java @ 1028:1c41c7b8f7c2 schema-update

Updated server application to new database model. THIS IS STILL WIP!!!
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 08 Jul 2016 15:32:36 +0200
parents d4d768295068
children
rev   line source
858
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
3 *
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU GPL (v>=3)
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
6 * the documentation coming with IMIS-Labordaten-Application for details.
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
7 */
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
8 package de.intevation.lada.rest.stamm;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
9
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
10 import java.util.List;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
11
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
12 import javax.enterprise.context.RequestScoped;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
13 import javax.inject.Inject;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
14 import javax.servlet.http.HttpServletRequest;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
15 import javax.ws.rs.DELETE;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
16 import javax.ws.rs.PUT;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
17 import javax.ws.rs.Path;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
18 import javax.ws.rs.PathParam;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
19 import javax.ws.rs.Produces;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
20 import javax.ws.rs.core.Context;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
21 import javax.ws.rs.core.MediaType;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
22
1028
1c41c7b8f7c2 Updated server application to new database model. THIS IS STILL WIP!!!
Raimund Renkert <raimund.renkert@intevation.de>
parents: 891
diff changeset
23 import de.intevation.lada.model.stammdaten.Filter;
1c41c7b8f7c2 Updated server application to new database model. THIS IS STILL WIP!!!
Raimund Renkert <raimund.renkert@intevation.de>
parents: 891
diff changeset
24 import de.intevation.lada.model.stammdaten.FilterValue;
858
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
25 import de.intevation.lada.util.annotation.AuthorizationConfig;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
26 import de.intevation.lada.util.annotation.RepositoryConfig;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
27 import de.intevation.lada.util.auth.Authorization;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
28 import de.intevation.lada.util.auth.AuthorizationType;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
29 import de.intevation.lada.util.auth.UserInfo;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
30 import de.intevation.lada.util.data.QueryBuilder;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
31 import de.intevation.lada.util.data.Repository;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
32 import de.intevation.lada.util.data.RepositoryType;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
33 import de.intevation.lada.util.rest.Response;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
34
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
35 @Path("rest/filter")
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
36 @RequestScoped
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
37 public class FilterService {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
38
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
39 @Inject
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
40 @AuthorizationConfig(type=AuthorizationType.HEADER)
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
41 private Authorization authorization;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
42
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
43 @Inject
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
44 @RepositoryConfig(type=RepositoryType.RW)
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
45 private Repository repository;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
46
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
47 @PUT
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
48 @Path("/")
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
49 @Produces(MediaType.APPLICATION_JSON)
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
50 public Response update(
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
51 @Context HttpServletRequest request,
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
52 Filter filter
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
53 ) {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
54 UserInfo userInfo = authorization.getInfo(request);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
55 String value = filter.getValue();
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
56 Filter f = repository.getByIdPlain(Filter.class, filter.getId(), "stamm");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
57 QueryBuilder<FilterValue> builder = new QueryBuilder<FilterValue>(
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
58 repository.entityManager("stamm"),
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
59 FilterValue.class
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
60 );
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
61 builder.and("userId", userInfo.getUserId());
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
62 builder.and("filterId", f.getId());
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
63 List<FilterValue> values = repository.filterPlain(builder.getQuery(), "stamm");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
64 if (values == null || values.isEmpty()) {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
65 FilterValue newValue = new FilterValue();
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
66 newValue.setFilterId(f.getId());
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
67 newValue.setUserId(userInfo.getUserId());
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
68 newValue.setValue(value);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
69 repository.create(newValue, "stamm");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
70 f.setValue(value);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
71 return new Response(true, 200, f);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
72 }
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
73 else {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
74 FilterValue fv = values.get(0);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
75 fv.setValue(value);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
76 repository.update(fv, "stamm");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
77 f.setValue(value);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
78 return new Response(true, 200, f);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
79 }
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
80 }
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
81
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
82 @DELETE
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
83 @Path("/{id}")
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
84 @Produces(MediaType.APPLICATION_JSON)
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
85 public Response delete(
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
86 @Context HttpServletRequest request,
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
87 @PathParam("id") String id
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
88 ) {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
89 UserInfo userInfo = authorization.getInfo(request);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
90 Integer fId = Integer.valueOf(id);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
91 Filter f = repository.getByIdPlain(Filter.class, fId, "stamm");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
92 QueryBuilder<FilterValue> builder = new QueryBuilder<FilterValue>(
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
93 repository.entityManager("stamm"),
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
94 FilterValue.class
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
95 );
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
96 builder.and("userId", userInfo.getUserId());
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
97 builder.and("filterId", f.getId());
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
98 List<FilterValue> values = repository.filterPlain(builder.getQuery(), "stamm");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
99 if (values == null || values.isEmpty()) {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
100 return new Response(false, 618, "not existing");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
101 }
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
102 repository.delete(values.get(0), "stamm");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
103 QueryBuilder<FilterValue> fvBuilder = builder.getEmptyBuilder();
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
104 fvBuilder.and("userId", 0);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
105 fvBuilder.and("filterId", f.getId());
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
106 List<FilterValue> basicValues = repository.filterPlain(fvBuilder.getQuery(), "stamm");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
107 if (basicValues == null || basicValues.isEmpty()) {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
108 f.setValue(null);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
109 return new Response(true, 200, f);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
110 }
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
111 f.setValue(basicValues.get(0).getValue());
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
112 return new Response(true, 200, f);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
113 }
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
114 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)