diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/rulesmanagement/models/RuleFileBluePrint.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/rulesmanagement/models/RuleFileBluePrint.java index ca185b63..533492e1 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/rulesmanagement/models/RuleFileBluePrint.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/rulesmanagement/models/RuleFileBluePrint.java @@ -180,7 +180,7 @@ public class RuleFileBluePrint { public RuleFileBluePrint buildFilteredBluePrintByRuleIdentifiers(Set 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()) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/RuleBuilderService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/RuleBuilderService.java index 2c9c9f7e..c346429c 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/RuleBuilderService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/RuleBuilderService.java @@ -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 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 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 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 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(systemRules)); + private RuleFileBluePrint removeAllRulesExceptSystemRules(RuleFileBluePrint ruleFileBluePrint) { + return ruleFileBluePrint.buildFilteredBluePrintByRuleIdentifiers(new HashSet(systemRules)); }