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