Search in sources :

Example 11 with IdmRequestItemDto

use of eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto in project CzechIdMng by bcvsolutions.

the class DefaultIdmRequestService method deleteInternal.

@Override
@Transactional
public void deleteInternal(IdmRequestDto dto) {
    // Stop connected WF process
    cancelWF(dto);
    // We have to delete all items for this request
    if (dto.getId() != null) {
        IdmRequestItemFilter ruleFilter = new IdmRequestItemFilter();
        ruleFilter.setRequestId(dto.getId());
        List<IdmRequestItemDto> items = requestItemService.find(ruleFilter, null).getContent();
        items.forEach(item -> {
            requestItemService.delete(item);
        });
    }
    super.deleteInternal(dto);
}
Also used : IdmRequestItemDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto) IdmRequestItemFilter(eu.bcvsolutions.idm.core.api.dto.filter.IdmRequestItemFilter) Transactional(org.springframework.transaction.annotation.Transactional)

Example 12 with IdmRequestItemDto

use of eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto in project CzechIdMng by bcvsolutions.

the class DefaultRequestManager method findRequestItem.

private <R extends Requestable> IdmRequestItemDto findRequestItem(UUID requestId, UUID dtoId, Class<? extends R> dtoClass) {
    Assert.notNull(dtoClass, "DTO class is required!");
    if (dtoId == null) {
        return null;
    }
    IdmRequestItemFilter itemFilter = new IdmRequestItemFilter();
    itemFilter.setRequestId(requestId);
    itemFilter.setOwnerId(dtoId);
    itemFilter.setOwnerType(dtoClass.getName());
    List<IdmRequestItemDto> items = requestItemService.find(itemFilter, null).getContent();
    if (items.size() > 0) {
        return items.get(0);
    }
    return null;
}
Also used : IdmRequestItemDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto) IdmRequestItemFilter(eu.bcvsolutions.idm.core.api.dto.filter.IdmRequestItemFilter)

Example 13 with IdmRequestItemDto

use of eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto in project CzechIdMng by bcvsolutions.

the class DefaultRequestManager method findRelatedAddedItems.

/**
 * Find related added DTOs by given parents. !!Searching of added DTOs are very
 * naive!! We use all UUID value in the filter and try to find it in the DTOs.
 * It means only equals is implemented.
 *
 * @param request
 * @param predicates
 * @param items
 * @param dtoClass
 * @return
 */
private <R extends Requestable> List<R> findRelatedAddedItems(IdmRequestDto request, List<RequestPredicate> predicates, List<IdmRequestItemDto> items, Class<? extends R> dtoClass) {
    List<R> requestables = new ArrayList<>();
    // 
    items.stream().filter(// 
    i -> RequestOperationType.ADD == i.getOperation()).forEach(item -> {
        // 
        try {
            R requestedDto = this.convertItemToDto(item, dtoClass);
            AbstractDto requested = (AbstractDto) requestedDto;
            addEmbedded(requested, request.getId());
            addRequestItemToDto((Requestable) requested, item);
            requestables.add((R) requestedDto);
            return;
        } catch (IOException | ReflectiveOperationException | IllegalArgumentException | IntrospectionException e) {
            throw new ResultCodeException(CoreResultCode.JSON_CANNOT_BE_CONVERT_TO_DTO, ImmutableMap.of("json", item.getData()), e);
        }
    });
    return filterDtosByPredicates(requestables, dtoClass, predicates);
}
Also used : DtoUtils(eu.bcvsolutions.idm.core.api.utils.DtoUtils) IdmRequestItemDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto) IdmFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto) Autowired(org.springframework.beans.factory.annotation.Autowired) FormService(eu.bcvsolutions.idm.core.eav.api.service.FormService) SecurityService(eu.bcvsolutions.idm.core.security.api.service.SecurityService) Map(java.util.Map) IdmRequestDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestDto) PageRequest(org.springframework.data.domain.PageRequest) Page(org.springframework.data.domain.Page) IntrospectionException(java.beans.IntrospectionException) Serializable(java.io.Serializable) InvocationTargetException(java.lang.reflect.InvocationTargetException) PropertyDescriptor(java.beans.PropertyDescriptor) Builder(eu.bcvsolutions.idm.core.api.dto.OperationResultDto.Builder) Lazy(org.springframework.context.annotation.Lazy) GuardedString(eu.bcvsolutions.idm.core.security.api.domain.GuardedString) RequestOperationType(eu.bcvsolutions.idm.core.api.domain.RequestOperationType) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) Introspector(java.beans.Introspector) Strings(com.google.common.base.Strings) AbstractDto(eu.bcvsolutions.idm.core.api.dto.AbstractDto) IdmBasePermission(eu.bcvsolutions.idm.core.security.api.domain.IdmBasePermission) Lists(com.google.common.collect.Lists) BaseEntity(eu.bcvsolutions.idm.core.api.entity.BaseEntity) LookupService(eu.bcvsolutions.idm.core.api.service.LookupService) Service(org.springframework.stereotype.Service) WorkflowProcessInstanceService(eu.bcvsolutions.idm.core.workflow.service.WorkflowProcessInstanceService) IdmFormInstanceDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto) Requestable(eu.bcvsolutions.idm.core.api.domain.Requestable) CoreException(eu.bcvsolutions.idm.core.api.exception.CoreException) OperationState(eu.bcvsolutions.idm.core.api.domain.OperationState) IOException(java.io.IOException) Field(java.lang.reflect.Field) BaseFilter(eu.bcvsolutions.idm.core.api.dto.filter.BaseFilter) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) IdmRoleDto(eu.bcvsolutions.idm.core.api.dto.IdmRoleDto) IdmRequestItemService(eu.bcvsolutions.idm.core.api.service.IdmRequestItemService) CoreResultCode(eu.bcvsolutions.idm.core.api.domain.CoreResultCode) FormValueService(eu.bcvsolutions.idm.core.eav.api.service.FormValueService) RequestEventType(eu.bcvsolutions.idm.core.model.event.RequestEvent.RequestEventType) BaseDto(eu.bcvsolutions.idm.core.api.dto.BaseDto) EntityEventManager(eu.bcvsolutions.idm.core.api.service.EntityEventManager) Embedded(eu.bcvsolutions.idm.core.api.domain.Embedded) RequestEvent(eu.bcvsolutions.idm.core.model.event.RequestEvent) RequestState(eu.bcvsolutions.idm.core.api.domain.RequestState) RoleRequestException(eu.bcvsolutions.idm.core.api.exception.RoleRequestException) CoreGroupPermission(eu.bcvsolutions.idm.core.model.domain.CoreGroupPermission) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto) ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) BasePermission(eu.bcvsolutions.idm.core.security.api.domain.BasePermission) ProcessInstance(org.activiti.engine.runtime.ProcessInstance) Pageable(org.springframework.data.domain.Pageable) ImmutableMap(com.google.common.collect.ImmutableMap) Collection(java.util.Collection) ReadWriteDtoService(eu.bcvsolutions.idm.core.api.service.ReadWriteDtoService) RequestManager(eu.bcvsolutions.idm.core.api.service.RequestManager) AcceptedException(eu.bcvsolutions.idm.core.api.exception.AcceptedException) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) List(java.util.List) ExceptionUtils(eu.bcvsolutions.idm.core.api.utils.ExceptionUtils) Modifier(java.lang.reflect.Modifier) Entry(java.util.Map.Entry) Identifiable(eu.bcvsolutions.idm.core.api.domain.Identifiable) RoleRequestApprovalProcessor(eu.bcvsolutions.idm.core.model.event.processor.role.RoleRequestApprovalProcessor) PageImpl(org.springframework.data.domain.PageImpl) IdmRequestService(eu.bcvsolutions.idm.core.api.service.IdmRequestService) FormableEntity(eu.bcvsolutions.idm.core.eav.api.entity.FormableEntity) IdmRequestItem(eu.bcvsolutions.idm.core.model.entity.IdmRequestItem) HashMap(java.util.HashMap) MessageFormat(java.text.MessageFormat) ConfidentialStorage(eu.bcvsolutions.idm.core.api.service.ConfidentialStorage) ReadDtoService(eu.bcvsolutions.idm.core.api.service.ReadDtoService) RequestFilterPredicate(eu.bcvsolutions.idm.core.api.domain.RequestFilterPredicate) ImmutableList(com.google.common.collect.ImmutableList) CollectionUtils(org.apache.commons.collections.CollectionUtils) Propagation(org.springframework.transaction.annotation.Propagation) OperationResultDto(eu.bcvsolutions.idm.core.api.dto.OperationResultDto) EntityUtils(eu.bcvsolutions.idm.core.api.utils.EntityUtils) Qualifier(org.springframework.beans.factory.annotation.Qualifier) JsonIgnore(com.fasterxml.jackson.annotation.JsonIgnore) Niceable(eu.bcvsolutions.idm.core.api.domain.Niceable) IdmRequestItemFilter(eu.bcvsolutions.idm.core.api.dto.filter.IdmRequestItemFilter) EntityEvent(eu.bcvsolutions.idm.core.api.event.EntityEvent) Codeable(eu.bcvsolutions.idm.core.api.domain.Codeable) IdmRequestAttributeValueDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestAttributeValueDto) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) IdmRequestItemChangesDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestItemChangesDto) MethodDescriptor(java.beans.MethodDescriptor) ApplicationContext(org.springframework.context.ApplicationContext) ConfigurationMap(eu.bcvsolutions.idm.core.api.domain.ConfigurationMap) IdmRequestItemAttributeDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestItemAttributeDto) Comparator(java.util.Comparator) IdmRequestFilter(eu.bcvsolutions.idm.core.api.dto.filter.IdmRequestFilter) Transactional(org.springframework.transaction.annotation.Transactional) Assert(org.springframework.util.Assert) AbstractDto(eu.bcvsolutions.idm.core.api.dto.AbstractDto) ArrayList(java.util.ArrayList) IntrospectionException(java.beans.IntrospectionException) ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) IOException(java.io.IOException)

Example 14 with IdmRequestItemDto

use of eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto in project CzechIdMng by bcvsolutions.

the class DefaultRequestManager method post.

private <R extends Requestable> R post(Serializable requestId, R dto, boolean isNew) {
    Assert.notNull(dto, "DTO is required!");
    Assert.notNull(requestId, "Request ID is required!");
    IdmRequestDto request = requestService.get(requestId);
    Assert.notNull(request, "Request is required!");
    // update existing item
    if (request != null && !(RequestState.CONCEPT == request.getState() || RequestState.IN_PROGRESS == request.getState() || RequestState.EXCEPTION == request.getState())) {
        throw new ResultCodeException(CoreResultCode.REQUEST_ITEM_CANNOT_BE_CREATED, ImmutableMap.of("dto", dto.toString(), "state", request.getState().name()));
    }
    // Exists item for same original owner?
    IdmRequestItemDto item = this.findRequestItem(request.getId(), dto);
    try {
        if (dto.getId() == null) {
            dto.setId(UUID.randomUUID());
        }
        if (item == null) {
            item = createRequestItem(request.getId(), dto);
            item.setOperation(isNew ? RequestOperationType.ADD : RequestOperationType.UPDATE);
            item.setOwnerId((UUID) dto.getId());
        } else {
            item.setOperation(isNew ? RequestOperationType.ADD : RequestOperationType.UPDATE);
        }
        String dtoString = this.convertDtoToString(dto);
        item.setData(dtoString);
        // Update or create new request item
        item = requestItemService.save(item);
        return this.get(request.getId(), dto);
    } catch (JsonProcessingException e) {
        throw new ResultCodeException(CoreResultCode.DTO_CANNOT_BE_CONVERT_TO_JSON, ImmutableMap.of("dto", dto.toString()), e);
    }
}
Also used : IdmRequestItemDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto) ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) IdmRequestDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestDto) GuardedString(eu.bcvsolutions.idm.core.security.api.domain.GuardedString) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException)

Example 15 with IdmRequestItemDto

use of eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto in project CzechIdMng by bcvsolutions.

the class DefaultRequestManager method find.

@Override
public <R extends Requestable> Page<R> find(Class<? extends R> dtoClass, Serializable requestId, BaseFilter filter, Pageable pageable, IdmBasePermission... permission) {
    if (pageable == null) {
        // pageable is required in spring data
        pageable = PageRequest.of(0, Integer.MAX_VALUE);
    }
    ReadDtoService<R, BaseFilter> dtoReadService = getDtoService(dtoClass);
    Page<R> originalPage = dtoReadService.find(filter, pageable, permission);
    List<R> originals = originalPage.getContent();
    List<R> results = new ArrayList<>();
    IdmRequestDto request = requestService.get(requestId);
    List<IdmRequestItemDto> items = this.findRequestItems(request.getId(), dtoClass);
    originals.stream().forEach(dto -> {
        IdmRequestItemDto item = // 
        items.stream().filter(// 
        i -> dto.getId().equals(i.getOwnerId())).findFirst().orElse(// 
        null);
        if (item == null) {
            // None item found -> result is original DTO
            results.add(dto);
            return;
        }
        if (Strings.isNullOrEmpty(item.getData())) {
            // Item found, but does not contains any DTO. So original DTO will be result
            // (with connected item)
            addRequestItemToDto(dto, item);
            results.add(dto);
            return;
        }
        try {
            // Item with data found. Data in the request is result
            R requestedDto = this.convertItemToDto(item, dtoClass);
            addEmbedded((AbstractDto) requestedDto, request.getId());
            addRequestItemToDto((Requestable) requestedDto, item);
            results.add(requestedDto);
            return;
        } catch (IOException | ReflectiveOperationException | IllegalArgumentException | IntrospectionException e) {
            throw new ResultCodeException(CoreResultCode.JSON_CANNOT_BE_CONVERT_TO_DTO, ImmutableMap.of("json", item.getData()));
        }
    });
    // !!Searching of added DTOs are very naive!!
    // We use all UUID value in the filter and try to find it in the DTOs. It means
    // only equals is implemented.
    // Find potential parents
    List<RequestPredicate> potencialParents = this.findPotencialParents(filter);
    results.addAll(this.findRelatedAddedItems(request, potencialParents, items, dtoClass));
    // Set all results as trimmed = true. FE expects trimmed value in the table.
    results.forEach(result -> ((AbstractDto) result).setTrimmed(true));
    return new PageImpl<>(results, pageable, originalPage.getTotalElements());
}
Also used : PageImpl(org.springframework.data.domain.PageImpl) ArrayList(java.util.ArrayList) IntrospectionException(java.beans.IntrospectionException) ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) IdmRequestDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestDto) IOException(java.io.IOException) BaseFilter(eu.bcvsolutions.idm.core.api.dto.filter.BaseFilter) IdmRequestItemDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto)

Aggregations

IdmRequestItemDto (eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto)27 IdmRequestDto (eu.bcvsolutions.idm.core.api.dto.IdmRequestDto)21 Requestable (eu.bcvsolutions.idm.core.api.domain.Requestable)14 IdmRoleDto (eu.bcvsolutions.idm.core.api.dto.IdmRoleDto)12 ResultCodeException (eu.bcvsolutions.idm.core.api.exception.ResultCodeException)10 AbstractCoreWorkflowIntegrationTest (eu.bcvsolutions.idm.core.AbstractCoreWorkflowIntegrationTest)9 Test (org.junit.Test)9 AbstractDto (eu.bcvsolutions.idm.core.api.dto.AbstractDto)8 IdmRequestItemFilter (eu.bcvsolutions.idm.core.api.dto.filter.IdmRequestItemFilter)7 IOException (java.io.IOException)7 OperationResultDto (eu.bcvsolutions.idm.core.api.dto.OperationResultDto)6 IdmRequestItemService (eu.bcvsolutions.idm.core.api.service.IdmRequestItemService)6 IdmFormValueDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto)6 RequestOperationType (eu.bcvsolutions.idm.core.api.domain.RequestOperationType)5 RequestState (eu.bcvsolutions.idm.core.api.domain.RequestState)5 IdmRequestItemChangesDto (eu.bcvsolutions.idm.core.api.dto.IdmRequestItemChangesDto)5 RequestManager (eu.bcvsolutions.idm.core.api.service.RequestManager)5 IdmFormInstanceDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto)5 WorkflowProcessInstanceService (eu.bcvsolutions.idm.core.workflow.service.WorkflowProcessInstanceService)5 ArrayList (java.util.ArrayList)5