annotate src/main/java/de/intevation/lada/rest/stamm/FavoriteService.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 49c88a71909b
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.ejb.EJBTransactionRolledbackException;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
13 import javax.enterprise.context.RequestScoped;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
14 import javax.inject.Inject;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
15 import javax.persistence.TransactionRequiredException;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
16 import javax.servlet.http.HttpServletRequest;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
17 import javax.ws.rs.DELETE;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
18 import javax.ws.rs.POST;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
19 import javax.ws.rs.Path;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
20 import javax.ws.rs.Produces;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
21 import javax.ws.rs.core.Context;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
22 import javax.ws.rs.core.HttpHeaders;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
23 import javax.ws.rs.core.MediaType;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
24 import javax.ws.rs.core.MultivaluedMap;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
25 import javax.ws.rs.core.UriInfo;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
26
1028
1c41c7b8f7c2 Updated server application to new database model. THIS IS STILL WIP!!!
Raimund Renkert <raimund.renkert@intevation.de>
parents: 858
diff changeset
27 import de.intevation.lada.model.stammdaten.Favorite;
858
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
28 import de.intevation.lada.util.annotation.AuthorizationConfig;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
29 import de.intevation.lada.util.annotation.RepositoryConfig;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
30 import de.intevation.lada.util.auth.Authorization;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
31 import de.intevation.lada.util.auth.AuthorizationType;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
32 import de.intevation.lada.util.auth.UserInfo;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
33 import de.intevation.lada.util.data.QueryBuilder;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
34 import de.intevation.lada.util.data.Repository;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
35 import de.intevation.lada.util.data.RepositoryType;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
36 import de.intevation.lada.util.rest.Response;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
37
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 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a>
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
40 */
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
41 @Path("rest/favorite")
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
42 @RequestScoped
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
43 public class FavoriteService {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
44
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
45 /**
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
46 * The data repository granting read/write access.
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
47 */
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
48 @Inject
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
49 @RepositoryConfig(type=RepositoryType.RW)
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
50 private Repository repository;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
51
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
52 /**
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
53 * The authorization module.
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
54 */
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
55 @Inject
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
56 @AuthorizationConfig(type=AuthorizationType.HEADER)
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
57 private Authorization authorization;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
58
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
59 @POST
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
60 @Path("/")
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
61 @Produces(MediaType.APPLICATION_JSON)
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
62 public Response create(
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
63 @Context HttpHeaders headers,
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
64 @Context HttpServletRequest request,
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
65 Favorite favorite
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
66 ) {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
67 UserInfo userInfo = authorization.getInfo(request);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
68 favorite.setUserId(userInfo.getUserId());
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
69 QueryBuilder<Favorite> builder = new QueryBuilder<Favorite>(
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
70 repository.entityManager("stamm"),
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
71 Favorite.class
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 builder.and("userId", userInfo.getUserId());
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
74 builder.and("queryId", favorite.getQueryId());
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
75 List<Favorite> favorites = repository.filterPlain(builder.getQuery(), "stamm");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
76 if (favorites.isEmpty()) {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
77 return repository.create(favorite, "stamm");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
78 }
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
79 return new Response(false, 617, "exists");
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("/")
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 HttpHeaders headers,
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
87 @Context UriInfo info,
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
88 @Context HttpServletRequest request
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
89 ) {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
90 UserInfo userInfo = authorization.getInfo(request);
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
91
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
92 MultivaluedMap<String, String> params = info.getQueryParameters();
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
93 if (params.isEmpty() || !params.containsKey("queryId")) {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
94 return new Response(false, 618, "missing queryId parameter");
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 QueryBuilder<Favorite> builder = new QueryBuilder<Favorite>(
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
97 repository.entityManager("stamm"),
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
98 Favorite.class
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
99 );
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
100 builder.and("userId", userInfo.getUserId());
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
101 builder.and("queryId", params.getFirst("queryId"));
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
102
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
103 List<Favorite> fs = repository.filterPlain(builder.getQuery(), "stamm");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
104 if (fs == null || fs.isEmpty()) {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
105 return new Response(false, 600, "not existing");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
106 }
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
107 /* Delete the object*/
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
108 try {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
109 Response response = repository.delete(fs.get(0), "stamm");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
110 return response;
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
111 }
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
112 catch(IllegalArgumentException | EJBTransactionRolledbackException |
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
113 TransactionRequiredException e) {
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
114 return new Response(false, 600, "");
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
115 }
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
116 }
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
117
49c88a71909b Added services for favorites and filter.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
118 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)