From ac39be384811df0158a107c391d33bc68bc4c18e Mon Sep 17 00:00:00 2001 From: Joern Muehlencord Date: Sat, 24 Nov 2018 17:49:02 +0100 Subject: [PATCH] added findByName for default application --- .../control/ApplicationRoleControl.java | 387 +++++++++--------- 1 file changed, 196 insertions(+), 191 deletions(-) diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationRoleControl.java b/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationRoleControl.java index c0ccad6..4a40f34 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationRoleControl.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/control/ApplicationRoleControl.java @@ -1,191 +1,196 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package de.muehlencord.shared.account.business.application.control; - -import de.muehlencord.shared.account.business.account.entity.AccountException; -import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; -import de.muehlencord.shared.account.business.application.entity.ApplicationPermissionEntity; -import de.muehlencord.shared.account.business.application.entity.ApplicationRoleEntity; -import de.muehlencord.shared.account.util.AccountPU; -import de.muehlencord.shared.account.util.Permission; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import javax.ejb.EJB; -import javax.ejb.Stateless; -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.persistence.OptimisticLockException; -import javax.persistence.Query; -import javax.transaction.Transactional; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * @author Joern Muehlencord - */ -@Stateless -public class ApplicationRoleControl implements Serializable { - - private static final long serialVersionUID = 5962478269550134748L; - private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationRoleControl.class); - - @EJB - ApplicationPermissionControl applicationPermissionControl; - - @Inject - @AccountPU - EntityManager em; - - @Inject - ApplicationEntity application; - - // TODO requires special role to maintain role for other allication - public List getAllRoles(ApplicationEntity app) { - Query query = em.createNamedQuery("ApplicationRoleEntity.findAll"); - query.setParameter("application", app); - - List roles = query.getResultList(); - if (roles == null) { - return new ArrayList<>(); - } else { - return roles; - } - } - - @Transactional - // TODO requires special role to maintain role for other allication - public void createOrUpdate(ApplicationEntity app, String name, String description) { - ApplicationRoleEntity role = findByName(app, name); - if (role == null) { - role = new ApplicationRoleEntity(app, name, description); - em.persist(role); - } else { - role.setRoleDescription(description); - em.merge(role); - } - } - - @Transactional - // TODO requires special role to maintain role for other allication - public void create(ApplicationRoleEntity role) { - em.persist(role); - } - - @Transactional - // TODO requires special role to maintain role for other allication - public void update(ApplicationRoleEntity role) { - em.merge(role); - } - - @Transactional - // TODO requires special role to maintain role for other allication - public void delete(ApplicationRoleEntity role) throws AccountException { - ApplicationRoleEntity existingRole = attach(role); - em.remove(existingRole); - } - - public ApplicationRoleEntity attach(ApplicationRoleEntity role) throws AccountException { - try { - return em.merge(role); - } catch (OptimisticLockException ex) { - throw new AccountException("Entity updated / deleted, please reload", true); - } - } - - public ApplicationRoleEntity findByName(ApplicationEntity application, String name) { - Query query = em.createNamedQuery("ApplicationRoleEntity.findByRoleName"); - query.setParameter("application", application); - query.setParameter("roleName", name); - List permissions = query.getResultList(); - if ((permissions == null) || (permissions.isEmpty())) { - return null; - } else { - return permissions.get(0); - } - } - - public List getRolePermissions(ApplicationRoleEntity role) throws AccountException { - ApplicationRoleEntity existingRole = em.find(ApplicationRoleEntity.class, role.getId()); - List permissions = existingRole.getApplicationPermissionList(); - permissions.size(); // force list to load - return permissions; - } - - public List getNotAssignedApplicationPermissions(ApplicationRoleEntity role) { - try { - List rolePermissions = getRolePermissions(role); - List allPermssions = applicationPermissionControl.getApplicationPermissions(role.getApplication()); - - List missingPermissions = new ArrayList<>(); - allPermssions.stream().filter((perm) -> (!rolePermissions.contains(perm))).forEachOrdered((perm) -> { - missingPermissions.add(perm); - }); - return missingPermissions; - } catch (AccountException ex) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug(ex.toString(), ex); - } else { - LOGGER.debug(ex.toString()); - } - return null; - } - - } - - @Transactional - // TODO requires special role to maintain role for other allication - public void addPermission(ApplicationRoleEntity role, ApplicationPermissionEntity permission) throws AccountException { - ApplicationRoleEntity existingRole = attach(role); - if (existingRole.getApplicationPermissionList() == null) { - existingRole.setApplicationPermissionList(new ArrayList<>()); - } - existingRole.getApplicationPermissionList().add(permission); - em.merge(role); - } - - @Transactional - // TODO requires special role to maintain role for other allication - public void removePermission(ApplicationRoleEntity role, ApplicationPermissionEntity permission) throws AccountException { - ApplicationRoleEntity existingRole = attach(role); - if ((existingRole.getApplicationPermissionList() != null) && (existingRole.getApplicationPermissionList().contains(permission))) { - existingRole.getApplicationPermissionList().remove(permission); - } - em.merge(role); - } - - @Transactional - public void setupRolePermission(List permissions, String roleName) throws AccountException { - ApplicationRoleEntity role = findByName(application, roleName); - if (role == null) { - LOGGER.error("A role with name " + roleName + " is not defined for application " + application.getApplicationName()); - } else { - for (Permission permission : permissions) { - ApplicationPermissionEntity existingPermission = applicationPermissionControl.findPermissionByName(application, permission.getName()); - if (existingPermission == null) { - LOGGER.error("Required permission " + permission.getName() + " of application " + application.getApplicationName() + " does not exist. Ensure to call setupPermissions first"); - } else { - if (role.getApplicationPermissionList().contains(existingPermission)) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Permission {} already assigned to role {} of {}, skipping", permission.getName(), roleName, application.getApplicationName()); - } - } else { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Permission {} not assigned to role {} of {}", permission.getName(), roleName, application.getApplicationName()); - } - addPermission(role, existingPermission); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Added permission {} to role {} of {}", permission.getName(), roleName, application.getApplicationName()); - } - } - } - } - } - - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package de.muehlencord.shared.account.business.application.control; + +import de.muehlencord.shared.account.business.account.entity.AccountException; +import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; +import de.muehlencord.shared.account.business.application.entity.ApplicationPermissionEntity; +import de.muehlencord.shared.account.business.application.entity.ApplicationRoleEntity; +import de.muehlencord.shared.account.util.AccountPU; +import de.muehlencord.shared.account.util.Permission; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import javax.ejb.EJB; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.OptimisticLockException; +import javax.persistence.Query; +import javax.transaction.Transactional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author Joern Muehlencord + */ +@Stateless +public class ApplicationRoleControl implements Serializable { + + private static final long serialVersionUID = 5962478269550134748L; + private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationRoleControl.class); + + @EJB + ApplicationPermissionControl applicationPermissionControl; + + @Inject + @AccountPU + EntityManager em; + + @Inject + ApplicationEntity application; + + // TODO requires special role to maintain role for other allication + public List getAllRoles(ApplicationEntity app) { + Query query = em.createNamedQuery("ApplicationRoleEntity.findAll"); + query.setParameter("application", app); + + List roles = query.getResultList(); + if (roles == null) { + return new ArrayList<>(); + } else { + return roles; + } + } + + @Transactional + // TODO requires special role to maintain role for other allication + public void createOrUpdate(ApplicationEntity app, String name, String description) { + ApplicationRoleEntity role = findByName(app, name); + if (role == null) { + role = new ApplicationRoleEntity(app, name, description); + em.persist(role); + } else { + role.setRoleDescription(description); + em.merge(role); + } + } + + @Transactional + // TODO requires special role to maintain role for other allication + public void create(ApplicationRoleEntity role) { + em.persist(role); + } + + @Transactional + // TODO requires special role to maintain role for other allication + public void update(ApplicationRoleEntity role) { + em.merge(role); + } + + @Transactional + // TODO requires special role to maintain role for other allication + public void delete(ApplicationRoleEntity role) throws AccountException { + ApplicationRoleEntity existingRole = attach(role); + em.remove(existingRole); + } + + public ApplicationRoleEntity attach(ApplicationRoleEntity role) throws AccountException { + try { + return em.merge(role); + } catch (OptimisticLockException ex) { + throw new AccountException("Entity updated / deleted, please reload", true); + } + } + + public ApplicationRoleEntity findByName(String name) { + return findByName(application, name); + } + + // TODO requires special role to maintain role for other allication + public ApplicationRoleEntity findByName(ApplicationEntity app, String name) { + Query query = em.createNamedQuery("ApplicationRoleEntity.findByRoleName"); + query.setParameter("application", app); + query.setParameter("roleName", name); + List permissions = query.getResultList(); + if ((permissions == null) || (permissions.isEmpty())) { + return null; + } else { + return permissions.get(0); + } + } + + public List getRolePermissions(ApplicationRoleEntity role) throws AccountException { + ApplicationRoleEntity existingRole = em.find(ApplicationRoleEntity.class, role.getId()); + List permissions = existingRole.getApplicationPermissionList(); + permissions.size(); // force list to load + return permissions; + } + + public List getNotAssignedApplicationPermissions(ApplicationRoleEntity role) { + try { + List rolePermissions = getRolePermissions(role); + List allPermssions = applicationPermissionControl.getApplicationPermissions(role.getApplication()); + + List missingPermissions = new ArrayList<>(); + allPermssions.stream().filter((perm) -> (!rolePermissions.contains(perm))).forEachOrdered((perm) -> { + missingPermissions.add(perm); + }); + return missingPermissions; + } catch (AccountException ex) { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug(ex.toString(), ex); + } else { + LOGGER.debug(ex.toString()); + } + return null; + } + + } + + @Transactional + // TODO requires special role to maintain role for other allication + public void addPermission(ApplicationRoleEntity role, ApplicationPermissionEntity permission) throws AccountException { + ApplicationRoleEntity existingRole = attach(role); + if (existingRole.getApplicationPermissionList() == null) { + existingRole.setApplicationPermissionList(new ArrayList<>()); + } + existingRole.getApplicationPermissionList().add(permission); + em.merge(role); + } + + @Transactional + // TODO requires special role to maintain role for other allication + public void removePermission(ApplicationRoleEntity role, ApplicationPermissionEntity permission) throws AccountException { + ApplicationRoleEntity existingRole = attach(role); + if ((existingRole.getApplicationPermissionList() != null) && (existingRole.getApplicationPermissionList().contains(permission))) { + existingRole.getApplicationPermissionList().remove(permission); + } + em.merge(role); + } + + @Transactional + public void setupRolePermission(List permissions, String roleName) throws AccountException { + ApplicationRoleEntity role = findByName(application, roleName); + if (role == null) { + LOGGER.error("A role with name " + roleName + " is not defined for application " + application.getApplicationName()); + } else { + for (Permission permission : permissions) { + ApplicationPermissionEntity existingPermission = applicationPermissionControl.findPermissionByName(application, permission.getName()); + if (existingPermission == null) { + LOGGER.error("Required permission " + permission.getName() + " of application " + application.getApplicationName() + " does not exist. Ensure to call setupPermissions first"); + } else { + if (role.getApplicationPermissionList().contains(existingPermission)) { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Permission {} already assigned to role {} of {}, skipping", permission.getName(), roleName, application.getApplicationName()); + } + } else { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Permission {} not assigned to role {} of {}", permission.getName(), roleName, application.getApplicationName()); + } + addPermission(role, existingPermission); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Added permission {} to role {} of {}", permission.getName(), roleName, application.getApplicationName()); + } + } + } + } + } + + } + +}