diff --git a/account-ui/pom.xml b/account-ui/pom.xml
index e9f209d..4cfcdb2 100644
--- a/account-ui/pom.xml
+++ b/account-ui/pom.xml
@@ -1,151 +1,151 @@
-
-
- 4.0.0
-
- shared
- de.muehlencord
- 1.1-SNAPSHOT
-
-
- de.muehlencord.shared
- shared-account-ui
- 1.1-SNAPSHOT
- war
-
- shared-account-ui
-
-
- UTF-8
- ${maven.build.timestamp}
- 143a2bd3-7e0b-4162-a76e-3031331c7dfe
- 10
- 10
-
-
- development
-
-
-
-
- org.primefaces
- primefaces
-
-
-
- com.github.adminfaces
- admin-template
- 1.0.0-RC19
-
-
-
- org.omnifaces
- omnifaces
- 2.7
-
-
-
- org.apache.shiro
- shiro-core
-
-
- org.apache.shiro
- shiro-web
-
-
- de.muehlencord.shared
- shared-shiro-faces
- 1.1-SNAPSHOT
-
-
- de.muehlencord.shared
- shared-account
- 1.1-SNAPSHOT
-
-
- de.muehlencord.shared
- shared-util
- 1.1-SNAPSHOT
-
-
- de.muehlencord.shared
- shared-jeeutil
- 1.1-SNAPSHOT
-
-
- de.muehlencord.sf
- filter
- 1.0
-
-
- javax
- javaee-web-api
- 7.0
- provided
-
-
-
-
-
- ${basedir}/src/main/filters/${filter.name}.properties
-
-
-
-
-
- src/main/resources
- true
-
- **/*.properties
- **/*.xml
-
-
-
-
- account
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.8.0
-
- 10
- 10
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
- 3.2.2
-
- false
-
-
- ${basedir}/src/main/webapp
- true
-
- WEB-INF/web.xml
- WEB-INF/shiro.ini
-
-
-
-
-
-
-
-
-
-
- development
-
- development
-
-
-
-
- production
-
- production
-
-
-
-
+
+
+ 4.0.0
+
+ shared
+ de.muehlencord
+ 1.1-SNAPSHOT
+
+
+ de.muehlencord.shared
+ shared-account-ui
+ 1.1-SNAPSHOT
+ war
+
+ shared-account-ui
+
+
+ UTF-8
+ ${maven.build.timestamp}
+ 143a2bd3-7e0b-4162-a76e-3031331c7dfe
+ 10
+ 10
+
+
+ development
+
+
+
+
+ org.primefaces
+ primefaces
+
+
+
+ com.github.adminfaces
+ admin-template
+ 1.0.0-RC19
+
+
+
+ org.omnifaces
+ omnifaces
+ 3.2
+
+
+
+ org.apache.shiro
+ shiro-core
+
+
+ org.apache.shiro
+ shiro-web
+
+
+ de.muehlencord.shared
+ shared-shiro-faces
+ 1.1-SNAPSHOT
+
+
+ de.muehlencord.shared
+ shared-account
+ 1.1-SNAPSHOT
+
+
+ de.muehlencord.shared
+ shared-util
+ 1.1-SNAPSHOT
+
+
+ de.muehlencord.shared
+ shared-jeeutil
+ 1.1-SNAPSHOT
+
+
+ de.muehlencord.sf
+ filter
+ 1.0
+
+
+ javax
+ javaee-web-api
+ 7.0
+ provided
+
+
+
+
+
+ ${basedir}/src/main/filters/${filter.name}.properties
+
+
+
+
+
+ src/main/resources
+ true
+
+ **/*.properties
+ **/*.xml
+
+
+
+
+ account
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.0
+
+ 10
+ 10
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ 3.2.2
+
+ false
+
+
+ ${basedir}/src/main/webapp
+ true
+
+ WEB-INF/web.xml
+ WEB-INF/shiro.ini
+
+
+
+
+
+
+
+
+
+
+ development
+
+ development
+
+
+
+
+ production
+
+ production
+
+
+
+
diff --git a/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/UniqueApplicationRoleNameValidator.java b/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/UniqueApplicationRoleNameValidator.java
index 6111584..5f21451 100644
--- a/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/UniqueApplicationRoleNameValidator.java
+++ b/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/UniqueApplicationRoleNameValidator.java
@@ -1,57 +1,57 @@
-package de.muehlencord.shared.account.web.presentation;
-
-import de.muehlencord.shared.account.business.account.entity.ApplicationRoleEntity;
-import de.muehlencord.shared.account.business.application.control.ApplicationRoleControl;
-import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
-import de.muehlencord.shared.account.util.AccountPU;
-import java.io.Serializable;
-import javax.ejb.EJB;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.FacesValidator;
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-import javax.inject.Inject;
-import javax.persistence.EntityManager;
-
-/**
- *
- * @author Joern Muehlencord
- */
-@FacesValidator("uniqueApplicationRoleNameValidator")
-public class UniqueApplicationRoleNameValidator implements Validator, Serializable {
-
- private static final long serialVersionUID = 8165013107453616719L;
-
- @Inject
- @AccountPU
- EntityManager em;
-
- @EJB
- ApplicationRoleControl applicationRoleControl;
-
- @Override
- public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
- Object applicationObj = component.getAttributes().get("application");
- if ((applicationObj != null) && (applicationObj instanceof ApplicationEntity)) {
- ApplicationEntity application = (ApplicationEntity) applicationObj;
- if (value == null) {
- throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Role name invalid", "Role name must not be empty"));
- }
- if (value instanceof String) {
- String roleName = (String) value;
- ApplicationRoleEntity existingRole = applicationRoleControl.findByName(application, roleName);
- if (existingRole != null) {
- throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Role name invalid", "Role already exists"));
- }
- } else {
- throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Role name invalid", "Role name must be a string value"));
- // TODO add IPRS logger - someone is trying to cheat
- }
- } else {
- throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Application not set", "Permission name cannot be set if application is unknown"));
- }
- }
-
-}
+package de.muehlencord.shared.account.web.presentation;
+
+import de.muehlencord.shared.account.business.account.entity.ApplicationRoleEntity;
+import de.muehlencord.shared.account.business.application.control.ApplicationRoleControl;
+import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
+import de.muehlencord.shared.account.util.AccountPU;
+import java.io.Serializable;
+import javax.ejb.EJB;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.FacesValidator;
+import javax.faces.validator.Validator;
+import javax.faces.validator.ValidatorException;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+
+/**
+ *
+ * @author Joern Muehlencord
+ */
+@FacesValidator("uniqueApplicationRoleNameValidator")
+public class UniqueApplicationRoleNameValidator implements Validator, Serializable {
+
+ private static final long serialVersionUID = 8165013107453616719L;
+
+ @Inject
+ @AccountPU
+ EntityManager em;
+
+ @Inject
+ ApplicationRoleControl applicationRoleControl;
+
+ @Override
+ public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
+ Object applicationObj = component.getAttributes().get("application");
+ if ((applicationObj != null) && (applicationObj instanceof ApplicationEntity)) {
+ ApplicationEntity application = (ApplicationEntity) applicationObj;
+ if (value == null) {
+ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Role name invalid", "Role name must not be empty"));
+ }
+ if (value instanceof String) {
+ String roleName = (String) value;
+ ApplicationRoleEntity existingRole = applicationRoleControl.findByName(application, roleName);
+ if (existingRole != null) {
+ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Role name invalid", "Role already exists"));
+ }
+ } else {
+ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Role name invalid", "Role name must be a string value"));
+ // TODO add IPRS logger - someone is trying to cheat
+ }
+ } else {
+ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Application not set", "Permission name cannot be set if application is unknown"));
+ }
+ }
+
+}
diff --git a/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/UniqueApplicationValidator.java b/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/UniqueApplicationValidator.java
index 7668e94..4010e71 100644
--- a/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/UniqueApplicationValidator.java
+++ b/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/UniqueApplicationValidator.java
@@ -3,13 +3,13 @@ package de.muehlencord.shared.account.web.presentation;
import de.muehlencord.shared.account.business.application.boundary.ApplicationService;
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
import java.io.Serializable;
-import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
+import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -23,7 +23,7 @@ public class UniqueApplicationValidator implements Validator, Serializable {
private static final long serialVersionUID = 2526409681909574670L;
private static final Logger LOGGER = LoggerFactory.getLogger(UniqueApplicationValidator.class);
- @EJB
+ @Inject
ApplicationService applicationService;
@Override
diff --git a/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/UniquePermissionNameValidator.java b/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/UniquePermissionNameValidator.java
index 5269134..8acc600 100644
--- a/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/UniquePermissionNameValidator.java
+++ b/account-ui/src/main/java/de/muehlencord/shared/account/web/presentation/UniquePermissionNameValidator.java
@@ -1,61 +1,60 @@
-package de.muehlencord.shared.account.web.presentation;
-
-import de.muehlencord.shared.account.business.account.entity.ApplicationPermissionEntity;
-import de.muehlencord.shared.account.business.application.control.ApplicationPermissionControl;
-import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
-import de.muehlencord.shared.account.util.AccountPU;
-import java.io.Serializable;
-import javax.ejb.EJB;
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.validator.FacesValidator;
-import javax.faces.validator.Validator;
-import javax.faces.validator.ValidatorException;
-import javax.inject.Inject;
-import javax.persistence.EntityManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- *
- * @author Joern Muehlencord
- */
-@FacesValidator("uniquePermissionNameValidator")
-public class UniquePermissionNameValidator implements Validator, Serializable {
-
- private static final long serialVersionUID = 2526409681909574670L;
- private static final Logger LOGGER = LoggerFactory.getLogger(UniquePermissionNameValidator.class);
-
- @Inject
- @AccountPU
- EntityManager em;
-
- @EJB
- ApplicationPermissionControl applicationPermissionControl;
-
- @Override
- public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
- Object applicationObj = component.getAttributes().get("application");
- if ((applicationObj != null) && (applicationObj instanceof ApplicationEntity)) {
- ApplicationEntity application = (ApplicationEntity) applicationObj;
- if (value == null) {
- throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Permission name invalid", "Permission name must not be empty"));
- }
- if (value instanceof String) {
- String permissionName = (String) value;
- ApplicationPermissionEntity existingPermission = applicationPermissionControl.findPermissionByName(application, permissionName);
- if (existingPermission != null) {
- throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Permission name invalid", "Permission already exists"));
- }
- } else {
- throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Permission name invalid", "Permission name must be a string value"));
- // TODO add IPRS logger - someone is trying to cheat
- }
- } else {
- throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Application not set", "Permission name cannot be set if application is unknown"));
- }
-
- }
-
-}
+package de.muehlencord.shared.account.web.presentation;
+
+import de.muehlencord.shared.account.business.account.entity.ApplicationPermissionEntity;
+import de.muehlencord.shared.account.business.application.control.ApplicationPermissionControl;
+import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
+import de.muehlencord.shared.account.util.AccountPU;
+import java.io.Serializable;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.FacesValidator;
+import javax.faces.validator.Validator;
+import javax.faces.validator.ValidatorException;
+import javax.inject.Inject;
+import javax.persistence.EntityManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author Joern Muehlencord
+ */
+@FacesValidator("uniquePermissionNameValidator")
+public class UniquePermissionNameValidator implements Validator, Serializable {
+
+ private static final long serialVersionUID = 2526409681909574670L;
+ private static final Logger LOGGER = LoggerFactory.getLogger(UniquePermissionNameValidator.class);
+
+ @Inject
+ @AccountPU
+ EntityManager em;
+
+ @Inject
+ ApplicationPermissionControl applicationPermissionControl;
+
+ @Override
+ public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
+ Object applicationObj = component.getAttributes().get("application");
+ if ((applicationObj != null) && (applicationObj instanceof ApplicationEntity)) {
+ ApplicationEntity application = (ApplicationEntity) applicationObj;
+ if (value == null) {
+ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Permission name invalid", "Permission name must not be empty"));
+ }
+ if (value instanceof String) {
+ String permissionName = (String) value;
+ ApplicationPermissionEntity existingPermission = applicationPermissionControl.findPermissionByName(application, permissionName);
+ if (existingPermission != null) {
+ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Permission name invalid", "Permission already exists"));
+ }
+ } else {
+ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Permission name invalid", "Permission name must be a string value"));
+ // TODO add IPRS logger - someone is trying to cheat
+ }
+ } else {
+ throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Application not set", "Permission name cannot be set if application is unknown"));
+ }
+
+ }
+
+}
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 6068b6f..9902cab 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,149 +1,150 @@
-/*
- * 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.account.entity.ApplicationPermissionEntity;
-import de.muehlencord.shared.account.business.account.entity.ApplicationRoleEntity;
-import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
-import de.muehlencord.shared.account.util.AccountPU;
-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;
-
- 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
- public void createOrUpdate(ApplicationEntity application, String name, String description) {
- ApplicationRoleEntity role = findByName(application, name);
- if (role == null) {
- role = new ApplicationRoleEntity(application, name, description);
- em.persist(role);
- } else {
- role.setRoleDescription(description);
- em.merge(role);
- }
- }
-
- @Transactional
- public void create(ApplicationRoleEntity role) {
- em.persist(role);
- }
-
- @Transactional
- public void update(ApplicationRoleEntity role) {
- em.merge(role);
- }
-
- 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
- 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
- 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);
- }
-
-}
+/*
+ * 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.account.entity.ApplicationPermissionEntity;
+import de.muehlencord.shared.account.business.account.entity.ApplicationRoleEntity;
+import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
+import de.muehlencord.shared.account.util.AccountPU;
+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;
+
+ 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
+ public void createOrUpdate(ApplicationEntity application, String name, String description) {
+ ApplicationRoleEntity role = findByName(application, name);
+ if (role == null) {
+ role = new ApplicationRoleEntity(application, name, description);
+ em.persist(role);
+ } else {
+ role.setRoleDescription(description);
+ em.merge(role);
+ }
+ }
+
+ @Transactional
+ public void create(ApplicationRoleEntity role) {
+ em.persist(role);
+ }
+
+ @Transactional
+ public void update(ApplicationRoleEntity role) {
+ em.merge(role);
+ }
+
+ @Transactional
+ 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
+ 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
+ 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);
+ }
+
+}