Commit ca6ae44bdaa56aa1ff49e558a054a334a190ad5f

Authored by Thomas Ziemer
1 parent b9d5c203

feature: Rollen erstellen und auflisten

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 }