diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java new file mode 100644 index 000000000..30ac3a422 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java @@ -0,0 +1,237 @@ +package com.iqser.red.service.persistence.management.v1.processor.service; + +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + +import java.io.IOException; +import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis; +import com.iqser.red.storage.commons.service.StorageService; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +public class DossierTemplateCloneService { + + private final DossierTemplateRepository dossierTemplateRepository; + private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService; + private final RulesPersistenceService rulesPersistenceService; + private final DossierTemplatePersistenceService dossierTemplatePersistenceService; + private final DossierAttributeConfigPersistenceService dossierAttributeConfigPersistenceService; + private final DictionaryPersistenceService dictionaryPersistenceService; + private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; + private final ReportTemplatePersistenceService reportTemplatePersistenceService; + private final WatermarkService watermarkService; + private final ColorsService colorsService; + private final StorageService storageService; + + + public DossierTemplateEntity cloneDossierTemplate(String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) { + + dossierTemplatePersistenceService.validateDossierTemplateNameIsUnique(nameOfClonedDossierTemplate); + + DossierTemplateEntity clonedDossierTemplate = new DossierTemplateEntity(); + + dossierTemplateRepository.findById(dossierTemplateId).ifPresentOrElse((dossierTemplate) -> { + + OffsetDateTime now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); + clonedDossierTemplate.setId(UUID.randomUUID().toString()); + clonedDossierTemplate.setName(nameOfClonedDossierTemplate); + clonedDossierTemplate.setDescription(dossierTemplate.getDescription()); + clonedDossierTemplate.setDateAdded(now); + clonedDossierTemplate.setDateModified(now); + clonedDossierTemplate.setCreatedBy(cloningUserId); + clonedDossierTemplate.setModifiedBy(cloningUserId); + clonedDossierTemplate.setValidFrom(dossierTemplate.getValidFrom()); + clonedDossierTemplate.setValidTo(dossierTemplate.getValidTo()); + clonedDossierTemplate.setSoftDeleteTime(dossierTemplate.getSoftDeleteTime()); + clonedDossierTemplate.setDownloadFileTypes(dossierTemplate.getDownloadFileTypes()); + + //set rules + cloneRules(dossierTemplate.getId(), clonedDossierTemplate.getId()); + //set legal basis + cloneLegalBasisMapping(dossierTemplate.getId(), clonedDossierTemplate.getId()); + + clonedDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(clonedDossierTemplate) + .name())); + dossierTemplateRepository.save(clonedDossierTemplate); + + //set dictionaries + clonedDossierTemplate.setDossierTypes(cloneDictionaries(dossierTemplate.getId(), clonedDossierTemplate.getId())); + + //set dossier attributes + cloneDossierAttributesConfig(dossierTemplate.getId(), clonedDossierTemplate.getId()); + + //set file attributes + cloneFileAttributesGeneralConfig(dossierTemplate.getId(), clonedDossierTemplate.getId()); + + clonedDossierTemplate.setFileAttributeConfigs(cloneFileAttributesConfig(dossierTemplate.getId(), clonedDossierTemplate.getId())); + + //set report templates + clonedDossierTemplate.setReportTemplates(cloneReportTemplates(dossierTemplate, clonedDossierTemplate.getId())); + + //set watermarks + cloneWatermark(dossierTemplate.getId(), clonedDossierTemplate.getId()); + + //set colors + cloneColors(dossierTemplate.getId(), clonedDossierTemplate.getId()); + + dossierTemplateRepository.save(clonedDossierTemplate); + + }, () -> { + throw new NotFoundException(String.format(dossierTemplatePersistenceService.DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId)); + }); + return clonedDossierTemplate; + } + + + private void cloneRules(String dossierTemplateId, String clonedDossierTemplateId) { + + rulesPersistenceService.setRules(rulesPersistenceService.getRules(dossierTemplateId).getValue(), clonedDossierTemplateId); + } + + + private void cloneLegalBasisMapping(String dossierTemplateId, String clonedDossierTemplateId) { + + legalBasisMappingPersistenceService.setLegalBasisMapping(clonedDossierTemplateId, convert(legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplateId), LegalBasis.class)); + } + + + private List cloneDictionaries(String dossierTemplateId, String clonedDossierTemplateId) { + + List clonedTypes = new ArrayList<>(); + var types = dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplateId); + for (TypeEntity t : types) { + TypeEntity te = dictionaryPersistenceService.addType(t.getType(), clonedDossierTemplateId, t.getHexColor(), t.getRecommendationHexColor(), t.getRank(), t.isHint(), t.isCaseInsensitive(), t.isRecommendation(), t.getDescription(), t.isAddToDictionaryAction(), t.getLabel(), null); + te.setDossierTemplateId(clonedDossierTemplateId); + clonedTypes.add(te); + } + return clonedTypes; + } + + + private void cloneDossierAttributesConfig(String dossierTemplateId, String clonedDossierTemplateId) { + + List dacList = new ArrayList<>(); + var dossierAttributesConfig = dossierAttributeConfigPersistenceService.getDossierAttributes(dossierTemplateId); + dossierAttributesConfig.forEach(dossierAttributeConfigEntity -> { + var dac = DossierAttributeConfigEntity.builder() + .label(dossierAttributeConfigEntity.getLabel()) + .editable(dossierAttributeConfigEntity.isEditable()) + .placeholder(dossierAttributeConfigEntity.getPlaceholder()) + .type(dossierAttributeConfigEntity.getType()) + .build(); + dacList.add(dac); + }); + dossierAttributeConfigPersistenceService.setDossierAttributesConfig(clonedDossierTemplateId, dacList); + } + + + private void cloneFileAttributesGeneralConfig(String dossierTemplateId, String clonedDossierTemplateId) { + + var fileAttributesGeneralConfig = fileAttributeConfigPersistenceService.getFileAttributesGeneralConfiguration(dossierTemplateId); + var fagc = FileAttributesGeneralConfigurationEntity.builder() + .dossierTemplateId(clonedDossierTemplateId) + .delimiter(fileAttributesGeneralConfig.getDelimiter()) + .filenameMappingColumnHeaderName(fileAttributesGeneralConfig.getFilenameMappingColumnHeaderName()) + .build(); + fileAttributeConfigPersistenceService.setFileAttributesGeneralConfig(clonedDossierTemplateId, fagc); + } + + + private List cloneFileAttributesConfig(String dossierTemplateId, String clonedDossierTemplateId) { + + List facList = new ArrayList<>(); + var fileAttributesConfig = fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId); + fileAttributesConfig.forEach(fileAttributeConfigEntity -> { + var fac = FileAttributeConfigEntity.builder() + .csvColumnHeader(fileAttributeConfigEntity.getCsvColumnHeader()) + .label(fileAttributeConfigEntity.getLabel()) + .primaryAttribute(fileAttributeConfigEntity.isPrimaryAttribute()) + .editable(fileAttributeConfigEntity.isEditable()) + .filterable(fileAttributeConfigEntity.isFilterable()) + .displayedInFileList(fileAttributeConfigEntity.isDisplayedInFileList()) + .placeholder(fileAttributeConfigEntity.getPlaceholder()) + .type(fileAttributeConfigEntity.getType()) + .build(); + facList.add(fac); + }); + fileAttributeConfigPersistenceService.setFileAttributesConfig(clonedDossierTemplateId, facList); + + return fileAttributeConfigPersistenceService.getFileAttributes(clonedDossierTemplateId); + } + + + private List cloneReportTemplates(DossierTemplateEntity dossierTemplate, String clonedDossierTemplateId) { + + var reportTemplates = dossierTemplate.getReportTemplates(); + for (ReportTemplateEntity rte : reportTemplates) { + var storedReportTemplate = storageService.getObject(rte.getStorageId()); + String storageId = clonedDossierTemplateId + "/" + rte.getFileName(); + String templateId = UUID.randomUUID().toString(); + try { + storageService.storeObject(storageId, storedReportTemplate.getInputStream()); + } catch (IOException e) { + throw new ConflictException("Could not clone report templates of dossier template."); + } + reportTemplatePersistenceService.insert(clonedDossierTemplateId, templateId, storageId, rte.getFileName(), rte.isActiveByDefault(), rte.isMultiFileReport()); + } + return reportTemplatePersistenceService.findByDossierTemplateId(clonedDossierTemplateId); + } + + + private void cloneWatermark(String dossierTemplateId, String clonedDossierTemplateId) { + + var watermark = watermarkService.getWatermark(dossierTemplateId); + WatermarkEntity we = WatermarkEntity.builder() + .dossierTemplateId(clonedDossierTemplateId) + .text(watermark.getText()) + .hexColor(watermark.getHexColor()) + .opacity(watermark.getOpacity()) + .fontType(watermark.getFontType()) + .fontSize(watermark.getFontSize()) + .orientation(watermark.getOrientation()) + .build(); + watermarkService.saveWatermark(clonedDossierTemplateId, we); + } + + + private void cloneColors(String dossierTemplateId, String clonedDossierTemplateId) { + + var colors = colorsService.getColors(dossierTemplateId); + var clonedColors = new ColorsEntity(); + BeanUtils.copyProperties(colors, clonedColors); + clonedColors.setDossierTemplateId(clonedDossierTemplateId); + colorsService.saveColors(clonedColors); + } + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java index 33d83c0bc..615755a0d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java @@ -34,6 +34,7 @@ public class DossierTemplatePersistenceService { @Transactional public DossierTemplateEntity createOrUpdateDossierTemplate(CreateOrUpdateDossierTemplateRequest createOrUpdateDossierRequest) { + if (createOrUpdateDossierRequest.getDossierTemplateId() != null) { Optional dossierTemplate = dossierTemplateRepository.findById(createOrUpdateDossierRequest.getDossierTemplateId()); if (dossierTemplate.isPresent()) { @@ -69,7 +70,8 @@ public class DossierTemplatePersistenceService { } - private DossierTemplateStatus computeDossierTemplateStatus(DossierTemplateEntity dossierTemplate) { + public DossierTemplateStatus computeDossierTemplateStatus(DossierTemplateEntity dossierTemplate) { + var legalBasis = legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplate.getId()); if (legalBasis == null || legalBasis.isEmpty()) { return DossierTemplateStatus.INCOMPLETE; @@ -91,6 +93,7 @@ public class DossierTemplatePersistenceService { public void validateDossierTemplateNameIsUnique(String templateName) { + getAllDossierTemplates().forEach(existing -> { if (existing.getName().equals(templateName)) { throw new ConflictException("DossierTemplate name must be unique"); @@ -98,6 +101,7 @@ public class DossierTemplatePersistenceService { }); } + public List getAllDossierTemplates() { var allDossierTemplates = dossierTemplateRepository.findAllWhereDeletedIsFalse(); @@ -106,15 +110,20 @@ public class DossierTemplatePersistenceService { return allDossierTemplates; } + public DossierTemplateEntity getDossierTemplate(String dossierTemplateId) { - var dossierTemplate = dossierTemplateRepository.findByIdAndNotDeleted(dossierTemplateId).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId))); + + var dossierTemplate = dossierTemplateRepository.findByIdAndNotDeleted(dossierTemplateId) + .orElseThrow(() -> new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId))); dossierTemplate.setDossierTemplateStatus(computeDossierTemplateStatus(dossierTemplate)); return dossierTemplate; } + @Transactional public void deleteDossierTemplate(String dossierTemplateId, String deletingUserId) { + dossierTemplateRepository.findById(dossierTemplateId).ifPresentOrElse((dossierTemplate) -> { var hasNonDeletedDossiers = dossierTemplate.getDossiers().stream().anyMatch(template -> template.getHardDeletedTime() == null); @@ -132,29 +141,4 @@ public class DossierTemplatePersistenceService { } - public DossierTemplateEntity cloneDossierTemplate(String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) { - - validateDossierTemplateNameIsUnique(nameOfClonedDossierTemplate); - - DossierTemplateEntity clonedDossierTemplate = new DossierTemplateEntity(); - - dossierTemplateRepository.findById(dossierTemplateId).ifPresentOrElse((dossierTemplate) -> { - BeanUtils.copyProperties(dossierTemplate, clonedDossierTemplate); - OffsetDateTime now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); - clonedDossierTemplate.setId(UUID.randomUUID().toString()); - clonedDossierTemplate.setName(nameOfClonedDossierTemplate); - clonedDossierTemplate.setCreatedBy(cloningUserId); - clonedDossierTemplate.setModifiedBy(cloningUserId); - clonedDossierTemplate.setDateAdded(now); - clonedDossierTemplate.setDateModified(now); - clonedDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(computeDossierTemplateStatus(clonedDossierTemplate).name())); - - dossierTemplateRepository.save(clonedDossierTemplate); - - }, () -> { - throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId)); - }); - return clonedDossierTemplate; - } - } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java index 64bdfb8da..a184b5e35 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java @@ -1,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.controller; +import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateCloneService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplate; @@ -22,6 +23,7 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma public class DossierTemplateController implements DossierTemplateResource { private final DossierTemplatePersistenceService dossierTemplatePersistenceService; + private final DossierTemplateCloneService dossierTemplateCloneService; @Override public DossierTemplate createOrUpdateDossierTemplate(@RequestBody CreateOrUpdateDossierTemplateRequest dossierTemplate) { @@ -45,6 +47,6 @@ public class DossierTemplateController implements DossierTemplateResource { @Override public DossierTemplate cloneDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) { - return convert(dossierTemplatePersistenceService.cloneDossierTemplate(dossierTemplateId, nameOfClonedDossierTemplate, cloningUserId), DossierTemplate.class); + return convert(dossierTemplateCloneService.cloneDossierTemplate(dossierTemplateId, nameOfClonedDossierTemplate, cloningUserId), DossierTemplate.class); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java index 0705a649b..52231e876 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java @@ -1,26 +1,62 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; -import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; -import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient; -import com.iqser.red.service.peristence.v1.server.integration.client.LegalBasisClient; -import com.iqser.red.service.peristence.v1.server.integration.client.RulesClient; -import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; -import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; -import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; -import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis; - -import feign.FeignException; -import org.junit.Test; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; +import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; import java.util.Collections; import java.util.List; -import static org.assertj.core.api.Assertions.assertThat; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; + +import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierAttributeConfigClient; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient; +import com.iqser.red.service.peristence.v1.server.integration.client.FileAttributeConfigClient; +import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient; +import com.iqser.red.service.peristence.v1.server.integration.client.WatermarkClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity; +import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService; +import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierAttributeConfig; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.FileAttributesGeneralConfiguration; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Colors; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.WatermarkOrientation; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttributeType; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeConfig; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeType; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntry; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type; + +import feign.FeignException; public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { @@ -36,6 +72,22 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { @Autowired private DossierClient dossierClient; + @Autowired + private DictionaryClient dictionaryClient; + + @Autowired + private DossierAttributeConfigClient dossierAttributeConfigClient; + + @Autowired + private FileAttributeConfigClient fileAttributeConfigClient; + + @Autowired + private ReportTemplateClient reportTemplateClient; + + @Autowired + private WatermarkClient watermarkClient; + + @Test public void testDossierTemplate() { @@ -45,7 +97,6 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(allTemplates.size()).isEqualTo(1); assertThat(allTemplates.get(0)).isEqualTo(dossierTemplate); - // update CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest(); cru.setDossierTemplateId(dossierTemplate.getId()); @@ -55,7 +106,6 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { var updated = dossierTemplateClient.createOrUpdateDossierTemplate(cru); assertThat(updated.getName()).isEqualTo("Template 1 Update"); - var loadedTemplate = dossierTemplateClient.getDossierTemplate(dossierTemplate.getId()); assertThat(loadedTemplate).isEqualTo(updated); @@ -68,9 +118,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { var testDossier = dossierTesterAndProvider.provideTestDossier(updated); - try{ + try { dossierTemplateClient.deleteDossierTemplate(updated.getId(), "1"); - }catch (FeignException e){ + } catch (FeignException e) { assertThat(e.status()).isEqualTo(400); } @@ -82,7 +132,8 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { @Test(expected = FeignException.class) - public void testDossierTemplateUniqueNameConflict(){ + public void testDossierTemplateUniqueNameConflict() { + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); var dossierTemplate2 = dossierTemplateTesterAndProvider.provideTestTemplate(); } @@ -90,8 +141,91 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { @Test public void testCloneDossierTemplate() { + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + Type type = Type.builder() + .id("t.id") + .type("t.getType()") + .dossierTemplateId(dossierTemplate.getId()) + .hexColor("#ddddd") + .recommendationHexColor("#cccccc") + .rank(999) + .isHint(false) + .isRecommendation(false) + .isCaseInsensitive(false) + .description("t.getDescription()") + .addToDictionaryAction(true) + .label("t.getLabel()") + .dossierId(null) + .version(23) + .entries(List.of(DictionaryEntry.builder().entryId(1001).value("dictEntry1").version(23).deleted(false).typeId("t.getType()").build())) + .falsePositiveEntries(List.of(DictionaryEntry.builder().entryId(2001).value("dictEntry2").version(23).deleted(false).typeId("t.getType()").build())) + .falseRecommendationEntries(List.of(DictionaryEntry.builder().entryId(3001).value("dictEntry3").version(23).deleted(false).typeId("t.getType()").build())) + .build(); + dictionaryClient.addType(type); + dossierAttributeConfigClient.setDossierAttributesConfig(dossierTemplate.getId(), List.of(DossierAttributeConfig.builder() + .dossierTemplateId(dossierTemplate.getId()) + .editable(false) + .id("dossierAttributeId") + .label("labelDossierAttribute") + .type(DossierAttributeType.TEXT) + .placeholder("placeholderDossier") + .build())); + fileAttributeConfigClient.setFileAttributesGeneralConfig(dossierTemplate.getId(), FileAttributesGeneralConfiguration.builder() + .dossierTemplateId(dossierTemplate.getId()) + .delimiter("") + .filenameMappingColumnHeaderName("filenameMappingColumnHeaderName") + .build()); + fileAttributeConfigClient.setFileAttributesConfig(dossierTemplate.getId(), List.of(FileAttributeConfig.builder() + .dossierTemplateId(dossierTemplate.getId()) + .primaryAttribute(true) + .csvColumnHeader("12345") + .displayedInFileList(false) + .editable(false) + .filterable(false) + .id("fileAttributeId") + .label("labelFileAttribute") + .type(FileAttributeType.TEXT) + .placeholder("placeholderFile") + .build())); + ReportTemplateEntity rte = ReportTemplateEntity.builder() + .templateId("templateId") + .dossierTemplate(convert(dossierTemplate, DossierTemplateEntity.class)) + .dossierTemplateId(dossierTemplate.getId()) + .dossiers(null) + .activeByDefault(false) + .fileName("rte") + .multiFileReport(false) + .storageId("storageId") + .uploadDate(OffsetDateTime.now()) + .build(); + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder().template("some text".getBytes(StandardCharsets.UTF_8)).dossierTemplateId(dossierTemplate.getId()).fileName("Report Template").activeByDefault(true).multiFileReport(false).build()); + watermarkClient.saveWatermark(dossierTemplate.getId(), Watermark.builder() + .dossierTemplateId(dossierTemplate.getId()) + .fontSize(10) + .fontType("Arial") + .text("watermark") + .hexColor("#123456") + .opacity(1) + .orientation(WatermarkOrientation.HORIZONTAL) + .build()); + var col = Colors.builder() + .analysisColor("#111111") + .defaultColor("#222222") + .dossierTemplateId(dossierTemplate.getId()) + .dictionaryRequestColor("#333333") + .requestAdd("#444444") + .ignoredHintColor("#555555") + .requestRemove("#666666") + .requestRemove("#777777") + .notRedacted("#888888") + .previewColor("#999999") + .updatedColor("#aaaaaa") + .manualRedactionColor("#bbbbbb") + .build(); + dictionaryClient.setColors(dossierTemplate.getId(), col); + var allTemplates = dossierTemplateClient.getAllDossierTemplates(); assertThat(allTemplates.size()).isEqualTo(1); assertThat(allTemplates.get(0)).isEqualTo(dossierTemplate); @@ -100,7 +234,6 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(clonedDT.getName()).isEqualTo("Clone of " + dossierTemplate.getName()); var loadedTemplate = dossierTemplateClient.getDossierTemplate(clonedDT.getId()); - assertThat(loadedTemplate).isEqualTo(clonedDT); assertThat(loadedTemplate.getId()).isEqualTo(clonedDT.getId()); assertThat(loadedTemplate.getDescription()).isEqualTo(dossierTemplate.getDescription()); assertThat(loadedTemplate.getValidFrom()).isEqualTo(dossierTemplate.getValidFrom()); @@ -108,6 +241,13 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(loadedTemplate.getDownloadFileTypes()).isEqualTo(dossierTemplate.getDownloadFileTypes()); assertThat(loadedTemplate.getModifiedBy()).isEqualTo("user"); assertThat(loadedTemplate.getCreatedBy()).isEqualTo("user"); + + assertThat(dossierAttributeConfigClient.getDossierAttributes(dossierTemplate.getId()).get(0).getLabel()).isEqualTo(dossierAttributeConfigClient.getDossierAttributes(clonedDT.getId()).get(0).getLabel()); + assertThat(fileAttributeConfigClient.getFileAttributeConfigs(dossierTemplate.getId()).get(0).getCsvColumnHeader()).isEqualTo(fileAttributeConfigClient.getFileAttributeConfigs(clonedDT.getId()).get(0).getCsvColumnHeader()); + assertThat(fileAttributeConfigClient.getFileAttributesGeneralConfig(dossierTemplate.getId()).getFilenameMappingColumnHeaderName()).isEqualTo(fileAttributeConfigClient.getFileAttributesGeneralConfig(clonedDT.getId()).getFilenameMappingColumnHeaderName()); + assertThat(reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()).get(0).getFileName()).isEqualTo(reportTemplateClient.getAvailableReportTemplates(clonedDT.getId()).get(0).getFileName()); + assertThat(watermarkClient.getWatermark(dossierTemplate.getId()).getText()).isEqualTo(watermarkClient.getWatermark(clonedDT.getId()).getText()); + assertThat(dictionaryClient.getColors(dossierTemplate.getId()).getRequestAdd()).isEqualTo(dictionaryClient.getColors(clonedDT.getId()).getRequestAdd()); } }