Mercurial > lada > lada-server
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 } |