Search in sources :

Example 26 with IdmRequestDto

use of eu.bcvsolutions.idm.core.api.dto.IdmRequestDto 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)

Example 27 with IdmRequestDto

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

the class DefaultRequestManager method deleteRequestable.

@Override
@Transactional(noRollbackFor = { AcceptedException.class })
public <R extends Requestable> IdmRequestDto deleteRequestable(R dto, boolean executeImmediately) {
    Assert.notNull(dto, "DTO is required.");
    Assert.notNull(dto.getId(), "Requestable DTO cannot be null!");
    // Create and save request
    IdmRequestDto request = new IdmRequestDto();
    this.initRequest(request, dto);
    request.setExecuteImmediately(executeImmediately);
    request = requestService.save(request);
    // Create item
    this.delete(request.getId(), dto);
    // Start request
    return this.startRequestInternal(request.getId(), true);
}
Also used : IdmRequestDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestDto) Transactional(org.springframework.transaction.annotation.Transactional)

Example 28 with IdmRequestDto

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

the class DefaultRequestManager method onDeleteRequestable.

@Override
@Transactional
public <R extends Requestable> void onDeleteRequestable(R requestable) {
    Assert.notNull(requestable, "Requestable DTO cannot be null!");
    // Search requests with that deleting owner
    IdmRequestFilter requestFilter = new IdmRequestFilter();
    requestFilter.setOwnerType(requestable.getClass().getName());
    requestFilter.setOwnerId((UUID) requestable.getId());
    List<IdmRequestDto> requests = requestService.find(requestFilter, null).getContent();
    // 
    requests.stream().filter(// We need filtered request which
    request -> RequestState.APPROVED != request.getState()).forEach(request -> {
        // 
        request = changeRequestState(// 
        requestable, // 
        request, new // 
        ResultCodeException(// 
        CoreResultCode.REQUEST_OWNER_WAS_DELETED, // 
        ImmutableMap.of("owner", requestable.toString())));
        requestService.save(request);
    });
    // Search request items with that deleting owner
    IdmRequestItemFilter requestItemFilter = new IdmRequestItemFilter();
    requestItemFilter.setOwnerType(requestable.getClass().getName());
    requestItemFilter.setOwnerId((UUID) requestable.getId());
    List<IdmRequestItemDto> requestItems = requestItemService.find(requestItemFilter, null).getContent();
    // 
    requestItems.stream().filter(// We need filtered request which invoked that
    item -> RequestState.APPROVED != item.getState()).forEach(item -> {
        // 
        item = changeItemState(// 
        requestable, // 
        item, new // 
        ResultCodeException(// 
        CoreResultCode.REQUEST_OWNER_WAS_DELETED, // 
        ImmutableMap.of("owner", requestable.toString())));
        requestItemService.save(item);
        IdmRequestItemFilter subItemFilter = new IdmRequestItemFilter();
        subItemFilter.setRequestId(item.getRequest());
        // Search all items for that request
        List<IdmRequestItemDto> subItems = requestItemService.find(subItemFilter, null).getContent();
        // TODO: This can be (maybe) removed ... because that 'cancel' is implemented
        // during realization of item
        // Check if items in same request does not contains same ID of deleting owner in
        // the DATA Json.
        // If yes, then state will be changed to cancel.
        // 
        subItems.stream().filter(// We need filtered request
        subItem -> RequestState.APPROVED != subItem.getState()).filter(// 
        subItem -> !requestable.getId().equals(subItem.getOwnerId())).filter(// 
        subItem -> subItem.getData() != null).filter(subItem -> // 
        subItem.getData().indexOf(requestable.getId().toString()) != // 
        -1).forEach(subItem -> {
            // 
            subItem = changeItemState(// 
            requestable, // 
            subItem, new // 
            ResultCodeException(// 
            CoreResultCode.REQUEST_OWNER_FROM_OTHER_REQUEST_WAS_DELETED, ImmutableMap.of("owner", requestable.toString(), "otherRequest", // 
            subItem.toString())));
            requestItemService.save(subItem);
        });
    });
// 
}
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) IdmRequestItemDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto) IdmRequestFilter(eu.bcvsolutions.idm.core.api.dto.filter.IdmRequestFilter) IdmRequestItemFilter(eu.bcvsolutions.idm.core.api.dto.filter.IdmRequestItemFilter) ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) IdmRequestDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestDto) Transactional(org.springframework.transaction.annotation.Transactional)

Example 29 with IdmRequestDto

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

the class DefaultIdmRequestService method toDto.

@Override
public IdmRequestDto toDto(IdmRequest entity, IdmRequestDto dto) {
    IdmRequestDto requestDto = super.toDto(entity, dto);
    // Load and add WF process DTO to embedded. Prevents of many requests from FE.
    if (requestDto != null && requestDto.getWfProcessId() != null) {
        if (RequestState.IN_PROGRESS == requestDto.getState()) {
            // Instance of process should exists only in 'IN_PROGRESS' state
            WorkflowProcessInstanceDto processInstanceDto = workflowProcessInstanceService.get(requestDto.getWfProcessId());
            // size
            if (processInstanceDto != null) {
                processInstanceDto.setProcessVariables(null);
            }
            requestDto.getEmbedded().put(AbstractRequestDto.WF_PROCESS_FIELD, processInstanceDto);
        } else {
            // In others states we need load historic process
            WorkflowHistoricProcessInstanceDto processHistDto = workflowHistoricProcessInstanceService.get(requestDto.getWfProcessId());
            // size
            if (processHistDto != null) {
                processHistDto.setProcessVariables(null);
            }
            requestDto.getEmbedded().put(AbstractRequestDto.WF_PROCESS_FIELD, processHistDto);
        }
    }
    // Load and add owner DTO to embedded. Prevents of many requests from FE.
    if (requestDto != null && requestDto.getOwnerId() != null && requestDto.getOwnerType() != null) {
        try {
            @SuppressWarnings("unchecked") Requestable requestable = requestManager.get(requestDto.getId(), requestDto.getOwnerId(), (Class<Requestable>) Class.forName(requestDto.getOwnerType()));
            if (requestable instanceof AbstractDto) {
                // If is requestable realized REMOVE, then requestable DTO does not contains
                // data (only ID). In this case we don't want send this DTO to FE.
                AbstractDto requestableDto = (AbstractDto) requestable;
                IdmRequestItemDto itemDto = DtoUtils.getEmbedded(requestableDto, Requestable.REQUEST_ITEM_FIELD, IdmRequestItemDto.class, null);
                if (itemDto != null && RequestOperationType.REMOVE == itemDto.getOperation() && itemDto.getState().isTerminatedState()) {
                    requestable = null;
                }
                // Minimise response size
                requestableDto.setEmbedded(null);
            }
            if (requestable == null) {
                // Entity was not found ... maybe was deleted or not exists yet
                LOG.debug(MessageFormat.format("Owner [{0}, {1}] not found for request {2}.", requestDto.getOwnerType(), requestDto.getOwnerId(), requestDto.getId()));
            }
            requestDto.getEmbedded().put(IdmRequestDto.OWNER_FIELD, requestable);
        } catch (ClassNotFoundException e) {
            // Only print warning
            LOG.warn(MessageFormat.format("Class not found for request {0}.", requestDto.getId()), e);
        }
    }
    return requestDto;
}
Also used : IdmRequestItemDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto) Requestable(eu.bcvsolutions.idm.core.api.domain.Requestable) AbstractDto(eu.bcvsolutions.idm.core.api.dto.AbstractDto) IdmRequestDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestDto) WorkflowProcessInstanceDto(eu.bcvsolutions.idm.core.workflow.model.dto.WorkflowProcessInstanceDto) WorkflowHistoricProcessInstanceDto(eu.bcvsolutions.idm.core.workflow.model.dto.WorkflowHistoricProcessInstanceDto)

Example 30 with IdmRequestDto

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

the class DefaultIdmRequestService method toEntity.

@Override
protected IdmRequest toEntity(IdmRequestDto dto, IdmRequest entity) {
    if (this.isNew(dto)) {
        dto.setResult(new OperationResultDto(OperationState.CREATED));
        dto.setState(RequestState.CONCEPT);
    } else if (dto.getResult() == null) {
        IdmRequestDto persistedDto = this.get(dto.getId());
        dto.setResult(persistedDto.getResult());
    }
    IdmRequest requestEntity = super.toEntity(dto, entity);
    return requestEntity;
}
Also used : OperationResultDto(eu.bcvsolutions.idm.core.api.dto.OperationResultDto) IdmRequest(eu.bcvsolutions.idm.core.model.entity.IdmRequest) IdmRequestDto(eu.bcvsolutions.idm.core.api.dto.IdmRequestDto)

Aggregations

IdmRequestDto (eu.bcvsolutions.idm.core.api.dto.IdmRequestDto)47 IdmRoleDto (eu.bcvsolutions.idm.core.api.dto.IdmRoleDto)25 Test (org.junit.Test)24 Requestable (eu.bcvsolutions.idm.core.api.domain.Requestable)23 IdmRequestItemDto (eu.bcvsolutions.idm.core.api.dto.IdmRequestItemDto)23 AbstractCoreWorkflowIntegrationTest (eu.bcvsolutions.idm.core.AbstractCoreWorkflowIntegrationTest)18 ResultCodeException (eu.bcvsolutions.idm.core.api.exception.ResultCodeException)18 IdmIdentityDto (eu.bcvsolutions.idm.core.api.dto.IdmIdentityDto)13 AbstractDto (eu.bcvsolutions.idm.core.api.dto.AbstractDto)11 UUID (java.util.UUID)11 IdmRequestItemChangesDto (eu.bcvsolutions.idm.core.api.dto.IdmRequestItemChangesDto)9 Transactional (org.springframework.transaction.annotation.Transactional)9 RequestState (eu.bcvsolutions.idm.core.api.domain.RequestState)8 IdmRequestItemAttributeDto (eu.bcvsolutions.idm.core.api.dto.IdmRequestItemAttributeDto)8 IdmRequestFilter (eu.bcvsolutions.idm.core.api.dto.filter.IdmRequestFilter)8 IdmRequestService (eu.bcvsolutions.idm.core.api.service.IdmRequestService)8 IdmFormInstanceDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto)8 IdmFormValueDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto)8 Lists (com.google.common.collect.Lists)7 IdmRequestItemService (eu.bcvsolutions.idm.core.api.service.IdmRequestItemService)7