Commit ca6ae44bdaa56aa1ff49e558a054a334a190ad5f
1 parent
b9d5c203
feature: Rollen erstellen und auflisten
Showing
7 changed files
with
77 additions
and
18 deletions
src/main/java/net/ziemers/swxercise/db/dao/user/RoleDao.java
0 → 100644
1 | +package net.ziemers.swxercise.db.dao.user; | ||
2 | + | ||
3 | +import net.ziemers.swxercise.db.dao.GenericDao; | ||
4 | +import net.ziemers.swxercise.lg.model.user.Role; | ||
5 | +import net.ziemers.swxercise.lg.model.user.User; | ||
6 | + | ||
7 | +import javax.ejb.Stateless; | ||
8 | + | ||
9 | +/** | ||
10 | + * Stellt Persistenz-Funktionalität im Kontext der Rollen- und Rechteverwaltung | ||
11 | + * zur Verfügung. | ||
12 | + */ | ||
13 | +@Stateless | ||
14 | +public class RoleDao extends GenericDao { | ||
15 | + | ||
16 | + /** | ||
17 | + * Findet eine {@link Role} aufgrund ihres Rollennamens. | ||
18 | + * | ||
19 | + * @param name der name der gewünschten Rolle | ||
20 | + * @return den User oder null, falls es keinen gibt. | ||
21 | + */ | ||
22 | + public Role findByName(final String name) { | ||
23 | + Role role = null; | ||
24 | + | ||
25 | + try { | ||
26 | + // ermittelt den ersten Datensatz mit dem gesuchten Rollennamen, | ||
27 | + // auch wenn er sich nicht im Persistence Context befindet | ||
28 | + role = (Role) entityManager.createNamedQuery("Role.findByName") | ||
29 | + .setParameter("name", name).getSingleResult(); | ||
30 | + } catch (Exception e) { | ||
31 | + /* nix */ | ||
32 | + } | ||
33 | + return role; | ||
34 | + } | ||
35 | + | ||
36 | +} |
src/main/java/net/ziemers/swxercise/db/dao/user/UserDao.java
@@ -16,7 +16,7 @@ public class UserDao extends GenericDao { | @@ -16,7 +16,7 @@ public class UserDao extends GenericDao { | ||
16 | * Findet einen {@link User} aufgrund seiner Id. | 16 | * Findet einen {@link User} aufgrund seiner Id. |
17 | * | 17 | * |
18 | * @param id die Id des gewünschten Users | 18 | * @param id die Id des gewünschten Users |
19 | - * @return den User oder null, falls es keinen gibt. | 19 | + * @return den User oder <code>null</code>, falls es keinen gibt. |
20 | */ | 20 | */ |
21 | public User findById(final Long id) { | 21 | public User findById(final Long id) { |
22 | User user = null; | 22 | User user = null; |
@@ -33,10 +33,10 @@ public class UserDao extends GenericDao { | @@ -33,10 +33,10 @@ public class UserDao extends GenericDao { | ||
33 | } | 33 | } |
34 | 34 | ||
35 | /** | 35 | /** |
36 | - * Findet einen {@link User} aufgrund seiner Id. | 36 | + * Findet einen {@link User} aufgrund seines Benutzernamens. |
37 | * | 37 | * |
38 | - * @param username der username des gewünschten Users | ||
39 | - * @return den User oder null, falls es keinen gibt. | 38 | + * @param username der username des gewünschten Benutzers |
39 | + * @return den User oder <code>null</code>, falls es keinen gibt. | ||
40 | */ | 40 | */ |
41 | public User findByUsername(final String username) { | 41 | public User findByUsername(final String username) { |
42 | User user = null; | 42 | User user = null; |
src/main/java/net/ziemers/swxercise/lg/model/user/Role.java
@@ -13,6 +13,7 @@ import java.util.HashSet; | @@ -13,6 +13,7 @@ import java.util.HashSet; | ||
13 | * Eine Rolle kann von einer Vaterrolle erben. Somit umfasst diese Rolle auch alle Rechte der Vaterrolle. | 13 | * Eine Rolle kann von einer Vaterrolle erben. Somit umfasst diese Rolle auch alle Rechte der Vaterrolle. |
14 | */ | 14 | */ |
15 | @Entity | 15 | @Entity |
16 | +@NamedQuery(name = "Role.findByName", query = "SELECT r FROM Role r WHERE lower(r.name) = lower(:name)") | ||
16 | public class Role extends BaseEntity { | 17 | public class Role extends BaseEntity { |
17 | 18 | ||
18 | @NotNull | 19 | @NotNull |
src/main/java/net/ziemers/swxercise/lg/model/user/User.java
@@ -11,7 +11,7 @@ import net.ziemers.swxercise.db.BaseEntity; | @@ -11,7 +11,7 @@ import net.ziemers.swxercise.db.BaseEntity; | ||
11 | @Entity | 11 | @Entity |
12 | @NamedQueries({ | 12 | @NamedQueries({ |
13 | @NamedQuery(name = "User.findById", query = "SELECT u FROM User u WHERE u.id = :id"), | 13 | @NamedQuery(name = "User.findById", query = "SELECT u FROM User u WHERE u.id = :id"), |
14 | - @NamedQuery(name = "User.findByUsername", query = "SELECT u FROM User u WHERE u.profile.username = :username")}) | 14 | + @NamedQuery(name = "User.findByUsername", query = "SELECT u FROM User u WHERE lower(u.profile.username) = lower(:username)")}) |
15 | public class User extends BaseEntity { | 15 | public class User extends BaseEntity { |
16 | 16 | ||
17 | private String firstname; | 17 | private String firstname; |
src/main/java/net/ziemers/swxercise/lg/user/service/RoleService.java
1 | package net.ziemers.swxercise.lg.user.service; | 1 | package net.ziemers.swxercise.lg.user.service; |
2 | 2 | ||
3 | -import net.ziemers.swxercise.db.dao.GenericDao; | 3 | +import net.ziemers.swxercise.db.dao.user.RoleDao; |
4 | import net.ziemers.swxercise.lg.model.user.Role; | 4 | import net.ziemers.swxercise.lg.model.user.Role; |
5 | import net.ziemers.swxercise.lg.user.dto.RoleDto; | 5 | import net.ziemers.swxercise.lg.user.dto.RoleDto; |
6 | 6 | ||
@@ -15,16 +15,30 @@ import java.util.Collection; | @@ -15,16 +15,30 @@ import java.util.Collection; | ||
15 | public class RoleService { | 15 | public class RoleService { |
16 | 16 | ||
17 | @Inject | 17 | @Inject |
18 | - private GenericDao dao; | 18 | + private RoleDao dao; |
19 | 19 | ||
20 | - public Collection<Role> findAllRoles() { | ||
21 | - // TODO noch zu implementieren | ||
22 | - return null; | ||
23 | - } | 20 | + /** |
21 | + * Findet alle existierenden Rollen. | ||
22 | + * | ||
23 | + * @return alle Rollen, oder eine leere Collection, falls keine existieren. | ||
24 | + */ | ||
25 | + public Collection<Role> findAllRoles() { return dao.findAll(Role.class); } | ||
24 | 26 | ||
27 | + /** | ||
28 | + * Erstellt eine neue Rolle, sofern noch keine mit dem selben Namen existiert. | ||
29 | + * Zwischen der Groß- und Kleinschreibung wird nicht unterschieden. | ||
30 | + * | ||
31 | + * @param dto das {@link RoleDto} enthält die Eigenschaften der zu erstellenden Rolle | ||
32 | + * @return die Id der neuen Rolle, wenn die Erstellung erfolgreich war. | ||
33 | + */ | ||
25 | public Long createRole(final RoleDto dto) { | 34 | public Long createRole(final RoleDto dto) { |
26 | - final Role role = new Role(dto.getName(), dto.getRight()); | ||
27 | - return dao.save(role); | 35 | + Role role = dao.findByName(dto.getName()); |
36 | + if (role == null) { | ||
37 | + role = new Role(dto.getName(), dto.getRight()); | ||
38 | + | ||
39 | + return dao.save(role); | ||
40 | + } | ||
41 | + return null; | ||
28 | } | 42 | } |
29 | 43 | ||
30 | } | 44 | } |
src/main/java/net/ziemers/swxercise/lg/user/service/UserService.java
@@ -79,6 +79,7 @@ public class UserService { | @@ -79,6 +79,7 @@ public class UserService { | ||
79 | 79 | ||
80 | /** | 80 | /** |
81 | * Erstellt einen neuen Benutzer, sofern noch keiner mit dem selben Benutzernamen existiert. | 81 | * Erstellt einen neuen Benutzer, sofern noch keiner mit dem selben Benutzernamen existiert. |
82 | + * Zwischen der Groß- und Kleinschreibung wird nicht unterschieden. | ||
82 | * | 83 | * |
83 | * @param dto das {@link UserDto} enthält die Eigenschaften des zu erstellenden Benutzers | 84 | * @param dto das {@link UserDto} enthält die Eigenschaften des zu erstellenden Benutzers |
84 | * @return die Id des neuen Benutzers, wenn die Erstellung erfolgreich war. | 85 | * @return die Id des neuen Benutzers, wenn die Erstellung erfolgreich war. |
src/main/java/net/ziemers/swxercise/ui/RoleViewController.java
@@ -4,6 +4,7 @@ import net.ziemers.swxercise.lg.model.user.Role; | @@ -4,6 +4,7 @@ import net.ziemers.swxercise.lg.model.user.Role; | ||
4 | import net.ziemers.swxercise.lg.user.dto.RoleDto; | 4 | import net.ziemers.swxercise.lg.user.dto.RoleDto; |
5 | import net.ziemers.swxercise.lg.user.enums.RightState; | 5 | import net.ziemers.swxercise.lg.user.enums.RightState; |
6 | import net.ziemers.swxercise.lg.user.service.RoleService; | 6 | import net.ziemers.swxercise.lg.user.service.RoleService; |
7 | +import net.ziemers.swxercise.ui.enums.ResponseState; | ||
7 | 8 | ||
8 | import javax.annotation.security.RolesAllowed; | 9 | import javax.annotation.security.RolesAllowed; |
9 | import javax.enterprise.context.ApplicationScoped; | 10 | import javax.enterprise.context.ApplicationScoped; |
@@ -41,10 +42,13 @@ public class RoleViewController { | @@ -41,10 +42,13 @@ public class RoleViewController { | ||
41 | } | 42 | } |
42 | 43 | ||
43 | /** | 44 | /** |
44 | - * Erstellt eine neue Rolle. | 45 | + * Erstellt ein neues Role-Objekt mit den gewünschten Eigenschaften, welche mittels {@link RoleDto} definiert werden. |
46 | + * <p> | ||
47 | + * Aufruf: | ||
48 | + * POST http://localhost:8080/swxercise/rest/v1/role | ||
45 | * | 49 | * |
46 | - * @param dto | ||
47 | - * @return | 50 | + * @param dto das mittels der als JSON-Objekt übergebenenen Eigenschaften zu füllende {@link RoleDto} |
51 | + * @return ein {@link ResponseState}-Objekt mit den Ergebnisinformationen des Aufrufs. | ||
48 | */ | 52 | */ |
49 | @POST | 53 | @POST |
50 | @Path("v1/role") | 54 | @Path("v1/role") |
@@ -52,8 +56,11 @@ public class RoleViewController { | @@ -52,8 +56,11 @@ public class RoleViewController { | ||
52 | @Produces(MediaType.APPLICATION_JSON) | 56 | @Produces(MediaType.APPLICATION_JSON) |
53 | @RolesAllowed(RightState.Constants.ADMIN) | 57 | @RolesAllowed(RightState.Constants.ADMIN) |
54 | public RestResponse createRole(RoleDto dto) { | 58 | public RestResponse createRole(RoleDto dto) { |
55 | - Long id = roleService.createRole(dto); | ||
56 | - return new RestResponse(); | 59 | + final Long id = roleService.createRole(dto); |
60 | + if (id != null) { | ||
61 | + return new RestResponse(ResponseState.SUCCESS, String.valueOf(id)); | ||
62 | + } | ||
63 | + return new RestResponse(ResponseState.ALREADY_EXISTING); | ||
57 | } | 64 | } |
58 | 65 | ||
59 | } | 66 | } |