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