Commit 32cb94148d6c24ca185c26ffebf3dc45b8666b65

Authored by Thomas Ziemer
1 parent 86ec838e

feature: UserViewController und UserService optimiert

@@ -43,6 +43,7 @@ @@ -43,6 +43,7 @@
43 <groupId>javax.ws.rs</groupId> 43 <groupId>javax.ws.rs</groupId>
44 <artifactId>javax.ws.rs-api</artifactId> 44 <artifactId>javax.ws.rs-api</artifactId>
45 <version>${jaxrs-version}</version> 45 <version>${jaxrs-version}</version>
  46 + <scope>provided</scope>
46 </dependency> 47 </dependency>
47 <dependency> 48 <dependency>
48 <groupId>junit</groupId> 49 <groupId>junit</groupId>
@@ -81,6 +82,7 @@ @@ -81,6 +82,7 @@
81 <groupId>mysql</groupId> 82 <groupId>mysql</groupId>
82 <artifactId>mysql-connector-java</artifactId> 83 <artifactId>mysql-connector-java</artifactId>
83 <version>${mysql-version}</version> 84 <version>${mysql-version}</version>
  85 + <scope>provided</scope>
84 </dependency> 86 </dependency>
85 <dependency> 87 <dependency>
86 <groupId>org.jglue.cdi-unit</groupId> 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,11 +58,10 @@ public class UserService {
58 } 58 }
59 59
60 public boolean deleteUser() { 60 public boolean deleteUser() {
  61 + // ist zurzeit ein Benutzer angemeldet, können wir ihn löschen
61 final User user = sessionContext.getUser(); 62 final User user = sessionContext.getUser();
62 -  
63 if (user != null) { 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 return false; 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 +6,8 @@ public class RestResponse {
6 6
7 private ResponseState responseState; 7 private ResponseState responseState;
8 8
  9 + private String message;
  10 +
9 public RestResponse() { 11 public RestResponse() {
10 this(ResponseState.SUCCESS); 12 this(ResponseState.SUCCESS);
11 } 13 }
@@ -14,6 +16,11 @@ public class RestResponse { @@ -14,6 +16,11 @@ public class RestResponse {
14 this.responseState = responseState; 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 public int getResponseCode() { 24 public int getResponseCode() {
18 return responseState.getResponseCode(); 25 return responseState.getResponseCode();
19 } 26 }
@@ -22,6 +29,8 @@ public class RestResponse { @@ -22,6 +29,8 @@ public class RestResponse {
22 return responseState.getResponseText(); 29 return responseState.getResponseText();
23 } 30 }
24 31
  32 + public String getMessage() { return message; }
  33 +
25 @Override 34 @Override
26 public boolean equals(Object o) { 35 public boolean equals(Object o) {
27 if (this == o) return true; 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,7 +20,7 @@ import net.ziemers.swxercise.ui.enums.ResponseState;
20 @Path(UserViewController.webContextPath) 20 @Path(UserViewController.webContextPath)
21 public class UserViewController { 21 public class UserViewController {
22 22
23 - static final String webContextPath = "/users"; 23 + static final String webContextPath = "/";
24 24
25 @Inject 25 @Inject
26 private UserService userService; 26 private UserService userService;
@@ -29,11 +29,12 @@ public class UserViewController { @@ -29,11 +29,12 @@ public class UserViewController {
29 * Liefert alle User-Objekte zurück. 29 * Liefert alle User-Objekte zurück.
30 * 30 *
31 * Aufruf: 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 @GET 36 @GET
  37 + @Path("v1/users")
37 @Produces(MediaType.APPLICATION_JSON) 38 @Produces(MediaType.APPLICATION_JSON)
38 public Collection<User> getAllUsers() { 39 public Collection<User> getAllUsers() {
39 return userService.findAllUsers(); 40 return userService.findAllUsers();
@@ -43,13 +44,13 @@ public class UserViewController { @@ -43,13 +44,13 @@ public class UserViewController {
43 * Liefert das User-Objekt mit der gewünschten Id zurück. 44 * Liefert das User-Objekt mit der gewünschten Id zurück.
44 * 45 *
45 * Aufruf: 46 * Aufruf:
46 - * GET http://localhost:8080/swxercise/rest/users/42 47 + * GET http://localhost:8080/swxercise/rest/v1/user/42
47 * 48 *
48 * @param id die Id des gewünschten User-Objekts 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 @GET 52 @GET
52 - @Path("{id}") 53 + @Path("v1/user/{id}")
53 @Produces(MediaType.APPLICATION_JSON) 54 @Produces(MediaType.APPLICATION_JSON)
54 public User getById(@PathParam("id") Long id) { 55 public User getById(@PathParam("id") Long id) {
55 return userService.findUser(id); 56 return userService.findUser(id);
@@ -59,35 +60,41 @@ public class UserViewController { @@ -59,35 +60,41 @@ public class UserViewController {
59 * Erstellt ein neues User-Objekt mit den gewünschten Eigenschaften, welche mittels {@link UserDto} definiert werden. 60 * Erstellt ein neues User-Objekt mit den gewünschten Eigenschaften, welche mittels {@link UserDto} definiert werden.
60 * 61 *
61 * Aufruf: 62 * Aufruf:
62 - * POST http://localhost:8080/swxercise/rest/users 63 + * POST http://localhost:8080/swxercise/rest/v1/user
63 * 64 *
64 * @param dto das mittels der als JSON-Objekt übergebenenen Eigenschaften zu füllende {@link UserDto} 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 @POST 69 @POST
  70 + @Path("v1/user")
69 @Consumes(MediaType.APPLICATION_JSON) 71 @Consumes(MediaType.APPLICATION_JSON)
70 @Produces(MediaType.APPLICATION_JSON) 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 * Aufruf: 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 @PUT 93 @PUT
87 - @Path("{id}") 94 + @Path("v1/user/{id}")
88 @Consumes(MediaType.APPLICATION_JSON) 95 @Consumes(MediaType.APPLICATION_JSON)
89 @Produces(MediaType.APPLICATION_JSON) 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 // TODO noch zu implementieren 98 // TODO noch zu implementieren
92 return new RestResponse(ResponseState.FAILED); 99 return new RestResponse(ResponseState.FAILED);
93 } 100 }
@@ -96,13 +103,13 @@ public class UserViewController { @@ -96,13 +103,13 @@ public class UserViewController {
96 * Löscht das User-Objekt mit der gewünschten Id. 103 * Löscht das User-Objekt mit der gewünschten Id.
97 * 104 *
98 * Aufruf: 105 * Aufruf:
99 - * DELETE http://localhost:8080/swxercise/rest/users/42 106 + * DELETE http://localhost:8080/swxercise/rest/v1/user/42
100 * 107 *
101 * @param id die Id des gewünschten User-Objekts 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 @DELETE 111 @DELETE
105 - @Path("{id}") 112 + @Path("v1/user/{id}")
106 @Produces(MediaType.APPLICATION_JSON) 113 @Produces(MediaType.APPLICATION_JSON)
107 public RestResponse deleteUser(@PathParam("id") Long id) { 114 public RestResponse deleteUser(@PathParam("id") Long id) {
108 userService.deleteUser(id); 115 userService.deleteUser(id);
@@ -113,11 +120,12 @@ public class UserViewController { @@ -113,11 +120,12 @@ public class UserViewController {
113 * Löscht das User-Objekt des zurzeit angemeldeten Benutzers. 120 * Löscht das User-Objekt des zurzeit angemeldeten Benutzers.
114 * 121 *
115 * Aufruf: 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 @DELETE 127 @DELETE
  128 + @Path("v1/user")
121 @Produces(MediaType.APPLICATION_JSON) 129 @Produces(MediaType.APPLICATION_JSON)
122 public RestResponse deleteUser() { 130 public RestResponse deleteUser() {
123 if (userService.deleteUser()) { 131 if (userService.deleteUser()) {
@@ -130,13 +138,13 @@ public class UserViewController { @@ -130,13 +138,13 @@ public class UserViewController {
130 * Meldet einen Benutzer durch übergebenen username und password mit einem neuen User-{@link SessionContext} an. 138 * Meldet einen Benutzer durch übergebenen username und password mit einem neuen User-{@link SessionContext} an.
131 * 139 *
132 * Aufruf: 140 * Aufruf:
133 - * POST http://localhost:8080/swxercise/rest/users/login 141 + * POST http://localhost:8080/swxercise/rest/v1/user/login
134 * 142 *
135 * @param dto das mittels der als JSON-Objekt übergebenenen Eigenschaften zu füllende {@link UserDto} 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 @POST 146 @POST
139 - @Path("/login") 147 + @Path("v1/user/login")
140 @Consumes(MediaType.APPLICATION_JSON) 148 @Consumes(MediaType.APPLICATION_JSON)
141 @Produces(MediaType.APPLICATION_JSON) 149 @Produces(MediaType.APPLICATION_JSON)
142 public RestResponse loginUser(UserDto dto) { 150 public RestResponse loginUser(UserDto dto) {
@@ -150,13 +158,12 @@ public class UserViewController { @@ -150,13 +158,12 @@ public class UserViewController {
150 * Meldet den angemeldeten Benutzer von seinem User-{@link SessionContext} ab. 158 * Meldet den angemeldeten Benutzer von seinem User-{@link SessionContext} ab.
151 * 159 *
152 * Aufruf: 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 @POST 165 @POST
158 - @Path("/logout")  
159 - @Consumes(MediaType.APPLICATION_JSON) 166 + @Path("v1/user/logout")
160 @Produces(MediaType.APPLICATION_JSON) 167 @Produces(MediaType.APPLICATION_JSON)
161 public RestResponse logoutUser() { 168 public RestResponse logoutUser() {
162 if (userService.logoutUser()) { 169 if (userService.logoutUser()) {
src/main/java/net/ziemers/swxercise/ui/enums/ResponseState.java
@@ -4,6 +4,7 @@ public enum ResponseState { @@ -4,6 +4,7 @@ public enum ResponseState {
4 4
5 SUCCESS(0, "Success"), 5 SUCCESS(0, "Success"),
6 FAILED(1, "Failed"), 6 FAILED(1, "Failed"),
  7 + ALREADY_EXISTING(2, "Already existing"),
7 ; 8 ;
8 9
9 private final int responseCode; 10 private final int responseCode;