RED-9472: seperation of system rules
introduced tests
This commit is contained in:
parent
3f043c5fdd
commit
56011341b7
@ -33,6 +33,7 @@ configurations {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
|
implementation(project(":rules-management"))
|
||||||
implementation(project(":redaction-service-api-v1")) { exclude(group = "com.iqser.red.service", module = "persistence-service-internal-api-v1") }
|
implementation(project(":redaction-service-api-v1")) { exclude(group = "com.iqser.red.service", module = "persistence-service-internal-api-v1") }
|
||||||
implementation("com.iqser.red.service:persistence-service-internal-api-v1:${persistenceServiceVersion}") { exclude(group = "org.springframework.boot") }
|
implementation("com.iqser.red.service:persistence-service-internal-api-v1:${persistenceServiceVersion}") { exclude(group = "org.springframework.boot") }
|
||||||
implementation("com.iqser.red.service:persistence-service-shared-mongo-v1:${persistenceServiceVersion}")
|
implementation("com.iqser.red.service:persistence-service-shared-mongo-v1:${persistenceServiceVersion}")
|
||||||
|
|||||||
@ -60,8 +60,8 @@ public class RuleBuilderService {
|
|||||||
|
|
||||||
log.info("starting to merge user rules update with system rules");
|
log.info("starting to merge user rules update with system rules");
|
||||||
RuleFileBluePrint ruleFileBluePrintExisting = RuleFileParser.buildBluePrintFromRulesString(existingRules);
|
RuleFileBluePrint ruleFileBluePrintExisting = RuleFileParser.buildBluePrintFromRulesString(existingRules);
|
||||||
RuleFileBluePrint mergedRuleFileBlueprint = RuleFileParser.buildBluePrintFromRulesString(userUpdatedRules);
|
RuleFileBluePrint mergedRuleFileBlueprint = RuleFileParser.buildBluePrintFromRulesString(userUpdatedRules, true);
|
||||||
removeAllRulesExceptSystemRules(ruleFileBluePrintExisting);
|
removeAllRulesExceptSystemRulesAndCheck(ruleFileBluePrintExisting);
|
||||||
ruleFileBluePrintExisting.getRuleClasses()
|
ruleFileBluePrintExisting.getRuleClasses()
|
||||||
.stream()
|
.stream()
|
||||||
.flatMap(ruleClass -> ruleClass.ruleUnits()
|
.flatMap(ruleClass -> ruleClass.ruleUnits()
|
||||||
@ -89,12 +89,13 @@ public class RuleBuilderService {
|
|||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
removeAllRulesExceptSystemRules(ruleFileBluePrint);
|
removeAllRulesExceptSystemRules(ruleFileBluePrint);
|
||||||
ruleFileBluePrint.getRuleClasses()
|
ruleFileBluePrint.getRuleClasses()
|
||||||
.forEach(ruleClass -> Assert.assertFalse("there was an error removing all rules except system rules", systemRuleNames.contains(ruleClass.ruleType().name())));
|
.forEach(ruleClass -> Assert.assertTrue("there was an error removing all rules except system rules", systemRuleNames.contains(ruleClass.ruleType().name())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void removeAllRulesExceptSystemRules(RuleFileBluePrint ruleFileBluePrint) {
|
private void removeAllRulesExceptSystemRules(RuleFileBluePrint ruleFileBluePrint) {
|
||||||
|
|
||||||
|
List<RuleIdentifier> rules = new ArrayList();
|
||||||
Set<String> systemRuleNames = systemRules.stream()
|
Set<String> systemRuleNames = systemRules.stream()
|
||||||
.map(RuleType::name)
|
.map(RuleType::name)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
@ -105,7 +106,10 @@ public class RuleBuilderService {
|
|||||||
.flatMap(ruleClass -> ruleClass.ruleUnits()
|
.flatMap(ruleClass -> ruleClass.ruleUnits()
|
||||||
.stream()
|
.stream()
|
||||||
.map(ruleUnit -> new RuleIdentifier(ruleClass.ruleType(), ruleUnit.unit(), null)))
|
.map(ruleUnit -> new RuleIdentifier(ruleClass.ruleType(), ruleUnit.unit(), null)))
|
||||||
.forEach(ruleFileBluePrint::removeRule);
|
.forEach(rule -> rules.add(rule));
|
||||||
|
rules.forEach(ruleIdentifier -> {
|
||||||
|
ruleFileBluePrint.removeRule(ruleIdentifier);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,8 @@ import com.iqser.red.storage.commons.service.StorageService;
|
|||||||
import com.iqser.red.storage.commons.utils.FileSystemBackedStorageService;
|
import com.iqser.red.storage.commons.utils.FileSystemBackedStorageService;
|
||||||
import com.knecon.fforesight.service.layoutparser.processor.LayoutParsingServiceProcessorConfiguration;
|
import com.knecon.fforesight.service.layoutparser.processor.LayoutParsingServiceProcessorConfiguration;
|
||||||
import com.knecon.fforesight.tenantcommons.TenantContext;
|
import com.knecon.fforesight.tenantcommons.TenantContext;
|
||||||
|
import com.knecon.fforesight.utility.rules.management.factory.RuleFileParser;
|
||||||
|
import com.knecon.fforesight.utility.rules.management.models.RuleFileBluePrint;
|
||||||
|
|
||||||
@ExtendWith(SpringExtension.class)
|
@ExtendWith(SpringExtension.class)
|
||||||
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||||
@ -114,6 +116,12 @@ public class RuleBuilderTest extends AbstractRedactionIntegrationTest {
|
|||||||
|
|
||||||
RuleMergingResult mergingResult = this.ruleBuilderService.mergeUserRulesAndSystemRules(RULES, USER_RULES);
|
RuleMergingResult mergingResult = this.ruleBuilderService.mergeUserRulesAndSystemRules(RULES, USER_RULES);
|
||||||
String mergedRules = mergingResult.getMergedRules();
|
String mergedRules = mergingResult.getMergedRules();
|
||||||
|
RuleFileBluePrint ruleFileBluePrintUserRulesUpdate = RuleFileParser.buildBluePrintFromRulesString(mergedRules, true);
|
||||||
|
RuleFileBluePrint ruleFileBluePrint = RuleFileParser.buildBluePrintFromRulesString(mergedRules);
|
||||||
|
ruleFileBluePrintUserRulesUpdate.getRuleClasses()
|
||||||
|
.forEach(ruleClass -> {
|
||||||
|
Assert.assertTrue(ruleFileBluePrint.getRuleClasses().contains(ruleClass));
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
package drools
|
||||||
//------------------------------------ Table extraction rules ------------------------------------
|
//------------------------------------ Table extraction rules ------------------------------------
|
||||||
|
|
||||||
// Rule unit: TAB.0
|
// Rule unit: TAB.0
|
||||||
@ -35,7 +36,7 @@ rule "TAB.0.1: Changed Guidelines"
|
|||||||
|
|
||||||
|
|
||||||
// Rule unit: TAB.6
|
// Rule unit: TAB.6
|
||||||
rule "TAB.6.0: Changed Targeted cell extraction (Experimental Stop date)"
|
rule "TAB.6.1: Changed Targeted cell extraction (Experimental Stop date)"
|
||||||
when
|
when
|
||||||
$section: Section(getHeadline().containsString("Advanced Table Extraction"), containsAllStrings("female", "Female", "Survived", "Group 2"))
|
$section: Section(getHeadline().containsString("Advanced Table Extraction"), containsAllStrings("female", "Female", "Survived", "Group 2"))
|
||||||
$table: Table(hasHeader("Group 2")) from $section.streamChildren().toList()
|
$table: Table(hasHeader("Group 2")) from $section.streamChildren().toList()
|
||||||
|
|||||||
@ -49,6 +49,13 @@ public class RuleFileParser {
|
|||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public RuleFileBluePrint buildBluePrintFromRulesString(String rulesString) {
|
public RuleFileBluePrint buildBluePrintFromRulesString(String rulesString) {
|
||||||
|
|
||||||
|
return buildBluePrintFromRulesString(rulesString, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
public RuleFileBluePrint buildBluePrintFromRulesString(String rulesString, boolean isUserRuleUpdate) {
|
||||||
|
|
||||||
DrlParser parser = new DrlParser(LanguageLevelOption.DRL6);
|
DrlParser parser = new DrlParser(LanguageLevelOption.DRL6);
|
||||||
PackageDescr packageDescr = parser.parse(false, rulesString);
|
PackageDescr packageDescr = parser.parse(false, rulesString);
|
||||||
StringBuilder queryBuilder = new StringBuilder();
|
StringBuilder queryBuilder = new StringBuilder();
|
||||||
@ -78,12 +85,15 @@ public class RuleFileParser {
|
|||||||
for (AbstractClassTypeDeclarationDescr declaration : packageDescr.getTypeDeclarations()) {
|
for (AbstractClassTypeDeclarationDescr declaration : packageDescr.getTypeDeclarations()) {
|
||||||
declarations.add(BasicDeclaration.fromDeclarationDescription(declaration, rulesString));
|
declarations.add(BasicDeclaration.fromDeclarationDescription(declaration, rulesString));
|
||||||
}
|
}
|
||||||
String imports = rulesString.substring(0,
|
String imports = "";
|
||||||
packageDescr.getImports()
|
if (isUserRuleUpdate && !packageDescr.getImports().isEmpty()) {
|
||||||
.stream()
|
imports = rulesString.substring(0,
|
||||||
.mapToInt(ImportDescr::getEndCharacter)
|
packageDescr.getImports()
|
||||||
.max()
|
.stream()
|
||||||
.orElseThrow() + 1);
|
.mapToInt(ImportDescr::getEndCharacter)
|
||||||
|
.max()
|
||||||
|
.orElseThrow() + 1);
|
||||||
|
}
|
||||||
String globals = packageDescr.getGlobals()
|
String globals = packageDescr.getGlobals()
|
||||||
.stream()
|
.stream()
|
||||||
.map(globalDescr -> rulesString.substring(globalDescr.getStartCharacter(), globalDescr.getEndCharacter()))
|
.map(globalDescr -> rulesString.substring(globalDescr.getStartCharacter(), globalDescr.getEndCharacter()))
|
||||||
@ -108,13 +118,18 @@ public class RuleFileParser {
|
|||||||
|
|
||||||
private List<RuleUnit> groupingByGroup(List<BasicRule> rules) {
|
private List<RuleUnit> groupingByGroup(List<BasicRule> rules) {
|
||||||
|
|
||||||
Map<Integer, List<BasicRule>> rulesPerUnit = rules.stream()
|
try {
|
||||||
.collect(groupingBy(rule -> rule.identifier().unit()));
|
Map<Integer, List<BasicRule>> rulesPerUnit = rules.stream()
|
||||||
return rulesPerUnit.keySet()
|
.collect(groupingBy(rule -> rule.identifier().unit()));
|
||||||
.stream()
|
return rulesPerUnit.keySet()
|
||||||
.sorted()
|
.stream()
|
||||||
.map(unit -> new RuleUnit(unit, rulesPerUnit.get(unit)))
|
.sorted()
|
||||||
.collect(Collectors.toList());
|
.map(unit -> new RuleUnit(unit, rulesPerUnit.get(unit)))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
System.out.println(rules);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user