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 | } |