Merge branch 'DM-285' into 'master'

DM-285: validate rules on dossier template import

Closes DM-285

See merge request redactmanager/persistence-service!128
This commit is contained in:
Christoph Schabert 2023-09-19 08:22:07 +02:00
commit 707631f2c7

View File

@ -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.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.DictionaryEntryType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; 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.iqser.red.storage.commons.service.StorageService;
import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantContext;
@ -101,6 +102,7 @@ public class DossierTemplateImportService {
private final DictionaryManagementService dictionaryManagementService; private final DictionaryManagementService dictionaryManagementService;
private final EntryPersistenceService entryPersistenceService; private final EntryPersistenceService entryPersistenceService;
private final ReportTemplatePersistenceService reportTemplatePersistenceService; private final ReportTemplatePersistenceService reportTemplatePersistenceService;
private final RulesValidationService rulesValidationService;
private final StorageService storageService; private final StorageService storageService;
private final ObjectMapper objectMapper = new ObjectMapper(); private final ObjectMapper objectMapper = new ObjectMapper();
private final FileManagementServiceSettings settings; private final FileManagementServiceSettings settings;
@ -304,10 +306,7 @@ public class DossierTemplateImportService {
dossierTemplateRepository.save(existingDossierTemplate); dossierTemplateRepository.save(existingDossierTemplate);
// set rules // set rules
rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateId, RuleFileType.ENTITY); setRulesWhenCompiled(request, dossierTemplateId);
if (request.getComponentRuleSet() != null) {
rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateId, RuleFileType.COMPONENT);
}
existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(existingDossierTemplate) existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(existingDossierTemplate)
.name())); .name()));
@ -410,10 +409,7 @@ public class DossierTemplateImportService {
dossierTemplateEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplateEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
dossierTemplateEntity.setCreatedBy(request.getUserId()); dossierTemplateEntity.setCreatedBy(request.getUserId());
//set rules //set rules
rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateEntity.getId(), RuleFileType.ENTITY); setRulesWhenCompiled(request, dossierTemplateEntity.getId());
if (request.getComponentRuleSet() != null) {
rulesPersistenceService.setRules(request.getComponentRuleSet(), dossierTemplateEntity.getId(), RuleFileType.COMPONENT);
}
var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplateEntity); var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplateEntity);
loadedDossierTemplate.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(loadedDossierTemplate)); 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<String> readEntries(byte[] bytes) { private List<String> readEntries(byte[] bytes) {
ByteArrayInputStream bInput = new ByteArrayInputStream(bytes); ByteArrayInputStream bInput = new ByteArrayInputStream(bytes);