Commit bb6de6b9cd3ca7552a06384aa94c5736cf74faca

Authored by Thomas Ziemer
1 parent 5e5b7c79

feature: RoleService fortgesetzt (WIP)

README.md
@@ -28,9 +28,9 @@ Unter Windows muss der Git-Installer aus dem Internet heruntergeladen und instal @@ -28,9 +28,9 @@ Unter Windows muss der Git-Installer aus dem Internet heruntergeladen und instal
28 28
29 In einem beliebigen Verzeichnis ausführen: 29 In einem beliebigen Verzeichnis ausführen:
30 30
31 -> git clone https://git.ziemers.de/edu/swXercise.git 31 +> git -c http.sslVerify=false clone https://git.ziemers.de/edu/swXercise.git
32 32
33 -Es wird hierbei ein neues Verzeichnis namens "swXercise" erstellt, in dem sich nun das Projekt befindet. 33 +Es wird hierbei ein neues Verzeichnis namens "swXercise" erstellt, in dem sich nun das Projekt befindet. Beim Klonen werden etwaige Zertifikatsfehler ignoriert (dies tritt trotz korrekten Zertifikats gelegentlich unter Windows auf).
34 34
35 ## Projekt in die Entwicklungsumgebung integrieren 35 ## Projekt in die Entwicklungsumgebung integrieren
36 36
@@ -200,3 +200,7 @@ Quelle: https://tools.jboss.org/downloads/jbosstools/neon/4.4.3.Final.html @@ -200,3 +200,7 @@ Quelle: https://tools.jboss.org/downloads/jbosstools/neon/4.4.3.Final.html
200 - Reiter "Server" und den zuvor bekanntgemachten JBoss-Server wählen 200 - Reiter "Server" und den zuvor bekanntgemachten JBoss-Server wählen
201 - Reiter "Deployment" 201 - Reiter "Deployment"
202 - Selected artifacts will be deployed at server startup -> das gewünschte Maven-Artefakt "swXercise" auswählen, und zwar das mit "exploded" markierte; deployt als ausgepackte Ordnerstruktur und nicht als "WAR-Datei" (vorteilhaft beim Hot-Deployment) 202 - Selected artifacts will be deployed at server startup -> das gewünschte Maven-Artefakt "swXercise" auswählen, und zwar das mit "exploded" markierte; deployt als ausgepackte Ordnerstruktur und nicht als "WAR-Datei" (vorteilhaft beim Hot-Deployment)
  203 +
  204 +## Projekt verwenden
  205 +
  206 +Beim Deployen des Projekts auf den Application Server wird automatisch der Benutzer "admin" mit dem Kennwort "admin" erstellt und diesem die Rolle "Adminrolle" zugewiesen. Mit ihm kann man sich anmelden und erste Übungen vornehmen.
203 \ No newline at end of file 207 \ No newline at end of file
src/main/java/net/ziemers/swxercise/db/dao/user/RoleDao.java
@@ -14,6 +14,26 @@ import javax.ejb.Stateless; @@ -14,6 +14,26 @@ import javax.ejb.Stateless;
14 public class RoleDao extends GenericDao { 14 public class RoleDao extends GenericDao {
15 15
16 /** 16 /**
  17 + * Findet eine {@link Role} aufgrund ihrer Id.
  18 + *
  19 + * @param id die Id der gewünschten Rolle
  20 + * @return die Rolle oder <code>null</code>, falls es keine gibt.
  21 + */
  22 + public Role findById(final Long id) {
  23 + Role role = null;
  24 +
  25 + try {
  26 + // ermittelt den ersten Datensatz mit der gesuchten Id, auch wenn
  27 + // er sich nicht im Persistence Context befindet
  28 + role = (Role) entityManager.createNamedQuery("Role.findById")
  29 + .setParameter("id", id).getSingleResult();
  30 + } catch (Exception e) {
  31 + /* nix */
  32 + }
  33 + return role;
  34 + }
  35 +
  36 + /**
17 * Findet eine {@link Role} aufgrund ihres Rollennamens. 37 * Findet eine {@link Role} aufgrund ihres Rollennamens.
18 * 38 *
19 * @param name der name der gewünschten Rolle 39 * @param name der name der gewünschten Rolle
src/main/java/net/ziemers/swxercise/lg/model/user/Role.java
@@ -13,7 +13,9 @@ import java.util.HashSet; @@ -13,7 +13,9 @@ 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 +@NamedQueries({
  17 + @NamedQuery(name = "Role.findById", query = "SELECT r FROM Role r WHERE r.id = :id"),
  18 + @NamedQuery(name = "Role.findByName", query = "SELECT r FROM Role r WHERE lower(r.name) = lower(:name)")})
17 public class Role extends BaseEntity { 19 public class Role extends BaseEntity {
18 20
19 @NotNull 21 @NotNull
src/main/java/net/ziemers/swxercise/lg/user/service/RoleService.java
@@ -2,6 +2,7 @@ package net.ziemers.swxercise.lg.user.service; @@ -2,6 +2,7 @@ package net.ziemers.swxercise.lg.user.service;
2 2
3 import net.ziemers.swxercise.db.dao.user.RoleDao; 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.model.user.User;
5 import net.ziemers.swxercise.lg.user.dto.RoleDto; 6 import net.ziemers.swxercise.lg.user.dto.RoleDto;
6 7
7 import javax.ejb.Stateless; 8 import javax.ejb.Stateless;
@@ -17,6 +18,9 @@ public class RoleService { @@ -17,6 +18,9 @@ public class RoleService {
17 @Inject 18 @Inject
18 private RoleDao dao; 19 private RoleDao dao;
19 20
  21 + @Inject
  22 + private SessionContext sessionContext;
  23 +
20 /** 24 /**
21 * Findet alle existierenden Rollen. 25 * Findet alle existierenden Rollen.
22 * 26 *
@@ -25,6 +29,29 @@ public class RoleService { @@ -25,6 +29,29 @@ public class RoleService {
25 public Collection<Role> findAllRoles() { return dao.findAll(Role.class); } 29 public Collection<Role> findAllRoles() { return dao.findAll(Role.class); }
26 30
27 /** 31 /**
  32 + * Findet die Rolle mit der übergebenen Id.
  33 + *
  34 + * @param id die Id der gesuchten Rolle.
  35 + * @return die gesuchte Rolle, oder <code>null</code>, falls eine solche nicht existiert.
  36 + */
  37 + public Role findRole(final Long id) {
  38 + return dao.findById(id);
  39 + }
  40 +
  41 + /**
  42 + * Findet die Rolle des zurzeit angemeldeten Benutzers.
  43 + *
  44 + * @return die gesuchte Rolle, oder <code>null</code>, falls eine solche nicht existiert.
  45 + */
  46 + public Role findRole() {
  47 + final User user = sessionContext.getUser();
  48 + if (user != null && user.getProfile() != null) {
  49 + return user.getProfile().getRole();
  50 + }
  51 + return null;
  52 + }
  53 +
  54 + /**
28 * Erstellt eine neue Rolle, sofern noch keine mit dem selben Namen existiert. 55 * Erstellt eine neue Rolle, sofern noch keine mit dem selben Namen existiert.
29 * Zwischen der Groß- und Kleinschreibung wird nicht unterschieden. 56 * Zwischen der Groß- und Kleinschreibung wird nicht unterschieden.
30 * 57 *
@@ -41,4 +68,65 @@ public class RoleService { @@ -41,4 +68,65 @@ public class RoleService {
41 return null; 68 return null;
42 } 69 }
43 70
  71 + /**
  72 + * Aktualisiert die Rolle mit der übergebenen Id.
  73 + *
  74 + * @param id die Id der zu aktualisierenden Rolle
  75 + * @param dto das {@link RoleDto} enthält die Eigenschaften der zu aktualisierenden Rolle
  76 + * @return <code>true</code>, wenn das Aktualisieren der Rolle erfolgreich war.
  77 + */
  78 + public boolean updateRole(final Long id, final RoleDto dto) {
  79 + final Role role = dao.findById(id);
  80 + if (role != null) {
  81 + // TODO noch zu implementieren
  82 + return false;
  83 + }
  84 + return false;
  85 + }
  86 +
  87 + /**
  88 + * Aktualisiert die Rolle des zurzeit angemeldeten Benutzers.
  89 + *
  90 + * @param dto das {@link RoleDto} enthält die Eigenschaften der zu aktualisierenden Rolle
  91 + * @return <code>true</code>, wenn das Aktualisieren der Rolle erfolgreich war.
  92 + */
  93 + public boolean updateRole(final RoleDto dto) {
  94 + // ist zurzeit ein Benutzer angemeldet, können wir dessen Rolle aktualisieren
  95 + final User user = sessionContext.getUser();
  96 + if (user != null) {
  97 + // TODO noch zu implementieren
  98 + return false;
  99 + }
  100 + return false;
  101 + }
  102 +
  103 + /**
  104 + * Löscht die Rolle mit der übergebenen Id.
  105 + *
  106 + * @param id die Id der zu löschenden Rolle.
  107 + */
  108 + public Role deleteRole(final Long id) {
  109 + return dao.remove(Role.class, id);
  110 + }
  111 +
  112 + /**
  113 + * Löscht die Rolle des zurzeit angemeldeten Benutzers.
  114 + *
  115 + * @return <code>true</code>, wenn das Löschen der Rolle des angemeldeten Benutzers erfolgreich war.
  116 + */
  117 + public boolean deleteRole() {
  118 + // ist zurzeit ein Benutzer angemeldet, können wir dessen Rolle löschen
  119 + final User user = sessionContext.getUser();
  120 + if (user != null && user.getProfile() != null) {
  121 + final Role role = user.getProfile().getRole();
  122 + if (role != null) {
  123 + user.getProfile().setRole(null);
  124 + dao.save(user);
  125 + dao.remove(Role.class, role.getId());
  126 + return true;
  127 + }
  128 + }
  129 + return false;
  130 + }
  131 +
44 } 132 }
src/main/java/net/ziemers/swxercise/lg/user/service/UserService.java
@@ -60,13 +60,7 @@ public class UserService { @@ -60,13 +60,7 @@ public class UserService {
60 * 60 *
61 * @return den gesuchten Benutzer, oder <code>null</code>, falls ein solcher nicht existiert. 61 * @return den gesuchten Benutzer, oder <code>null</code>, falls ein solcher nicht existiert.
62 */ 62 */
63 - public User findUser() {  
64 - final User user = sessionContext.getUser();  
65 - if (user != null) {  
66 - return dao.findById(user.getId());  
67 - }  
68 - return null;  
69 - } 63 + public User findUser() { return sessionContext.getUser(); }
70 64
71 /** 65 /**
72 * Findet alle existierenden Benutzer. 66 * Findet alle existierenden Benutzer.
src/main/java/net/ziemers/swxercise/ui/RoleViewController.java
@@ -54,10 +54,8 @@ public class RoleViewController { @@ -54,10 +54,8 @@ public class RoleViewController {
54 @Path("v1/role/{id}") 54 @Path("v1/role/{id}")
55 @Produces(MediaType.APPLICATION_JSON) 55 @Produces(MediaType.APPLICATION_JSON)
56 @RolesAllowed(RightState.Constants.ADMIN) 56 @RolesAllowed(RightState.Constants.ADMIN)
57 - public User getRole(@PathParam("id") Long id) {  
58 - // TODO noch zu implementieren  
59 - //return roleService.findRole(id);  
60 - return null; 57 + public Role getRole(@PathParam("id") Long id) {
  58 + return roleService.findRole(id);
61 } 59 }
62 60
63 /** 61 /**
@@ -72,10 +70,8 @@ public class RoleViewController { @@ -72,10 +70,8 @@ public class RoleViewController {
72 @Path("v1/role") 70 @Path("v1/role")
73 @Produces(MediaType.APPLICATION_JSON) 71 @Produces(MediaType.APPLICATION_JSON)
74 @RolesAllowed(RightState.Constants.LOGGED_IN) 72 @RolesAllowed(RightState.Constants.LOGGED_IN)
75 - public User getRole() {  
76 - // TODO noch zu implmentieren  
77 - //return userService.findUser();  
78 - return null; 73 + public Role getRole() {
  74 + return roleService.findRole();
79 } 75 }
80 76
81 /** 77 /**
@@ -118,10 +114,9 @@ public class RoleViewController { @@ -118,10 +114,9 @@ public class RoleViewController {
118 @Produces(MediaType.APPLICATION_JSON) 114 @Produces(MediaType.APPLICATION_JSON)
119 @RolesAllowed(RightState.Constants.ADMIN) 115 @RolesAllowed(RightState.Constants.ADMIN)
120 public RestResponse updateRole(@PathParam("id") Long id, RoleDto dto) { 116 public RestResponse updateRole(@PathParam("id") Long id, RoleDto dto) {
121 - // TODO noch zu implementieren  
122 - //if (roleService.updateRole(id, dto)) {  
123 - // return new RestResponse();  
124 - //} 117 + if (roleService.updateRole(id, dto)) {
  118 + return new RestResponse();
  119 + }
125 return new RestResponse(ResponseState.FAILED); 120 return new RestResponse(ResponseState.FAILED);
126 } 121 }
127 122
@@ -143,10 +138,9 @@ public class RoleViewController { @@ -143,10 +138,9 @@ public class RoleViewController {
143 @Produces(MediaType.APPLICATION_JSON) 138 @Produces(MediaType.APPLICATION_JSON)
144 @RolesAllowed(RightState.Constants.LOGGED_IN) 139 @RolesAllowed(RightState.Constants.LOGGED_IN)
145 public RestResponse updateRole(RoleDto dto) { 140 public RestResponse updateRole(RoleDto dto) {
146 - // TODO noch zu implementieren  
147 - //if (roleService.updateRole(dto)) {  
148 - // return new RestResponse();  
149 - //} 141 + if (roleService.updateRole(dto)) {
  142 + return new RestResponse();
  143 + }
150 return new RestResponse(ResponseState.FAILED); 144 return new RestResponse(ResponseState.FAILED);
151 } 145 }
152 146
@@ -164,8 +158,7 @@ public class RoleViewController { @@ -164,8 +158,7 @@ public class RoleViewController {
164 @Produces(MediaType.APPLICATION_JSON) 158 @Produces(MediaType.APPLICATION_JSON)
165 @RolesAllowed(RightState.Constants.ADMIN) 159 @RolesAllowed(RightState.Constants.ADMIN)
166 public RestResponse deletetRole(@PathParam("id") Long id) { 160 public RestResponse deletetRole(@PathParam("id") Long id) {
167 - // TODO noch zu implementieren  
168 - //roleService.deleteRole(id); 161 + roleService.deleteRole(id);
169 return new RestResponse(); 162 return new RestResponse();
170 } 163 }
171 164
@@ -182,10 +175,9 @@ public class RoleViewController { @@ -182,10 +175,9 @@ public class RoleViewController {
182 @Produces(MediaType.APPLICATION_JSON) 175 @Produces(MediaType.APPLICATION_JSON)
183 @RolesAllowed(RightState.Constants.LOGGED_IN) 176 @RolesAllowed(RightState.Constants.LOGGED_IN)
184 public RestResponse deleteRole() { 177 public RestResponse deleteRole() {
185 - // TODO noch zu implementieren  
186 - //if (roleService.deleteRole()) {  
187 - // return new RestResponse();  
188 - //} 178 + if (roleService.deleteRole()) {
  179 + return new RestResponse();
  180 + }
189 return new RestResponse(ResponseState.FAILED); 181 return new RestResponse(ResponseState.FAILED);
190 } 182 }
191 183
src/main/webapp/index.jsp 0 → 100644
  1 +<%--
  2 + Created by IntelliJ IDEA.
  3 + User: tziemer
  4 + Date: 20.06.17
  5 + Time: 17:49
  6 + To change this template use File | Settings | File Templates.
  7 +--%>
  8 +<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9 +<html>
  10 +<head>
  11 + <title>swXercise Application</title>
  12 +</head>
  13 +<body>
  14 +
  15 +</body>
  16 + <h2>swXercise Application is running.</h2>
  17 +</html>