Commit 32cb94148d6c24ca185c26ffebf3dc45b8666b65

Authored by Thomas Ziemer
1 parent 86ec838e

feature: UserViewController und UserService optimiert

... ... @@ -43,6 +43,7 @@
43 43 <groupId>javax.ws.rs</groupId>
44 44 <artifactId>javax.ws.rs-api</artifactId>
45 45 <version>${jaxrs-version}</version>
  46 + <scope>provided</scope>
46 47 </dependency>
47 48 <dependency>
48 49 <groupId>junit</groupId>
... ... @@ -81,6 +82,7 @@
81 82 <groupId>mysql</groupId>
82 83 <artifactId>mysql-connector-java</artifactId>
83 84 <version>${mysql-version}</version>
  85 + <scope>provided</scope>
84 86 </dependency>
85 87 <dependency>
86 88 <groupId>org.jglue.cdi-unit</groupId>
... ...
src/main/java/net/ziemers/swxercise/lg/user/service/UserService.java
... ... @@ -58,11 +58,10 @@ public class UserService {
58 58 }
59 59  
60 60 public boolean deleteUser() {
  61 + // ist zurzeit ein Benutzer angemeldet, können wir ihn löschen
61 62 final User user = sessionContext.getUser();
62   -
63 63 if (user != null) {
64   - dao.remove(User.class, user.getId());
65   - return true;
  64 + return dao.remove(User.class, user.getId()) != null;
66 65 }
67 66 return false;
68 67 }
... ...
src/main/java/net/ziemers/swxercise/ui/OtherViewController.java 0 → 100644
  1 +package net.ziemers.swxercise.ui;
  2 +
  3 +import javax.faces.bean.ApplicationScoped;
  4 +import javax.ws.rs.GET;
  5 +import javax.ws.rs.Path;
  6 +import javax.ws.rs.Produces;
  7 +import javax.ws.rs.core.MediaType;
  8 +
  9 +/**
  10 + * REST-Methoden, die nirgendwo besser hinpassen.
  11 + */
  12 +@ApplicationScoped
  13 +@Path(UserViewController.webContextPath)
  14 +public class OtherViewController {
  15 +
  16 + static final String webContextPath = "/";
  17 +
  18 + @GET
  19 + @Path("/v1/ping")
  20 + @Produces(MediaType.TEXT_PLAIN)
  21 + public String ping() {
  22 + return "pong";
  23 + }
  24 +
  25 +}
... ...
src/main/java/net/ziemers/swxercise/ui/RestResponse.java
... ... @@ -6,6 +6,8 @@ public class RestResponse {
6 6  
7 7 private ResponseState responseState;
8 8  
  9 + private String message;
  10 +
9 11 public RestResponse() {
10 12 this(ResponseState.SUCCESS);
11 13 }
... ... @@ -14,6 +16,11 @@ public class RestResponse {
14 16 this.responseState = responseState;
15 17 }
16 18  
  19 + public RestResponse(final ResponseState responseState, final String message) {
  20 + this(responseState);
  21 + this.message = message;
  22 + }
  23 +
17 24 public int getResponseCode() {
18 25 return responseState.getResponseCode();
19 26 }
... ... @@ -22,6 +29,8 @@ public class RestResponse {
22 29 return responseState.getResponseText();
23 30 }
24 31  
  32 + public String getMessage() { return message; }
  33 +
25 34 @Override
26 35 public boolean equals(Object o) {
27 36 if (this == o) return true;
... ...
src/main/java/net/ziemers/swxercise/ui/UserViewController.java
... ... @@ -20,7 +20,7 @@ import net.ziemers.swxercise.ui.enums.ResponseState;
20 20 @Path(UserViewController.webContextPath)
21 21 public class UserViewController {
22 22  
23   - static final String webContextPath = "/users";
  23 + static final String webContextPath = "/";
24 24  
25 25 @Inject
26 26 private UserService userService;
... ... @@ -29,11 +29,12 @@ public class UserViewController {
29 29 * Liefert alle User-Objekte zurück.
30 30 *
31 31 * Aufruf:
32   - * GET http://localhost:8080/swxercise/rest/users
  32 + * GET http://localhost:8080/swxercise/rest/v1/users
33 33 *
34   - * @return die User-Objekte.
  34 + * @return die User-Objekte, oder ein leeres JSON-Array, falls keine existieren.
35 35 */
36 36 @GET
  37 + @Path("v1/users")
37 38 @Produces(MediaType.APPLICATION_JSON)
38 39 public Collection<User> getAllUsers() {
39 40 return userService.findAllUsers();
... ... @@ -43,13 +44,13 @@ public class UserViewController {
43 44 * Liefert das User-Objekt mit der gewünschten Id zurück.
44 45 *
45 46 * Aufruf:
46   - * GET http://localhost:8080/swxercise/rest/users/42
  47 + * GET http://localhost:8080/swxercise/rest/v1/user/42
47 48 *
48 49 * @param id die Id des gewünschten User-Objekts
49   - * @return das User-Objekt.
  50 + * @return das User-Objekt als JSON, oder <code>null</code>, falls keines existiert.
50 51 */
51 52 @GET
52   - @Path("{id}")
  53 + @Path("v1/user/{id}")
53 54 @Produces(MediaType.APPLICATION_JSON)
54 55 public User getById(@PathParam("id") Long id) {
55 56 return userService.findUser(id);
... ... @@ -59,35 +60,41 @@ public class UserViewController {
59 60 * Erstellt ein neues User-Objekt mit den gewünschten Eigenschaften, welche mittels {@link UserDto} definiert werden.
60 61 *
61 62 * Aufruf:
62   - * POST http://localhost:8080/swxercise/rest/users
  63 + * POST http://localhost:8080/swxercise/rest/v1/user
63 64 *
64 65 * @param dto das mittels der als JSON-Objekt übergebenenen Eigenschaften zu füllende {@link UserDto}
65   - * @return "Ok", wenn die Erstellung des User-Objekts erfolgreich war.
66   - * @throws Exception wirft eine Exception, wenn das Erstellen des UserDto fehlschlug
  66 + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs.
  67 +
67 68 */
68 69 @POST
  70 + @Path("v1/user")
69 71 @Consumes(MediaType.APPLICATION_JSON)
70 72 @Produces(MediaType.APPLICATION_JSON)
71   - public RestResponse createUser(UserDto dto) throws Exception {
72   - userService.createUser(dto);
73   - return new RestResponse();
  73 + public RestResponse createUser(UserDto dto) {
  74 + final Long id = userService.createUser(dto);
  75 + if (id != null) {
  76 + return new RestResponse(ResponseState.SUCCESS, String.valueOf(id));
  77 + }
  78 + return new RestResponse(ResponseState.ALREADY_EXISTING);
74 79 }
75 80  
76 81 /**
77   - * Aktualisiert das User-Objekt mit der gewünschten Id mit den Eigenschaften, welche mittels {@link UserDto} definiert werden.
  82 + * Aktualisiert das User-Objekt mit der gewünschten Id mit den Eigenschaften,
  83 + * welche mittels {@link UserDto} definiert werden. Der Pfadparameter wird
  84 + * als erstes ge'marshal't, das DTO im Post-Content danach (REST-Konvention).
78 85 *
79 86 * Aufruf:
80   - * PUT http://localhost:8080/swxercise/rest/users/42
  87 + * PUT http://localhost:8080/swxercise/rest/v1/user/42
81 88 *
82   - * @param id die Id des gewünschten User-Objekts
83   - * @return "Ok", wenn die Erstellung des User-Objekts erfolgreich war.
84   - * @throws Exception wirft eine Exception, wenn das Erstellen des UserDto fehlschlug
  89 + * @param id die Id des zu aktualisierenden User-Objekts
  90 + * @param dto das mittels der als JSON-Objekt übergebenenen Eigenschaften zu füllende {@link UserDto}
  91 + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs.
85 92 */
86 93 @PUT
87   - @Path("{id}")
  94 + @Path("v1/user/{id}")
88 95 @Consumes(MediaType.APPLICATION_JSON)
89 96 @Produces(MediaType.APPLICATION_JSON)
90   - public RestResponse updateUser(@PathParam("id") Long id) throws Exception {
  97 + public RestResponse updateUser(@PathParam("id") Long id, UserDto dto) {
91 98 // TODO noch zu implementieren
92 99 return new RestResponse(ResponseState.FAILED);
93 100 }
... ... @@ -96,13 +103,13 @@ public class UserViewController {
96 103 * Löscht das User-Objekt mit der gewünschten Id.
97 104 *
98 105 * Aufruf:
99   - * DELETE http://localhost:8080/swxercise/rest/users/42
  106 + * DELETE http://localhost:8080/swxercise/rest/v1/user/42
100 107 *
101 108 * @param id die Id des gewünschten User-Objekts
102   - * @return "Ok", wenn die Erstellung des User-Objekts erfolgreich war.
  109 + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs.
103 110 */
104 111 @DELETE
105   - @Path("{id}")
  112 + @Path("v1/user/{id}")
106 113 @Produces(MediaType.APPLICATION_JSON)
107 114 public RestResponse deleteUser(@PathParam("id") Long id) {
108 115 userService.deleteUser(id);
... ... @@ -113,11 +120,12 @@ public class UserViewController {
113 120 * Löscht das User-Objekt des zurzeit angemeldeten Benutzers.
114 121 *
115 122 * Aufruf:
116   - * DELETE http://localhost:8080/swxercise/rest/users
  123 + * DELETE http://localhost:8080/swxercise/rest/v1/user
117 124 *
118   - * @return "Ok", wenn das Löschen des User-Objekts erfolgreich war.
  125 + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs.
119 126 */
120 127 @DELETE
  128 + @Path("v1/user")
121 129 @Produces(MediaType.APPLICATION_JSON)
122 130 public RestResponse deleteUser() {
123 131 if (userService.deleteUser()) {
... ... @@ -130,13 +138,13 @@ public class UserViewController {
130 138 * Meldet einen Benutzer durch übergebenen username und password mit einem neuen User-{@link SessionContext} an.
131 139 *
132 140 * Aufruf:
133   - * POST http://localhost:8080/swxercise/rest/users/login
  141 + * POST http://localhost:8080/swxercise/rest/v1/user/login
134 142 *
135 143 * @param dto das mittels der als JSON-Objekt übergebenenen Eigenschaften zu füllende {@link UserDto}
136   - * @return "Ok", wenn die Erstellung des User-Objekts erfolgreich war.
  144 + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs.
137 145 */
138 146 @POST
139   - @Path("/login")
  147 + @Path("v1/user/login")
140 148 @Consumes(MediaType.APPLICATION_JSON)
141 149 @Produces(MediaType.APPLICATION_JSON)
142 150 public RestResponse loginUser(UserDto dto) {
... ... @@ -150,13 +158,12 @@ public class UserViewController {
150 158 * Meldet den angemeldeten Benutzer von seinem User-{@link SessionContext} ab.
151 159 *
152 160 * Aufruf:
153   - * POST http://localhost:8080/swxercise/rest/users/logout
  161 + * POST http://localhost:8080/swxercise/rest/v1/user/logout
154 162 *
155   - * @return "Ok", wenn die Erstellung des User-Objekts erfolgreich war.
  163 + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs.
156 164 */
157 165 @POST
158   - @Path("/logout")
159   - @Consumes(MediaType.APPLICATION_JSON)
  166 + @Path("v1/user/logout")
160 167 @Produces(MediaType.APPLICATION_JSON)
161 168 public RestResponse logoutUser() {
162 169 if (userService.logoutUser()) {
... ...
src/main/java/net/ziemers/swxercise/ui/enums/ResponseState.java
... ... @@ -4,6 +4,7 @@ public enum ResponseState {
4 4  
5 5 SUCCESS(0, "Success"),
6 6 FAILED(1, "Failed"),
  7 + ALREADY_EXISTING(2, "Already existing"),
7 8 ;
8 9  
9 10 private final int responseCode;
... ...