Search in sources :

Example 1 with InvalidFormException

use of eu.bcvsolutions.idm.core.api.exception.InvalidFormException in project CzechIdMng by bcvsolutions.

the class FormInstanceValidateProcessor method process.

@Override
public EventResult<IdmFormInstanceDto> process(EntityEvent<IdmFormInstanceDto> event) {
    IdmFormInstanceDto formInstance = event.getContent();
    Assert.notNull(formInstance.getFormDefinition(), "Form definition is required for form instance validation.");
    // 
    // resolve given / configured / overridden / default form definition
    // configured definition is loaded only once and applied twice (optimization)
    IdmFormDefinitionDto configuredFormDefinition = formProjectionManager.getConfiguredFormDefinition(getOwner(formInstance), formInstance.getFormDefinition());
    IdmFormDefinitionDto formDefinition = formProjectionManager.overrideFormDefinition(formService.getDefinition(formInstance.getFormDefinition().getId()), configuredFormDefinition);
    Assert.notNull(formDefinition, "Form definition is required for form instance validation.");
    IdmFormDefinitionDto formInstanceDefinition = formProjectionManager.overrideFormDefinition(formInstance.getFormDefinition(), configuredFormDefinition);
    Assert.notNull(formInstanceDefinition, "Form definition is required for form instance validation.");
    // 
    Map<String, Serializable> properties = event.getProperties();
    // 
    // get distinct attributes from the sent values
    // PATCH is used - only sent attributes are validated
    Set<IdmFormAttributeDto> sentAttributes = formInstance.getValues().stream().map(IdmFormValueDto::getFormAttribute).map(attributeId -> {
        IdmFormAttributeDto mappedAttribute = formInstanceDefinition.getMappedAttribute(attributeId);
        if (mappedAttribute != null) {
            return mappedAttribute;
        }
        return formDefinition.getMappedAttribute(attributeId);
    }).collect(Collectors.toSet());
    // only sent attributes in definition and instance
    formDefinition.setFormAttributes(Lists.newArrayList(sentAttributes));
    formInstance.setFormDefinition(formDefinition);
    // validate
    List<InvalidFormAttributeDto> errors = formService.validate(formInstance);
    // skip <required> validation if contract update is performed from time slice
    if (getBooleanProperty(ContractSliceManager.SKIP_CHECK_FOR_SLICES, properties)) {
        errors = errors.stream().filter(error -> {
            return !error.isMissingValue();
        }).collect(Collectors.toList());
    }
    if (!errors.isEmpty()) {
        throw new InvalidFormException(errors);
    }
    // 
    return new DefaultEventResult<>(event, this);
}
Also used : IdmFormInstanceDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto) IdmFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto) FormProjectionManager(eu.bcvsolutions.idm.core.eav.api.service.FormProjectionManager) Autowired(org.springframework.beans.factory.annotation.Autowired) CoreEventProcessor(eu.bcvsolutions.idm.core.api.event.CoreEventProcessor) FormService(eu.bcvsolutions.idm.core.eav.api.service.FormService) FormInstanceProcessor(eu.bcvsolutions.idm.core.eav.api.event.processor.FormInstanceProcessor) Lists(com.google.common.collect.Lists) LookupService(eu.bcvsolutions.idm.core.api.service.LookupService) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto) Map(java.util.Map) DefaultEventResult(eu.bcvsolutions.idm.core.api.event.DefaultEventResult) EventResult(eu.bcvsolutions.idm.core.api.event.EventResult) IdmFormInstanceDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto) EntityEvent(eu.bcvsolutions.idm.core.api.event.EntityEvent) Description(org.springframework.context.annotation.Description) Set(java.util.Set) Collectors(java.util.stream.Collectors) Serializable(java.io.Serializable) InvalidFormException(eu.bcvsolutions.idm.core.api.exception.InvalidFormException) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) List(java.util.List) Component(org.springframework.stereotype.Component) CoreEventType(eu.bcvsolutions.idm.core.api.event.CoreEvent.CoreEventType) Identifiable(eu.bcvsolutions.idm.core.api.domain.Identifiable) ContractSliceManager(eu.bcvsolutions.idm.core.api.service.ContractSliceManager) Assert(org.springframework.util.Assert) InvalidFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.InvalidFormAttributeDto) Serializable(java.io.Serializable) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) InvalidFormException(eu.bcvsolutions.idm.core.api.exception.InvalidFormException) IdmFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto) InvalidFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.InvalidFormAttributeDto) DefaultEventResult(eu.bcvsolutions.idm.core.api.event.DefaultEventResult) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto)

Example 2 with InvalidFormException

use of eu.bcvsolutions.idm.core.api.exception.InvalidFormException in project CzechIdMng by bcvsolutions.

the class DefaultIdmConceptRoleRequestService method saveInternal.

@Override
@Transactional
public IdmConceptRoleRequestDto saveInternal(IdmConceptRoleRequestDto dto) {
    IdmConceptRoleRequestDto savedDto = super.saveInternal(dto);
    if (dto != null && dto.getRole() != null) {
        // TODO: concept role request hasn't events, after implement events for the dto, please remove this.
        boolean isNew = false;
        if (isNew(dto)) {
            isNew = true;
            dto = valueGeneratorManager.generate(dto);
        }
        IdmRoleDto roleDto = roleService.get(dto.getRole());
        if (roleDto == null) {
            throw new ResultCodeException(CoreResultCode.NOT_FOUND, ImmutableMap.of("entity", dto.getRole()));
        }
        List<InvalidFormAttributeDto> validationErrors = validateFormAttributes(dto);
        if (validationErrors != null && !validationErrors.isEmpty()) {
            throw new InvalidFormException(validationErrors);
        }
        List<IdmFormValueDto> attributeValues = dto.getEavs().size() == 1 && dto.getEavs().get(0) != null ? dto.getEavs().get(0).getValues() : null;
        // If concept is new, then we have to clear id of EAV values (new one have to be generated for this case).
        if (isNew && attributeValues != null) {
            attributeValues.forEach(value -> {
                DtoUtils.clearAuditFields(value);
                value.setId(null);
            });
        }
        // Load sub definition by role
        IdmFormDefinitionDto formDefinitionDto = roleService.getFormAttributeSubdefinition(roleDto);
        if (formDefinitionDto != null) {
            // Save form values for sub-definition. Validation is skipped. Was made before in this method, because now can be id of values null.
            List<IdmFormValueDto> savedValues = formService.saveFormInstance(savedDto, formDefinitionDto, attributeValues, false).getValues();
            IdmFormInstanceDto formInstance = new IdmFormInstanceDto();
            formInstance.setValues(savedValues);
            savedDto.getEavs().clear();
            savedDto.getEavs().add(formInstance);
        }
    }
    return savedDto;
}
Also used : IdmFormInstanceDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto) IdmRoleDto(eu.bcvsolutions.idm.core.api.dto.IdmRoleDto) ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) InvalidFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.InvalidFormAttributeDto) IdmConceptRoleRequestDto(eu.bcvsolutions.idm.core.api.dto.IdmConceptRoleRequestDto) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) InvalidFormException(eu.bcvsolutions.idm.core.api.exception.InvalidFormException) Transactional(org.springframework.transaction.annotation.Transactional)

Example 3 with InvalidFormException

use of eu.bcvsolutions.idm.core.api.exception.InvalidFormException in project CzechIdMng by bcvsolutions.

the class FormableValidateBasicFieldsProcessor method process.

@Override
public EventResult<FormableDto> process(EntityEvent<FormableDto> event) {
    // saved dto
    FormableDto savedDto = event.getContent();
    // 
    IdmFormInstanceDto basicFields = formProjectionManager.getBasicFieldsInstance(savedDto);
    if (basicFields != null) {
        List<InvalidFormAttributeDto> errors = formService.validate(basicFields);
        if (!errors.isEmpty()) {
            throw new InvalidFormException(errors);
        }
    }
    // 
    return new DefaultEventResult<>(event, this);
}
Also used : IdmFormInstanceDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto) FormableDto(eu.bcvsolutions.idm.core.api.dto.FormableDto) InvalidFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.InvalidFormAttributeDto) DefaultEventResult(eu.bcvsolutions.idm.core.api.event.DefaultEventResult) InvalidFormException(eu.bcvsolutions.idm.core.api.exception.InvalidFormException)

Aggregations

InvalidFormException (eu.bcvsolutions.idm.core.api.exception.InvalidFormException)3 IdmFormInstanceDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto)3 InvalidFormAttributeDto (eu.bcvsolutions.idm.core.eav.api.dto.InvalidFormAttributeDto)3 DefaultEventResult (eu.bcvsolutions.idm.core.api.event.DefaultEventResult)2 IdmFormDefinitionDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto)2 IdmFormValueDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto)2 Lists (com.google.common.collect.Lists)1 Identifiable (eu.bcvsolutions.idm.core.api.domain.Identifiable)1 FormableDto (eu.bcvsolutions.idm.core.api.dto.FormableDto)1 IdmConceptRoleRequestDto (eu.bcvsolutions.idm.core.api.dto.IdmConceptRoleRequestDto)1 IdmRoleDto (eu.bcvsolutions.idm.core.api.dto.IdmRoleDto)1 CoreEventType (eu.bcvsolutions.idm.core.api.event.CoreEvent.CoreEventType)1 CoreEventProcessor (eu.bcvsolutions.idm.core.api.event.CoreEventProcessor)1 EntityEvent (eu.bcvsolutions.idm.core.api.event.EntityEvent)1 EventResult (eu.bcvsolutions.idm.core.api.event.EventResult)1 ResultCodeException (eu.bcvsolutions.idm.core.api.exception.ResultCodeException)1 ContractSliceManager (eu.bcvsolutions.idm.core.api.service.ContractSliceManager)1 LookupService (eu.bcvsolutions.idm.core.api.service.LookupService)1 IdmFormAttributeDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto)1 FormInstanceProcessor (eu.bcvsolutions.idm.core.eav.api.event.processor.FormInstanceProcessor)1