RED-9472: seperation of system rules

now adding user update rules to existing blueprint and returning this
This commit is contained in:
yhampe 2024-12-13 11:52:36 +01:00
parent 7363493d1c
commit bdb29a0e35
2 changed files with 11 additions and 10 deletions

View File

@ -93,13 +93,13 @@ public class RuleBuilderController implements RuleBuilderResource {
rulesUploadResponse.setDroolsValidationResponse(droolsValidationResponse); rulesUploadResponse.setDroolsValidationResponse(droolsValidationResponse);
return new ResponseEntity<>(rulesUploadResponse, HttpStatus.UNPROCESSABLE_ENTITY); return new ResponseEntity<>(rulesUploadResponse, HttpStatus.UNPROCESSABLE_ENTITY);
} else { } else {
//
rulesUploadResponse.setRules(mergingResult.getMergedRules()); rulesUploadResponse.setRules(mergingResult.getMergedRules());
rulesUploadResponse.setDroolsValidationResponse(droolsValidationResponse); rulesUploadResponse.setDroolsValidationResponse(droolsValidationResponse);
} }
} catch (Exception e) { } catch (Exception e) {
throw new RulesValidationException("Could not test rules: " + e.getMessage(), e); throw new RulesValidationException("Could not test rules: " + e.getMessage(), e);
} }
log.info("result after validation: {}",rulesUpdateRequest);
return new ResponseEntity<>(rulesUploadResponse, HttpStatus.OK); return new ResponseEntity<>(rulesUploadResponse, HttpStatus.OK);
} }

View File

@ -53,6 +53,7 @@ public class RuleBuilderService {
RuleFileBluePrint ruleFileBluePrintExisting = RuleFileParser.buildBluePrintFromRulesString(existingRules); RuleFileBluePrint ruleFileBluePrintExisting = RuleFileParser.buildBluePrintFromRulesString(existingRules);
RuleFileBluePrint mergedRuleFileBlueprint = RuleFileParser.buildBluePrintFromRulesString(userUpdatedRules, false); RuleFileBluePrint mergedRuleFileBlueprint = RuleFileParser.buildBluePrintFromRulesString(userUpdatedRules, false);
mergedRuleFileBlueprint.getRuleClasses() mergedRuleFileBlueprint.getRuleClasses()
.forEach(ruleClass -> { .forEach(ruleClass -> {
if (systemRules.stream() if (systemRules.stream()
@ -62,25 +63,25 @@ public class RuleBuilderService {
} }
}); });
ruleFileBluePrintExisting = removeAllRulesExceptSystemRules(ruleFileBluePrintExisting); ruleFileBluePrintExisting = removeAllRulesExceptSystemRules(ruleFileBluePrintExisting);
ruleFileBluePrintExisting.getAllRules() mergedRuleFileBlueprint.getAllRules()
.forEach(mergedRuleFileBlueprint::addRule); .forEach(ruleFileBluePrintExisting::addRule);
Set<String> uniqueImports = Arrays.stream((ruleFileBluePrintExisting.getImports() + mergedRuleFileBlueprint.getImports()).replaceAll("\n", "").split("import")) Set<String> uniqueImports = Arrays.stream((ruleFileBluePrintExisting.getImports() + mergedRuleFileBlueprint.getImports()).replaceAll("\n", "").split("import"))
.map(String::trim) .map(String::trim)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
mergedRuleFileBlueprint.setImports(uniqueImports.stream() ruleFileBluePrintExisting.setImports(uniqueImports.stream()
.collect(Collectors.joining(""))); .collect(Collectors.joining("")));
Set<String> uniqueGlobals = Arrays.stream((ruleFileBluePrintExisting.getGlobals() + mergedRuleFileBlueprint.getGlobals()).replaceAll("\n", "").split("import")) Set<String> uniqueGlobals = Arrays.stream((ruleFileBluePrintExisting.getGlobals() + mergedRuleFileBlueprint.getGlobals()).replaceAll("\n", "").split("import"))
.map(String::trim) .map(String::trim)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
mergedRuleFileBlueprint.setGlobals(uniqueGlobals.stream() ruleFileBluePrintExisting.setGlobals(uniqueGlobals.stream()
.collect(Collectors.joining(""))); .collect(Collectors.joining("")));
mergedRuleFileBlueprint.setFunctions(Stream.concat(ruleFileBluePrintExisting.getFunctions() ruleFileBluePrintExisting.setFunctions(Stream.concat(ruleFileBluePrintExisting.getFunctions()
.stream(), .stream(),
mergedRuleFileBlueprint.getFunctions() mergedRuleFileBlueprint.getFunctions()
.stream()) .stream())
.distinct() .distinct()
.toList()); .toList());
mergedRuleFileBlueprint.setDeclarations(Stream.concat(ruleFileBluePrintExisting.getDeclarations() ruleFileBluePrintExisting.setDeclarations(Stream.concat(ruleFileBluePrintExisting.getDeclarations()
.stream(), .stream(),
mergedRuleFileBlueprint.getDeclarations() mergedRuleFileBlueprint.getDeclarations()
.stream()) .stream())
@ -88,9 +89,9 @@ public class RuleBuilderService {
.toList()); .toList());
log.info("merged rules: {}", RuleFileFactory.buildRuleString(ruleFileBluePrintExisting, false, false)); log.info("merged rules: {}", RuleFileFactory.buildRuleString(ruleFileBluePrintExisting, false, false));
return RuleMergingResult.builder() return RuleMergingResult.builder()
.mergedRules(RuleFileFactory.buildRuleString(ruleFileBluePrintExisting, false, false)) .mergedRules(RuleFileFactory.buildRuleString(mergedRuleFileBlueprint, false, false))
.addedGlobalsOffset(ruleFileBluePrintExisting.getGlobals().length()) .addedGlobalsOffset(mergedRuleFileBlueprint.getGlobals().length())
.addedImportsOffset(ruleFileBluePrintExisting.getImports().length()) .addedImportsOffset(mergedRuleFileBlueprint.getImports().length())
.build(); .build();
} }