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 | 16 | * Findet einen {@link User} aufgrund seiner Id. |
17 | 17 | * |
18 | 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 | 21 | public User findById(final Long id) { |
22 | 22 | User user = null; |
... | ... | @@ -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 | 41 | public User findByUsername(final String username) { |
42 | 42 | User user = null; | ... | ... |
src/main/java/net/ziemers/swxercise/lg/model/user/Role.java
... | ... | @@ -13,6 +13,7 @@ import java.util.HashSet; |
13 | 13 | * Eine Rolle kann von einer Vaterrolle erben. Somit umfasst diese Rolle auch alle Rechte der Vaterrolle. |
14 | 14 | */ |
15 | 15 | @Entity |
16 | +@NamedQuery(name = "Role.findByName", query = "SELECT r FROM Role r WHERE lower(r.name) = lower(:name)") | |
16 | 17 | public class Role extends BaseEntity { |
17 | 18 | |
18 | 19 | @NotNull | ... | ... |
src/main/java/net/ziemers/swxercise/lg/model/user/User.java
... | ... | @@ -11,7 +11,7 @@ import net.ziemers.swxercise.db.BaseEntity; |
11 | 11 | @Entity |
12 | 12 | @NamedQueries({ |
13 | 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 | 15 | public class User extends BaseEntity { |
16 | 16 | |
17 | 17 | private String firstname; | ... | ... |
src/main/java/net/ziemers/swxercise/lg/user/service/RoleService.java
1 | 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 | 4 | import net.ziemers.swxercise.lg.model.user.Role; |
5 | 5 | import net.ziemers.swxercise.lg.user.dto.RoleDto; |
6 | 6 | |
... | ... | @@ -15,16 +15,30 @@ import java.util.Collection; |
15 | 15 | public class RoleService { |
16 | 16 | |
17 | 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 | 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 | 79 | |
80 | 80 | /** |
81 | 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 | 84 | * @param dto das {@link UserDto} enthält die Eigenschaften des zu erstellenden Benutzers |
84 | 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 | 4 | import net.ziemers.swxercise.lg.user.dto.RoleDto; |
5 | 5 | import net.ziemers.swxercise.lg.user.enums.RightState; |
6 | 6 | import net.ziemers.swxercise.lg.user.service.RoleService; |
7 | +import net.ziemers.swxercise.ui.enums.ResponseState; | |
7 | 8 | |
8 | 9 | import javax.annotation.security.RolesAllowed; |
9 | 10 | import javax.enterprise.context.ApplicationScoped; |
... | ... | @@ -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 | 53 | @POST |
50 | 54 | @Path("v1/role") |
... | ... | @@ -52,8 +56,11 @@ public class RoleViewController { |
52 | 56 | @Produces(MediaType.APPLICATION_JSON) |
53 | 57 | @RolesAllowed(RightState.Constants.ADMIN) |
54 | 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 | } | ... | ... |