/* * Update the roles for the user. * @param editRoles the new set of roles for the user * @param permissionsHelper the PermissionsHelper */ private void updateRoles( PermissionsUserEditRoles editRoles, PermissionsHelperBase permissionsHelper) { /* * Clear the current roles before setting the new ones */ Role rolePI = null; Role roleCOI = null; UserState userState = permissionsHelper.getUserState(editRoles.getUserName()); List<RoleState> statesList = userState.getRoleStates(); for (RoleState roleState : statesList) { if (Constants.CO_INVESTIGATOR_ROLE.equalsIgnoreCase(roleState.getRole().getName()) && roleState.isAssigned()) { roleCOI = roleState.getRole(); } if (Constants.PRINCIPAL_INVESTIGATOR_ROLE.equalsIgnoreCase(roleState.getRole().getName()) && roleState.isAssigned()) { rolePI = roleState.getRole(); } } userState.clearAssignments(); /* * Set the new roles. */ List<PermissionsRoleState> roleStates = editRoles.getRoleStates(); PermissionsRoleState permissionsRoleState = null; if (roleCOI != null) { permissionsRoleState = new PermissionsRoleState(roleCOI); permissionsRoleState.setState(true); if (permissionsRoleState != null || permissionsRoleState.getState()) { roleStates.add(permissionsRoleState); } } if (rolePI != null) { permissionsRoleState = new PermissionsRoleState(rolePI); permissionsRoleState.setState(true); if (permissionsRoleState != null || permissionsRoleState.getState()) { roleStates.add(permissionsRoleState); } } for (PermissionsRoleState roleState : roleStates) { if (roleState.getState()) { userState.setAssigned(roleState.getRole().getName(), true); } } // If the user isn't assigned to any of the normal roles, then he/she will // be assigned to the unassigned role. if (!userState.hasAnyRole() && permissionsHelper.getUnassignedRoleName() != null) { userState.setAssigned(permissionsHelper.getUnassignedRoleName(), true); } }