diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java index 331de9058..d906a86b8 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java @@ -60,7 +60,7 @@ public class DossierAttributeConfigPersistenceService { dossierAttributeConfig.setDossierTemplate(dossierTemplate); if (dossierAttributeConfig.getId() == null) { dossierAttributeConfig.setId(UUID.randomUUID().toString()); - setPlaceholder(dossierAttributeConfig); + checkAndSetPlaceholder(dossierAttributeConfig); uniqueLabelAndPlaceholder(dossierAttributeConfig); return dossierAttributeConfigRepository.save(dossierAttributeConfig); } else { @@ -72,12 +72,13 @@ public class DossierAttributeConfigPersistenceService { config.setLabel(dossierAttributeConfig.getLabel()); config.setType(dossierAttributeConfig.getType()); config.setEditable(dossierAttributeConfig.isEditable()); - setPlaceholder(config); + checkAndSetPlaceholder(dossierAttributeConfig); + config.setPlaceholder(dossierAttributeConfig.getPlaceholder()); uniqueLabelAndPlaceholder(dossierAttributeConfig); return dossierAttributeConfigRepository.save(config); } else { dossierAttributeConfig.setId(UUID.randomUUID().toString()); - setPlaceholder(dossierAttributeConfig); + checkAndSetPlaceholder(dossierAttributeConfig); uniqueLabelAndPlaceholder(dossierAttributeConfig); return dossierAttributeConfigRepository.save(dossierAttributeConfig); } @@ -92,12 +93,25 @@ public class DossierAttributeConfigPersistenceService { } - private void setPlaceholder(DossierAttributeConfigEntity dossierAttributeConfig) { + private void checkAndSetPlaceholder(DossierAttributeConfigEntity dossierAttributeConfig) { - String placeholder = "{{dossier.attribute." + StringUtils.remove(WordUtils.capitalizeFully(dossierAttributeConfig.getLabel(), ' '), " ") + "}}"; - dossierAttributeConfig.setPlaceholder(placeholder); + if (StringUtils.isEmpty(dossierAttributeConfig.getPlaceholder())) { + String placeholder = "{{dossier.attribute." + StringUtils.remove(WordUtils.capitalizeFully(dossierAttributeConfig.getLabel(), ' '), " ") + "}}"; + dossierAttributeConfig.setPlaceholder(placeholder); + } else { + uniquePlaceholder(dossierAttributeConfig); + } } + private void uniquePlaceholder(DossierAttributeConfigEntity dossierAttributesConfig) { + getDossierAttributes(dossierAttributesConfig.getDossierTemplate().getId()).stream() + .filter(d -> !d.getId().equals(dossierAttributesConfig.getId())) + .forEach(other -> { + if (other.getPlaceholder().equalsIgnoreCase(dossierAttributesConfig.getPlaceholder())) { + throw new ConflictException("Placeholder already exists. " + dossierAttributesConfig.getPlaceholder()); + } + }); + } private void uniqueLabelAndPlaceholder(DossierAttributeConfigEntity dossierAttributesConfig) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java index 8cc7362dd..59efb59a7 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java @@ -115,7 +115,7 @@ public class FileAttributeConfigPersistenceService { } if (fileAttributeConfig.getId() == null) { fileAttributeConfig.setId(UUID.randomUUID().toString()); - setPlaceholder(fileAttributeConfig); + checkAndSetPlaceholder(fileAttributeConfig); uniqueLabelAndPlaceholder(fileAttributeConfig); return fileAttributeConfigRepository.save(fileAttributeConfig); } else { @@ -131,12 +131,13 @@ public class FileAttributeConfigPersistenceService { config.setDisplayedInFileList(fileAttributeConfig.isDisplayedInFileList()); config.setPrimaryAttribute(fileAttributeConfig.isPrimaryAttribute()); config.setFilterable(fileAttributeConfig.isFilterable()); - setPlaceholder(config); + checkAndSetPlaceholder(fileAttributeConfig); + config.setPlaceholder(fileAttributeConfig.getPlaceholder()); uniqueLabelAndPlaceholder(fileAttributeConfig); return fileAttributeConfigRepository.save(config); } else { fileAttributeConfig.setId(UUID.randomUUID().toString()); - setPlaceholder(fileAttributeConfig); + checkAndSetPlaceholder(fileAttributeConfig); uniqueLabelAndPlaceholder(fileAttributeConfig); return fileAttributeConfigRepository.save(fileAttributeConfig); } @@ -151,12 +152,25 @@ public class FileAttributeConfigPersistenceService { } - private void setPlaceholder(FileAttributeConfigEntity fileAttributeConfig) { + private void checkAndSetPlaceholder(FileAttributeConfigEntity fileAttributeConfig) { - String placeholder = "{{file.attribute." + StringUtils.remove(WordUtils.capitalizeFully(fileAttributeConfig.getLabel(), ' '), " ") + "}}"; - fileAttributeConfig.setPlaceholder(placeholder); + if (StringUtils.isEmpty(fileAttributeConfig.getPlaceholder())) { + String placeholder = "{{file.attribute." + StringUtils.remove(WordUtils.capitalizeFully(fileAttributeConfig.getLabel(), ' '), " ") + "}}"; + fileAttributeConfig.setPlaceholder(placeholder); + } else { + uniquePlaceholder(fileAttributeConfig); + } } + private void uniquePlaceholder(FileAttributeConfigEntity fileAttributeConfig) { + getFileAttributes(fileAttributeConfig.getDossierTemplate().getId()).stream() + .filter(d -> !d.getId().equals(fileAttributeConfig.getId())) + .forEach(other -> { + if (other.getPlaceholder().equalsIgnoreCase(fileAttributeConfig.getPlaceholder())) { + throw new ConflictException("Placeholder already exists."); + } + }); + } private void uniqueLabelAndPlaceholder(FileAttributeConfigEntity fileAttributeConfig) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java index 49014a429..91eb5b840 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java @@ -51,15 +51,23 @@ public class DossierAttributeTest extends AbstractPersistenceServerServiceTest { attribute.setEditable(true); attribute.setType(DossierAttributeType.TEXT); - dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), attribute); + var created = dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), attribute); + assertThat(created.getPlaceholder()).isEqualTo("{{dossier.attribute.Test}}"); loadedAttributes = dossierAttributeConfigClient.getDossierAttributesConfig(dossier.getDossierTemplateId()); assertThat(loadedAttributes.getDossierAttributeConfigs()).isNotEmpty(); + attribute.setId(created.getId()); attribute.setLabel("updated test"); var updated = dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), attribute); assertThat(updated.getLabel()).isEqualTo("updated test"); assertThat(updated.getPlaceholder()).isEqualTo("{{dossier.attribute.UpdatedTest}}"); + attribute.setPlaceholder("{{dossier.attribute.MyOwnPlaceholder}}"); + updated = dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), attribute); + assertThat(updated.getLabel()).isEqualTo("updated test"); + assertThat(updated.getPlaceholder()).isEqualTo("{{dossier.attribute.MyOwnPlaceholder}}"); + + dossierAttributeConfigClient.setDossierAttributesConfig(dossier.getDossierTemplateId(), new DossierAttributesConfig()); loadedAttributes = dossierAttributeConfigClient.getDossierAttributesConfig(dossier.getDossierTemplateId()); assertThat(loadedAttributes.getDossierAttributeConfigs()).isEmpty(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 6cb0d7e2d..da8517fd2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -88,9 +88,10 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { assertThat(loadedConfig.getEncoding()).isEqualTo(ASCII_ENCODING); List configs = new ArrayList<>(); + String myOwnPlaceholder = "{{file.attribute.MyOwnPlaceholder}}"; configs.add(FileAttributeConfig.builder().csvColumnHeader("Name").primaryAttribute(true).label("Name").build()); configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute A").primaryAttribute(true).label("Attribute A").build()); - FileAttributeConfig attributeB = FileAttributeConfig.builder().csvColumnHeader("Attribute B").primaryAttribute(true).label("Attribute B").build(); + FileAttributeConfig attributeB = FileAttributeConfig.builder().csvColumnHeader("Attribute B").primaryAttribute(true).label("Attribute B").placeholder(myOwnPlaceholder).build(); configs.add(attributeB); configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute C").primaryAttribute(false).label("Attribute C").build()); configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute D").primaryAttribute(false).label("Attribute D").build()); @@ -104,6 +105,7 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { .findAny() .get(); assertThat(primaryAttribute.getLabel()).isEqualTo(attributeB.getLabel()); + assertThat(primaryAttribute.getPlaceholder()).isEqualTo(attributeB.getPlaceholder()); fileAttributeConfigClient.deleteFileAttribute(dossier.getDossierTemplateId(), loadedConfigs.stream() @@ -129,6 +131,8 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { var created = fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), newConfig); loadedConfigs = fileAttributeConfigClient.getFileAttributesConfiguration(dossier.getDossierTemplateId()).getFileAttributeConfigs(); assertThat(loadedConfigs.size()).isEqualTo(4); + assertThat(created.getPlaceholder()).isEqualTo("{{file.attribute.TestAttribute}}"); + assertThat(created.getCsvColumnHeader()).isNull(); newConfig.setId(created.getId()); newConfig.setLabel("Test Attribute Update"); @@ -138,6 +142,14 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { assertThat(updated.getLabel()).isEqualTo("Test Attribute Update"); assertThat(updated.getPlaceholder()).isEqualTo("{{file.attribute.TestAttributeUpdate}}"); + newConfig.setPlaceholder(myOwnPlaceholder); + var e = assertThrows(FeignException.class, + () -> fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), newConfig)); + assertEquals(409, e.status()); + newConfig.setPlaceholder("{{file.attribute.TestAttributeUpdate2}}"); + updated = fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), newConfig); + assertThat(updated.getPlaceholder()).isEqualTo("{{file.attribute.TestAttributeUpdate2}}"); + assertThat(fileClient.getFileStatus(dossier.getId(), file.getId()).getLastFileAttributeChange()).isNull(); fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), new FileAttributes(Map.of(updated.getId(), "Lorem Ipsum")));