From 1b0323839e118eb349e8d7fdb6c6e15f14d8511d Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Mon, 18 Sep 2023 16:16:14 +0200 Subject: [PATCH] DM-285: validate rules on dossier template import --- .../service/DossierTemplateImportService.java | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java index c1021b0b3..879d295e0 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java @@ -73,6 +73,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.legalbasis.LegalBasis; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; +import com.iqser.red.service.redaction.v1.model.DroolsSyntaxValidation; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; @@ -101,6 +102,7 @@ public class DossierTemplateImportService { private final DictionaryManagementService dictionaryManagementService; private final EntryPersistenceService entryPersistenceService; private final ReportTemplatePersistenceService reportTemplatePersistenceService; + private final RulesValidationService rulesValidationService; private final StorageService storageService; private final ObjectMapper objectMapper = new ObjectMapper(); private final FileManagementServiceSettings settings; @@ -304,10 +306,7 @@ public class DossierTemplateImportService { dossierTemplateRepository.save(existingDossierTemplate); // set rules - rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateId, RuleFileType.ENTITY); - if (request.getComponentRuleSet() != null) { - rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateId, RuleFileType.COMPONENT); - } + setRulesWhenCompiled(request, dossierTemplateId); existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(existingDossierTemplate) .name())); @@ -410,10 +409,7 @@ public class DossierTemplateImportService { dossierTemplateEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplateEntity.setCreatedBy(request.getUserId()); //set rules - rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateEntity.getId(), RuleFileType.ENTITY); - if (request.getComponentRuleSet() != null) { - rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateEntity.getId(), RuleFileType.COMPONENT); - } + setRulesWhenCompiled(request, dossierTemplateEntity.getId()); var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplateEntity); loadedDossierTemplate.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(loadedDossierTemplate)); @@ -492,6 +488,25 @@ public class DossierTemplateImportService { } + private void setRulesWhenCompiled(ImportTemplateResult request, String dossierTemplateEntity) { + + DroolsSyntaxValidation droolsSyntaxValidation = rulesValidationService.validateRules(RuleFileType.ENTITY, request.getRuleSet()); + if (!droolsSyntaxValidation.isCompiled()) { + droolsSyntaxValidation.getDroolsSyntaxErrorMessages().forEach(errorMessage -> log.error(errorMessage.getMessage())); + throw new BadRequestException("The entity rules do not compile!"); + } + rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateEntity, RuleFileType.ENTITY); + if (request.getComponentRuleSet() != null) { + DroolsSyntaxValidation componentDroolsSyntaxValidation = rulesValidationService.validateRules(RuleFileType.COMPONENT, request.getComponentRuleSet()); + if (!componentDroolsSyntaxValidation.isCompiled()) { + componentDroolsSyntaxValidation.getDroolsSyntaxErrorMessages().forEach(errorMessage -> log.error(errorMessage.getMessage())); + throw new BadRequestException("The component rules do not compile!"); + } + rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateEntity, RuleFileType.COMPONENT); + } + } + + private List readEntries(byte[] bytes) { ByteArrayInputStream bInput = new ByteArrayInputStream(bytes); -- 2.47.2