use of eu.bcvsolutions.idm.core.api.dto.filter.IdmRoleCatalogueFilter in project CzechIdMng by bcvsolutions.
the class DefaultRoleCatalogueProvisioningTest method provisioningD_UpdateAccount.
@Test
public void provisioningD_UpdateAccount() {
IdmRoleCatalogueFilter filter = new IdmRoleCatalogueFilter();
filter.setName("P1");
IdmRoleCatalogueDto nodeRoot = treeNodeService.find(filter, null).getContent().get(0);
Assert.assertNotNull(nodeRoot);
filter.setName("P12");
IdmRoleCatalogueDto nodeOne = treeNodeService.find(filter, null).getContent().get(0);
Assert.assertNotNull(nodeOne);
// Check state before provisioning
TestTreeResource one = entityManager.find(TestTreeResource.class, "P12");
Assert.assertNotNull(one);
Assert.assertEquals("P12", one.getCode());
nodeOne.setCode(CHANGED);
// Save IDM changed node (must invoke provisioning)
treeNodeService.save(nodeOne);
// Check state before provisioning
one = entityManager.find(TestTreeResource.class, "P12");
Assert.assertNotNull(one);
Assert.assertEquals(CHANGED, one.getCode());
}
use of eu.bcvsolutions.idm.core.api.dto.filter.IdmRoleCatalogueFilter in project CzechIdMng by bcvsolutions.
the class RoleSynchronizationExecutor method findRedundantRoleCatalogs.
private List<IdmRoleCatalogueRoleDto> findRedundantRoleCatalogs(IdmRoleDto roleDto, List<UUID> currentRoleCatalogueRoles, SysSyncRoleConfigDto config) {
UUID removeCatalogueRoleParentNode = config.getRemoveCatalogueRoleParentNode();
Assert.notNull(removeCatalogueRoleParentNode, "A parent catalogue for remove redundant roles cannot be null!");
IdmRoleCatalogueDto removeCatalogueRoleParentNodeDto = roleCatalogueService.get(removeCatalogueRoleParentNode);
Assert.notNull(removeCatalogueRoleParentNodeDto, "A parent catalogue for remove redundant roles cannot be null!");
IdmRoleCatalogueRoleFilter catalogueRoleFilter = new IdmRoleCatalogueRoleFilter();
catalogueRoleFilter.setRoleId(roleDto.getId());
List<IdmRoleCatalogueRoleDto> cataloguesWithRole = roleCatalogueRoleService.find(catalogueRoleFilter, null).getContent().stream().filter(catalogueRole -> {
// Check if catalog is under main remove catalog.
if (catalogueRole.getRoleCatalogue().equals(removeCatalogueRoleParentNodeDto.getId())) {
// If is role connected directly to parent remove catalog, then should checked too.
return true;
}
IdmRoleCatalogueFilter catalogueFilter = new IdmRoleCatalogueFilter();
catalogueFilter.setParent(removeCatalogueRoleParentNodeDto.getId());
catalogueFilter.setId(catalogueRole.getRoleCatalogue());
catalogueFilter.setRecursively(true);
return roleCatalogueService.count(catalogueFilter) > 0;
}).collect(Collectors.toList());
return cataloguesWithRole.stream().filter(catalogueWithRole -> !currentRoleCatalogueRoles.contains(catalogueWithRole.getId())).collect(Collectors.toList());
}
use of eu.bcvsolutions.idm.core.api.dto.filter.IdmRoleCatalogueFilter in project CzechIdMng by bcvsolutions.
the class RoleSynchronizationExecutor method resolveRoleCatalogue.
/**
* Resolve 'Role catalogues'.
*/
private void resolveRoleCatalogue(boolean isNew, SynchronizationContext context, IdmRoleDto roleDto, SysSyncItemLogDto logItem, IcConnectorObject connectorObject) {
SysSystemAttributeMappingDto roleCatalogueAttributeDto = context.getMappedAttributes().stream().filter(attribute -> !attribute.isDisabledAttribute() && attribute.isEntityAttribute() && ROLE_CATALOGUE_FIELD.equals(attribute.getIdmPropertyName())).findFirst().orElse(null);
Assert.notNull(roleCatalogueAttributeDto, "Attribute for resolve role catalogues cannot be null!");
if (isNew && AttributeMappingStrategyType.CREATE == roleCatalogueAttributeDto.getStrategyType()) {
addToItemLog(logItem, "The attribute for 'role catalogues' has strategy set to 'Set only for new entity'. Role isn't new, so resolving will be skipped for this role.");
return;
}
addToItemLog(logItem, MessageFormat.format("Resolving of 'role catalogues' is activated for this role [{0}].", roleDto.getCode()));
// Get role-catalogue values from attribute transformation.
Object roleCataloguesObj = this.getValueByMappedAttribute(roleCatalogueAttributeDto, connectorObject.getAttributes(), context);
List<IdmRoleCatalogueDto> roleCatalogueRoleDtos = getRoleCatalogueFromValue(roleCataloguesObj);
List<UUID> currentRoleCatalogueRoles = Lists.newArrayList();
roleCatalogueRoleDtos.forEach(roleCatalogueDto -> {
List<IdmRoleCatalogueDto> parents = extractCatalogStructure(roleCatalogueDto);
AtomicReference<IdmRoleCatalogueDto> parent = new AtomicReference<>();
Lists.reverse(parents).forEach(catalogueDto -> {
if (roleCatalogueService.isNew(catalogueDto)) {
IdmRoleCatalogueDto newCatalogDto = new IdmRoleCatalogueDto();
newCatalogDto.setCode(catalogueDto.getCode());
newCatalogDto.setName(catalogueDto.getName());
newCatalogDto.setExternalId(catalogueDto.getExternalId());
newCatalogDto.setParent(catalogueDto.getParent());
if (newCatalogDto.getParent() == null && parent.get() != null) {
newCatalogDto.setParent(parent.get().getId());
}
if (newCatalogDto.getName() == null) {
throw new ResultCodeException(AccResultCode.SYNC_OF_ROLES_CATALOGUE_NAME_IS_NULL);
}
// Make sure that the catalog with the same code and parent does not really exist.
IdmRoleCatalogueFilter catalogueFilter = new IdmRoleCatalogueFilter();
catalogueFilter.setCode(newCatalogDto.getCode());
catalogueFilter.setParent(newCatalogDto.getParent());
IdmRoleCatalogueDto byCode = roleCatalogueService.find(catalogueFilter, null).getContent().stream().findFirst().orElse(null);
if (byCode != null) {
parent.set(roleCatalogueService.save(byCode));
addToItemLog(logItem, MessageFormat.format("Role catalog item with code [{0}] was reused (catalog with same code and parent already exist).", parent.get().getCode()));
} else {
parent.set(roleCatalogueService.save(newCatalogDto));
addToItemLog(logItem, MessageFormat.format("Role catalog item with code [{0}] was created.", parent.get().getCode()));
}
} else {
parent.set(catalogueDto);
}
});
// Last parent should be leaf catalog.
IdmRoleCatalogueDto leafCatalogueDto = parent.get();
IdmRoleCatalogueRoleDto roleCatalogueRoleDto = null;
if (leafCatalogueDto.getId() != null) {
IdmRoleCatalogueRoleFilter roleCatalogueRoleFilter = new IdmRoleCatalogueRoleFilter();
roleCatalogueRoleFilter.setRoleCatalogueId(leafCatalogueDto.getId());
roleCatalogueRoleFilter.setRoleId(roleDto.getId());
roleCatalogueRoleDto = roleCatalogueRoleService.find(roleCatalogueRoleFilter, null).getContent().stream().findFirst().orElse(null);
}
if (roleCatalogueRoleDto == null) {
// Create new role-catalogue-role.
roleCatalogueRoleDto = new IdmRoleCatalogueRoleDto();
roleCatalogueRoleDto.setRole(roleDto.getId());
roleCatalogueRoleDto.setRoleCatalogue(leafCatalogueDto.getId());
roleCatalogueRoleDto = roleCatalogueRoleService.save(roleCatalogueRoleDto);
addToItemLog(logItem, MessageFormat.format("This role was included to the catalog with code [{0}].", leafCatalogueDto.getCode()));
}
currentRoleCatalogueRoles.add(roleCatalogueRoleDto.getId());
});
SysSyncRoleConfigDto config = getConfig(context);
if (config.isRemoveCatalogueRoleSwitch()) {
resolveRedundantCatalogueRole(roleDto, logItem, currentRoleCatalogueRoles, config);
}
}
use of eu.bcvsolutions.idm.core.api.dto.filter.IdmRoleCatalogueFilter in project CzechIdMng by bcvsolutions.
the class IdmRoleCatalogueControllerRestTest method testFindByRootsAndChildren.
@Test
public void testFindByRootsAndChildren() {
IdmRoleCatalogueDto catalogueItemOne = createDto();
IdmRoleCatalogueDto catalogueItem = prepareDto();
catalogueItem.setParent(catalogueItemOne.getId());
IdmRoleCatalogueDto catalogueItemTwo = createDto(catalogueItem);
// root
IdmRoleCatalogueFilter filter = new IdmRoleCatalogueFilter();
filter.setRoots(Boolean.TRUE);
filter.setName(catalogueItemOne.getName());
List<IdmRoleCatalogueDto> results = find(filter);
Assert.assertEquals(1, results.size());
Assert.assertTrue(results.stream().anyMatch(r -> r.getId().equals(catalogueItemOne.getId())));
// is root - false
filter.setRoots(Boolean.FALSE);
results = find(filter);
Assert.assertTrue(results.isEmpty());
//
// children
filter.setRoots(null);
filter.setName(null);
filter.setParent(catalogueItemOne.getId());
results = find(filter);
Assert.assertEquals(1, results.size());
Assert.assertTrue(results.stream().anyMatch(r -> r.getId().equals(catalogueItemTwo.getId())));
// no children
filter.setParent(catalogueItemTwo.getId());
results = find(filter);
Assert.assertTrue(results.isEmpty());
}
use of eu.bcvsolutions.idm.core.api.dto.filter.IdmRoleCatalogueFilter in project CzechIdMng by bcvsolutions.
the class DefaultIdmRoleCatalogueService method findByExternalId.
@Override
public IdmRoleCatalogueDto findByExternalId(String externalId) {
IdmRoleCatalogueFilter catalogueFilter = new IdmRoleCatalogueFilter();
catalogueFilter.setExternalId(externalId);
return this.find(catalogueFilter, null).getContent().stream().findFirst().orElse(null);
}
Aggregations