Search in sources :

Example 1 with IdmFormDefinitionDto

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

the class DefaultFormService method saveValues.

@Override
@Transactional
public List<IdmFormValueDto> saveValues(Identifiable owner, IdmFormAttributeDto attribute, List<Serializable> persistentValues) {
    Assert.notNull(owner, "Form values owner is required!");
    Assert.notNull(owner.getId(), "Owner id is required!");
    Assert.notNull(attribute, "Form attribute definition is required!");
    FormableEntity ownerEntity = getOwnerEntity(owner);
    IdmFormDefinitionDto formDefinition = formDefinitionService.get(attribute.getFormDefinition());
    // 
    if (persistentValues == null || persistentValues.isEmpty()) {
        // delete previous attributes
        deleteValues(ownerEntity, attribute);
        return null;
    }
    if (!attribute.isMultiple() && persistentValues.size() > 1) {
        throw new IllegalArgumentException(MessageFormat.format("Form attribute [{0}:{1}] does not support multivalue, sent [{2}] values.", formDefinition.getCode(), attribute.getCode(), persistentValues.size()));
    }
    FormValueService<FormableEntity> formValueService = getFormValueService(ownerEntity);
    // get old values
    List<IdmFormValueDto> values = formValueService.getValues(ownerEntity, attribute);
    // size isn't same drop and create
    if (values.size() != persistentValues.size()) {
        deleteValues(owner, attribute);
        // create
        List<IdmFormValueDto> results = new ArrayList<>();
        for (short seq = 0; seq < persistentValues.size(); seq++) {
            IdmFormValueDto value = new IdmFormValueDto();
            value.setOwnerAndAttribute(ownerEntity, attribute);
            // 
            value.setValue(persistentValues.get(seq));
            value.setSeq(seq);
            results.add(formValueService.save(value));
        }
        ;
        // 
        return results;
    }
    // compare values
    List<IdmFormValueDto> results = new ArrayList<>();
    for (IdmFormValueDto value : values) {
        IdmFormValueDto newValue = new IdmFormValueDto();
        newValue.setOwnerAndAttribute(ownerEntity, attribute);
        Serializable serializableValue = persistentValues.get(value.getSeq());
        newValue.setValue(serializableValue);
        if (!value.isEquals(newValue)) {
            value.setValue(serializableValue);
            results.add(formValueService.save(value));
        }
    }
    return results;
}
Also used : Serializable(java.io.Serializable) ArrayList(java.util.ArrayList) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto) FormableEntity(eu.bcvsolutions.idm.core.eav.api.entity.FormableEntity) Transactional(org.springframework.transaction.annotation.Transactional)

Example 2 with IdmFormDefinitionDto

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

the class DefaultFormService method saveFormInstance.

/**
 * {@inheritDoc}
 *
 * TODO: validations by given form definition? I don't think, it will not be
 * useful in synchronization etc. - only FE validations will be enough ...
 */
@Override
@Transactional
public IdmFormInstanceDto saveFormInstance(Identifiable owner, IdmFormDefinitionDto formDefinition, List<IdmFormValueDto> values) {
    FormableEntity ownerEntity = getOwnerEntity(owner);
    Assert.notNull(values, "Form values are required!");
    Assert.notNull(ownerEntity, "Form values owner is required!");
    formDefinition = checkDefaultDefinition(ownerEntity.getClass(), formDefinition);
    // 
    FormValueService<FormableEntity> formValueService = getFormValueService(ownerEntity);
    // 
    Map<UUID, IdmFormValueDto> previousValues = new HashMap<>();
    formValueService.getValues(ownerEntity, formDefinition).forEach(formValue -> {
        previousValues.put(formValue.getId(), formValue);
    });
    // 
    List<IdmFormValueDto> results = new ArrayList<>();
    for (IdmFormValueDto value : values) {
        // value could contant attribute id only
        UUID attributeId = value.getFormAttribute();
        Assert.notNull(attributeId, "Form attribute is required");
        IdmFormAttributeDto attribute = formDefinition.getMappedAttribute(attributeId);
        Assert.notNull(attribute, "Form attribute is required");
        // 
        value.setOwnerAndAttribute(ownerEntity, attribute);
        // 
        IdmFormValueDto previousValue = value.getId() == null ? null : previousValues.get(value.getId());
        if (previousValue != null) {
            // saved values will not be removed
            previousValues.remove(value.getId());
            // confidential value is always updated - only new values are sent from client
            if (value.isConfidential() || !value.isEquals(previousValue)) {
                // update value
                results.add(formValueService.save(value));
                LOG.trace("FormValue [{}:{}] for owner [{}] was updated", attribute.getCode(), value.getId(), ownerEntity);
            }
        } else {
            // create new value
            results.add(formValueService.save(value));
            LOG.trace("FormValue [{}:{}] for owner [{}] was created", attribute.getCode(), value.getId(), ownerEntity);
        }
    }
    // 
    // remove unsaved values by attribute definition (patch method is not
    // implemented now)
    previousValues.values().stream().filter(formValue -> {
        // they could not be sent with form (only changed values)
        return !formValue.isConfidential();
    }).forEach(value -> {
        formValueService.delete(value);
        LOG.trace("FormValue [{}:{}] for owner [{}] was deleted", value.getFormAttribute(), value.getId(), ownerEntity);
    });
    // publish event - eav was saved
    if (lookupService.getDtoLookup(ownerEntity.getClass()) == null) {
        // TODO: remove this branch after all agends will be rewritten to dto usage
        entityEventManager.process(new CoreEvent<>(CoreEventType.EAV_SAVE, ownerEntity));
    } else {
        entityEventManager.process(new CoreEvent<>(CoreEventType.EAV_SAVE, lookupService.lookupDto(ownerEntity.getClass(), ownerEntity.getId())));
    }
    // 
    return new IdmFormInstanceDto(ownerEntity, formDefinition, results);
}
Also used : FormableEntity(eu.bcvsolutions.idm.core.eav.api.entity.FormableEntity) OrderAwarePluginRegistry(org.springframework.plugin.core.OrderAwarePluginRegistry) IdmFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto) PluginRegistry(org.springframework.plugin.core.PluginRegistry) Autowired(org.springframework.beans.factory.annotation.Autowired) HashMap(java.util.HashMap) FormService(eu.bcvsolutions.idm.core.eav.api.service.FormService) StringUtils(org.apache.commons.lang3.StringUtils) MessageFormat(java.text.MessageFormat) ArrayList(java.util.ArrayList) PersistentType(eu.bcvsolutions.idm.core.eav.api.domain.PersistentType) Introspector(java.beans.Introspector) CoreEvent(eu.bcvsolutions.idm.core.api.event.CoreEvent) Lists(com.google.common.collect.Lists) LookupService(eu.bcvsolutions.idm.core.api.service.LookupService) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto) ResultCodeException(eu.bcvsolutions.idm.core.api.exception.ResultCodeException) Map(java.util.Map) IdmFormAttributeService(eu.bcvsolutions.idm.core.eav.api.service.IdmFormAttributeService) Pageable(org.springframework.data.domain.Pageable) IdmFormInstanceDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto) Method(java.lang.reflect.Method) ConfigurationClass(eu.bcvsolutions.idm.core.api.domain.ConfigurationClass) ImmutableMap(com.google.common.collect.ImmutableMap) CoreException(eu.bcvsolutions.idm.core.api.exception.CoreException) ConfigurationClassProperty(eu.bcvsolutions.idm.core.api.domain.ConfigurationClassProperty) UUID(java.util.UUID) Page(org.springframework.data.domain.Page) Collectors(java.util.stream.Collectors) IntrospectionException(java.beans.IntrospectionException) Serializable(java.io.Serializable) InvocationTargetException(java.lang.reflect.InvocationTargetException) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) List(java.util.List) CoreResultCode(eu.bcvsolutions.idm.core.api.domain.CoreResultCode) FormValueService(eu.bcvsolutions.idm.core.eav.api.service.FormValueService) IdmFormDefinitionService(eu.bcvsolutions.idm.core.eav.api.service.IdmFormDefinitionService) PropertyDescriptor(java.beans.PropertyDescriptor) CoreEventType(eu.bcvsolutions.idm.core.api.event.CoreEvent.CoreEventType) Identifiable(eu.bcvsolutions.idm.core.api.domain.Identifiable) BaseDto(eu.bcvsolutions.idm.core.api.dto.BaseDto) PageImpl(org.springframework.data.domain.PageImpl) EntityEventManager(eu.bcvsolutions.idm.core.api.service.EntityEventManager) Transactional(org.springframework.transaction.annotation.Transactional) Assert(org.springframework.util.Assert) IdmFormInstanceDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto) HashMap(java.util.HashMap) IdmFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto) ArrayList(java.util.ArrayList) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto) UUID(java.util.UUID) FormableEntity(eu.bcvsolutions.idm.core.eav.api.entity.FormableEntity) Transactional(org.springframework.transaction.annotation.Transactional)

Example 3 with IdmFormDefinitionDto

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

the class DefaultSysSystemServiceTest method testFormAttributes.

/**
 * Test add and delete extended attributes to owner
 */
@Test
public void testFormAttributes() {
    // create owner
    SysSystemDto system = new SysSystemDto();
    system.setName(SYSTEM_NAME_ONE);
    system = systemService.save(system);
    SysSystemDto systemOne = systemService.getByCode(SYSTEM_NAME_ONE);
    assertEquals(SYSTEM_NAME_ONE, systemOne.getName());
    // 
    // create definition one
    IdmFormDefinitionDto formDefinitionOne = new IdmFormDefinitionDto();
    formDefinitionOne.setType(SysSystem.class.getCanonicalName());
    formDefinitionOne.setCode("v1");
    formDefinitionOne = formDefinitionService.save(formDefinitionOne);
    IdmFormAttributeDto attributeDefinitionOne = new IdmFormAttributeDto();
    attributeDefinitionOne.setFormDefinition(formDefinitionOne.getId());
    attributeDefinitionOne.setCode("name_" + System.currentTimeMillis());
    attributeDefinitionOne.setName(attributeDefinitionOne.getCode());
    attributeDefinitionOne.setPersistentType(PersistentType.TEXT);
    attributeDefinitionOne = formAttributeService.save(attributeDefinitionOne);
    formDefinitionOne = formDefinitionService.get(formDefinitionOne.getId());
    // 
    // create definition two
    IdmFormDefinitionDto formDefinitionTwo = new IdmFormDefinitionDto();
    formDefinitionTwo.setType(SysSystem.class.getCanonicalName());
    formDefinitionTwo.setCode("v2");
    formDefinitionTwo = formDefinitionService.save(formDefinitionTwo);
    IdmFormAttributeDto attributeDefinitionTwo = new IdmFormAttributeDto();
    attributeDefinitionTwo.setFormDefinition(formDefinitionTwo.getId());
    attributeDefinitionTwo.setCode("name_" + System.currentTimeMillis());
    attributeDefinitionTwo.setName(attributeDefinitionTwo.getCode());
    attributeDefinitionTwo.setPersistentType(PersistentType.TEXT);
    attributeDefinitionTwo = formAttributeService.save(attributeDefinitionTwo);
    formDefinitionTwo = formDefinitionService.get(formDefinitionTwo.getId());
    // 
    IdmFormValueDto value1 = new IdmFormValueDto(attributeDefinitionOne);
    value1.setValue("test1");
    IdmFormValueDto value2 = new IdmFormValueDto(attributeDefinitionTwo);
    value2.setValue("test2");
    formService.saveValues(system, formDefinitionOne, Lists.newArrayList(value1));
    formService.saveValues(system, formDefinitionTwo, Lists.newArrayList(value2));
    assertEquals("test1", formService.getValues(system, formDefinitionOne).get(0).getStringValue());
    assertEquals("test2", formService.getValues(system, formDefinitionTwo).get(0).getStringValue());
    assertEquals("test2", formService.getValues(system, formDefinitionTwo, attributeDefinitionTwo.getName()).get(0).getValue());
    // 
    // create second owner
    SysSystemDto systemTwo = new SysSystemDto();
    systemTwo.setName(SYSTEM_NAME_TWO);
    systemTwo = systemService.save(systemTwo);
    assertEquals(0, formService.getValues(systemTwo, formDefinitionOne).size());
    assertEquals(0, formService.getValues(systemTwo, formDefinitionTwo).size());
    assertEquals(1, formService.getValues(system, formDefinitionOne).size());
    assertEquals(1, formService.getValues(system, formDefinitionTwo).size());
    systemService.delete(systemTwo);
    assertEquals(1, formService.getValues(system, formDefinitionOne).size());
    assertEquals(1, formService.getValues(system, formDefinitionTwo).size());
    formService.deleteValues(system, formDefinitionOne);
    assertEquals(0, formService.getValues(system, formDefinitionOne).size());
    assertEquals("test2", formService.getValues(system, formDefinitionTwo).get(0).getStringValue());
    systemService.delete(system);
}
Also used : SysSystem(eu.bcvsolutions.idm.acc.entity.SysSystem) IdmFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto) SysSystemDto(eu.bcvsolutions.idm.acc.dto.SysSystemDto) AbstractIntegrationTest(eu.bcvsolutions.idm.test.api.AbstractIntegrationTest) Test(org.junit.Test)

Example 4 with IdmFormDefinitionDto

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

the class IdentityReportExecutorIntegrationTest method testDisabledIdentity.

@Test
@Transactional
public void testDisabledIdentity() throws IOException {
    // prepare test identities
    IdmIdentityDto identityOne = helper.createIdentity();
    IdmIdentityDto identityDisabled = helper.createIdentity();
    identityService.disable(identityDisabled.getId());
    // 
    // prepare report filter
    RptReportDto report = new RptReportDto(UUID.randomUUID());
    report.setExecutorName(reportExecutor.getName());
    IdmFormDto filter = new IdmFormDto();
    IdmFormDefinitionDto definition = reportExecutor.getFormDefinition();
    IdmFormValueDto disabled = new IdmFormValueDto(definition.getMappedAttributeByCode(IdmIdentityFilter.PARAMETER_DISABLED));
    disabled.setValue(false);
    filter.getValues().add(disabled);
    filter.setFormDefinition(definition.getId());
    report.setFilter(filter);
    // 
    // generate report
    report = reportExecutor.generate(report);
    Assert.assertNotNull(report.getData());
    List<IdmIdentityDto> identityRoles = mapper.readValue(attachmentManager.getAttachmentData(report.getData()), new TypeReference<List<IdmIdentityDto>>() {
    });
    // 
    // test
    Assert.assertTrue(identityRoles.stream().anyMatch(i -> i.equals(identityOne)));
    Assert.assertFalse(identityRoles.stream().anyMatch(i -> i.equals(identityDisabled)));
    // 
    attachmentManager.deleteAttachments(report);
}
Also used : Autowired(org.springframework.beans.factory.annotation.Autowired) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto) IdmIdentityFilter(eu.bcvsolutions.idm.core.api.dto.filter.IdmIdentityFilter) After(org.junit.After) IdmFormDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDto) TestHelper(eu.bcvsolutions.idm.test.api.TestHelper) Qualifier(org.springframework.beans.factory.annotation.Qualifier) AbstractIntegrationTest(eu.bcvsolutions.idm.test.api.AbstractIntegrationTest) TypeReference(com.fasterxml.jackson.core.type.TypeReference) LoginService(eu.bcvsolutions.idm.core.security.api.service.LoginService) Before(org.junit.Before) InitTestData(eu.bcvsolutions.idm.InitTestData) IdentityReportXlsxRenderer(eu.bcvsolutions.idm.rpt.renderer.IdentityReportXlsxRenderer) AttachmentManager(eu.bcvsolutions.idm.core.ecm.api.service.AttachmentManager) IdmIdentityDto(eu.bcvsolutions.idm.core.api.dto.IdmIdentityDto) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) IOException(java.io.IOException) Test(org.junit.Test) UUID(java.util.UUID) RptReportDto(eu.bcvsolutions.idm.rpt.api.dto.RptReportDto) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) List(java.util.List) IdmIdentityService(eu.bcvsolutions.idm.core.api.service.IdmIdentityService) GuardedString(eu.bcvsolutions.idm.core.security.api.domain.GuardedString) Assert(org.junit.Assert) LoginDto(eu.bcvsolutions.idm.core.security.api.dto.LoginDto) Transactional(org.springframework.transaction.annotation.Transactional) IdmFormDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDto) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) IdmFormValueDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto) List(java.util.List) RptReportDto(eu.bcvsolutions.idm.rpt.api.dto.RptReportDto) IdmIdentityDto(eu.bcvsolutions.idm.core.api.dto.IdmIdentityDto) AbstractIntegrationTest(eu.bcvsolutions.idm.test.api.AbstractIntegrationTest) Test(org.junit.Test) Transactional(org.springframework.transaction.annotation.Transactional)

Example 5 with IdmFormDefinitionDto

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

the class DefaultCommonFormServiceIntegrationTest method createDefinition.

private IdmFormAttributeDto createDefinition() {
    IdmFormAttributeDto attributeDefinitionOne = new IdmFormAttributeDto();
    attributeDefinitionOne.setCode(helper.createName());
    attributeDefinitionOne.setName(attributeDefinitionOne.getCode());
    attributeDefinitionOne.setPersistentType(PersistentType.TEXT);
    IdmFormDefinitionDto formDefinitionOne = formService.createDefinition(IdmIdentity.class.getCanonicalName(), helper.createName(), Lists.newArrayList(attributeDefinitionOne));
    return formDefinitionOne.getMappedAttributeByCode(attributeDefinitionOne.getCode());
}
Also used : IdmFormAttributeDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto) IdmFormDefinitionDto(eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto) IdmIdentity(eu.bcvsolutions.idm.core.model.entity.IdmIdentity)

Aggregations

IdmFormDefinitionDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormDefinitionDto)398 Test (org.junit.Test)230 IdmFormAttributeDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormAttributeDto)224 IdmFormValueDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormValueDto)190 AbstractIntegrationTest (eu.bcvsolutions.idm.test.api.AbstractIntegrationTest)165 IdmIdentityDto (eu.bcvsolutions.idm.core.api.dto.IdmIdentityDto)123 IdmFormInstanceDto (eu.bcvsolutions.idm.core.eav.api.dto.IdmFormInstanceDto)119 List (java.util.List)109 GuardedString (eu.bcvsolutions.idm.core.security.api.domain.GuardedString)108 UUID (java.util.UUID)102 IdmRoleDto (eu.bcvsolutions.idm.core.api.dto.IdmRoleDto)98 ResultCodeException (eu.bcvsolutions.idm.core.api.exception.ResultCodeException)83 Autowired (org.springframework.beans.factory.annotation.Autowired)83 ArrayList (java.util.ArrayList)82 Transactional (org.springframework.transaction.annotation.Transactional)80 SysSystemDto (eu.bcvsolutions.idm.acc.dto.SysSystemDto)77 FormService (eu.bcvsolutions.idm.core.eav.api.service.FormService)71 Serializable (java.io.Serializable)68 PersistentType (eu.bcvsolutions.idm.core.eav.api.domain.PersistentType)65 IdmIdentityContractDto (eu.bcvsolutions.idm.core.api.dto.IdmIdentityContractDto)61