RED-9472: seperation of system rules

review changes
This commit is contained in:
yhampe 2024-11-15 09:45:56 +01:00
parent e47dc30770
commit 82bfa1b5e9
2 changed files with 26 additions and 22 deletions

View File

@ -180,7 +180,7 @@ public class RuleFileBluePrint {
public RuleFileBluePrint buildFilteredBluePrintByRuleIdentifiers(Set<RuleIdentifier> identifiers) {
RuleFileBluePrint filteredBluePrint = new RuleFileBluePrint(imports, globals, queries, new LinkedList<>(), new LinkedList<>(), new LinkedList<>());
RuleFileBluePrint filteredBluePrint = new RuleFileBluePrint(imports, globals, queries, new LinkedList<>(), declarations, functions);
ruleClasses.stream()
.flatMap(ruleClass -> ruleClass.ruleUnits()
.stream())

View File

@ -1,10 +1,10 @@
package com.iqser.red.service.redaction.v1.server.service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.springframework.stereotype.Service;
@ -22,12 +22,12 @@ import lombok.extern.slf4j.Slf4j;
@Service
public class RuleBuilderService {
private final List<RuleIdentifier> systemRules = new ArrayList<>(Arrays.asList(RuleIdentifier.fromName("AI"),
RuleIdentifier.fromName("MAN"),
RuleIdentifier.fromName("X"),
RuleIdentifier.fromName("DICT"),
RuleIdentifier.fromName("FA"),
RuleIdentifier.fromName("LDS")));
private final HashSet<RuleIdentifier> systemRules = new HashSet<>(Set.of(RuleIdentifier.fromName("AI"),
RuleIdentifier.fromName("MAN"),
RuleIdentifier.fromName("X"),
RuleIdentifier.fromName("DICT"),
RuleIdentifier.fromName("FA"),
RuleIdentifier.fromName("LDS")));
public RuleBuilderModel getRuleBuilderModel() {
@ -52,7 +52,7 @@ public class RuleBuilderService {
public RuleMergingResult mergeUserRulesAndSystemRules(String existingRules, String userUpdatedRules) {
RuleFileBluePrint ruleFileBluePrintExisting = RuleFileParser.buildBluePrintFromRulesString(existingRules);
RuleFileBluePrint mergedRuleFileBlueprint = RuleFileParser.buildBluePrintFromRulesString(userUpdatedRules, true);
RuleFileBluePrint mergedRuleFileBlueprint = RuleFileParser.buildBluePrintFromRulesString(userUpdatedRules, false);
mergedRuleFileBlueprint.getRuleClasses()
.forEach(ruleClass -> {
if (systemRules.stream()
@ -61,25 +61,30 @@ public class RuleBuilderService {
throw new RuntimeException("No system rule updates allowed in user rule update.");
}
});
removeAllRulesExceptSystemRules(ruleFileBluePrintExisting);
ruleFileBluePrintExisting.getRuleClasses()
.stream()
.flatMap(ruleClass -> ruleClass.ruleUnits()
.stream()
.flatMap(ruleUnit -> ruleUnit.rules()
.stream()))
ruleFileBluePrintExisting = removeAllRulesExceptSystemRules(ruleFileBluePrintExisting);
ruleFileBluePrintExisting.getAllRules()
.forEach(mergedRuleFileBlueprint::addRule);
mergedRuleFileBlueprint.setImports(ruleFileBluePrintExisting.getImports() + mergedRuleFileBlueprint.getImports());
mergedRuleFileBlueprint.setGlobals(ruleFileBluePrintExisting.getGlobals() + mergedRuleFileBlueprint.getGlobals());
Set<String> uniqueImports = Arrays.stream((ruleFileBluePrintExisting.getImports() + mergedRuleFileBlueprint.getImports()).replaceAll("\n", "").split("import"))
.map(String::trim)
.collect(Collectors.toSet());
mergedRuleFileBlueprint.setImports(uniqueImports.stream()
.collect(Collectors.joining("")));
Set<String> uniqueGlobals = Arrays.stream((ruleFileBluePrintExisting.getGlobals() + mergedRuleFileBlueprint.getGlobals()).replaceAll("\n", "").split("import"))
.map(String::trim)
.collect(Collectors.toSet());
mergedRuleFileBlueprint.setGlobals(uniqueGlobals.stream()
.collect(Collectors.joining("")));
mergedRuleFileBlueprint.setFunctions(Stream.concat(ruleFileBluePrintExisting.getFunctions()
.stream(),
mergedRuleFileBlueprint.getFunctions()
.stream())
.distinct()
.toList());
mergedRuleFileBlueprint.setDeclarations(Stream.concat(ruleFileBluePrintExisting.getDeclarations()
.stream(),
mergedRuleFileBlueprint.getDeclarations()
.stream())
.distinct()
.toList());
return RuleMergingResult.builder()
.mergedRules(RuleFileFactory.buildRuleString(ruleFileBluePrintExisting, false, false))
@ -89,10 +94,9 @@ public class RuleBuilderService {
}
private void removeAllRulesExceptSystemRules(RuleFileBluePrint ruleFileBluePrint) {
ruleFileBluePrint.buildFilteredBluePrintByRuleIdentifiers(new HashSet<RuleIdentifier>(systemRules));
private RuleFileBluePrint removeAllRulesExceptSystemRules(RuleFileBluePrint ruleFileBluePrint) {
return ruleFileBluePrint.buildFilteredBluePrintByRuleIdentifiers(new HashSet<RuleIdentifier>(systemRules));
}