Class DefaultDroolsRuleConditionsGenerator
- java.lang.Object
-
- de.hybris.platform.droolsruleengineservices.compiler.impl.DefaultDroolsRuleConditionsGenerator
-
- All Implemented Interfaces:
DroolsRuleConditionsGenerator
public class DefaultDroolsRuleConditionsGenerator extends java.lang.Object implements DroolsRuleConditionsGenerator
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classDefaultDroolsRuleConditionsGenerator.Dependencyprotected static classDefaultDroolsRuleConditionsGenerator.DependencyComparatorprotected static classDefaultDroolsRuleConditionsGenerator.DroolsRuleConditionsGeneratorContext
-
Field Summary
Fields Modifier and Type Field Description static intBUFFER_SIZEstatic java.lang.StringNON_SUPPORTED_CONDITION
-
Constructor Summary
Constructors Constructor Description DefaultDroolsRuleConditionsGenerator()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.util.Set<DefaultDroolsRuleConditionsGenerator.Dependency>buildDependencies(java.util.Map<java.lang.String,java.util.Collection<AbstractRuleIrPatternCondition>> patternConditions)protected voidcollectTypeConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrCondition> conditions, java.util.Map<java.lang.String,RuleIrTypeCondition> typeConditions)protected booleandoesNotContainTargetCustomerConditions(RuleIrGroupCondition ruleIrGroupCondition, DroolsRuleGeneratorContext context, java.lang.String indentation)protected java.lang.StringevaluateAttributeNameAndOperator(AbstractRuleIrAttributeCondition condition)protected java.lang.StringevaluatePatternConditionType(DroolsRuleGeneratorContext context, AbstractRuleIrPatternCondition patternCondition)protected java.lang.StringevaluatePatternConditionType(DroolsRuleGeneratorContext context, AbstractRuleIrPatternCondition patternCondition, java.util.function.Supplier<java.lang.String> variablePrefixSupplier)protected RuleIrConditionsByTypeevaluateRuleConditionType(java.util.List<RuleIrCondition> conditions)protected voidexpandDependencies(java.util.Set<DefaultDroolsRuleConditionsGenerator.Dependency> dependencies)protected java.util.Collection<RuleIrCondition>filterOutNonGroupConditions(java.util.Collection<RuleIrCondition> conditions)protected RuleIrVariablefindVariable(DroolsRuleGeneratorContext context, java.lang.String variableName)protected voidfindVariablesOfPatternConditions(java.util.Collection<java.lang.String> variableNames, java.util.Collection<RuleIrCondition> conditions)protected voidgenerateBooleanConditions(java.util.Map<java.lang.Boolean,java.util.Collection<AbstractRuleIrBooleanCondition>> booleanConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)java.lang.StringgenerateConditions(DroolsRuleGeneratorContext context, java.lang.String indentation)Generates the conditions for the Drools rule engine.protected java.lang.StringgenerateConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrCondition> conditions, RuleIrGroupOperator operator, java.lang.String conditionPrefix, java.lang.String indentation)protected voidgenerateExecutableConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrExecutableCondition> executableConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)protected voidgenerateExistsConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrExistsCondition> existsConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)protected voidgenerateGroupConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrGroupCondition> groupConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)protected voidgenerateGroupConditions(java.util.List<RuleIrGroupCondition> groupConditions, java.util.function.Function<RuleIrGroupCondition,java.lang.String> generateConditionsFunction, java.util.StringJoiner conditionsJoiner)protected voidgenerateNotConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrNotCondition> notConditions, java.util.function.Function<RuleIrNotCondition,java.lang.String> generateConditionsSupplier, java.util.StringJoiner conditionsJoiner)protected voidgenerateNotConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrNotCondition> notConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)protected voidgeneratePatternConditions(DroolsRuleGeneratorContext context, java.util.Map<java.lang.String,java.util.Collection<AbstractRuleIrPatternCondition>> patternConditions, RuleIrGroupOperator groupOperator, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)java.lang.StringgenerateRequiredFactsCheckPattern(DroolsRuleGeneratorContext context)Generates the required facts check pattern for the rule's LHSjava.lang.StringgenerateRequiredTypeVariables(DroolsRuleGeneratorContext context)Generates the required type variables for the rule's LHSprotected voidgenerateUniqueFactMatchingCondition(DroolsRuleGeneratorContext context, RuleIrVariable variable, java.lang.StringBuilder conditionsBuffer, java.util.function.Supplier<java.lang.String> variablePrefixSupplier)adds additional conditions likethis != $v4_raoto OrderEntryRAO variables.protected java.lang.StringgenerateWhenConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrCondition> conditions, RuleIrGroupOperator operator, java.lang.String conditionPrefix, java.lang.String indentation)protected voidgenerateWhenGroupConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrGroupCondition> groupConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)protected voidgenerateWhenNotConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrNotCondition> notConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)protected voidgenerateWhenPatternConditions(DroolsRuleGeneratorContext context, java.util.Map<java.lang.String,java.util.Collection<AbstractRuleIrPatternCondition>> patternConditions, RuleIrGroupOperator groupOperator, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)protected java.util.Collection<RuleIrCondition>getConditionsInGroups(java.util.Collection<? extends RuleIrCondition> conditions)protected ConfigurationServicegetConfigurationService()DroolsRuleValueFormattergetDroolsRuleValueFormatter()protected DroolsStringUtilsgetDroolsStringUtils()protected java.util.List<java.lang.String>getExcludedQueryVariableClassNames()protected java.util.List<java.lang.Class<?>>getTypesToSkipOperatorEvaluation()protected booleanisAnyVariableReferredInAttrRelConditions(java.util.Collection<java.lang.String> variableNamesToCheck, java.util.Collection<? extends RuleIrCondition> others)protected booleanisAnyVariableReferredInConditions(java.util.Collection<java.lang.String> variableNamesToCheck, java.util.Collection<? extends RuleIrCondition> others)protected booleanisAnyVariableReferredInPatternConditions(java.util.Collection<java.lang.String> variableNamesToCheck, java.util.Collection<? extends RuleIrCondition> others)protected booleanisConditionDependentOnOthers(RuleIrCondition condition, java.util.Collection<? extends RuleIrCondition> others, java.util.Collection<java.lang.String> definedVariables)protected booleanisVariableTerminal(java.lang.String variableName, DroolsRuleGeneratorContext context)protected booleanisVariableTerminal(java.lang.String variableName, java.util.Collection<RuleIrCondition> conditions)voidsetConfigurationService(ConfigurationService configurationService)voidsetDroolsRuleValueFormatter(DroolsRuleValueFormatter droolsRuleValueFormatter)voidsetDroolsStringUtils(DroolsStringUtils droolsStringUtils)voidsetExcludedQueryVariableClassNames(java.util.List<java.lang.String> excludedQueryVariableClassNames)voidsetTypesToSkipOperatorEvaluation(java.util.List<java.lang.Class<?>> typesToSkipOperatorEvaluation)
-
-
-
Field Detail
-
NON_SUPPORTED_CONDITION
public static final java.lang.String NON_SUPPORTED_CONDITION
- See Also:
- Constant Field Values
-
BUFFER_SIZE
public static final int BUFFER_SIZE
- See Also:
- Constant Field Values
-
-
Method Detail
-
generateConditions
public java.lang.String generateConditions(DroolsRuleGeneratorContext context, java.lang.String indentation)
Description copied from interface:DroolsRuleConditionsGeneratorGenerates the conditions for the Drools rule engine.- Specified by:
generateConditionsin interfaceDroolsRuleConditionsGenerator- Parameters:
context- - the drools rule generator contextindentation- - the indentation- Returns:
- the String representation
-
generateRequiredFactsCheckPattern
public java.lang.String generateRequiredFactsCheckPattern(DroolsRuleGeneratorContext context)
Description copied from interface:DroolsRuleConditionsGeneratorGenerates the required facts check pattern for the rule's LHS- Specified by:
generateRequiredFactsCheckPatternin interfaceDroolsRuleConditionsGenerator- Parameters:
context- - the drools rule generator context- Returns:
- string, containing the check pattern
-
generateRequiredTypeVariables
public java.lang.String generateRequiredTypeVariables(DroolsRuleGeneratorContext context)
Description copied from interface:DroolsRuleConditionsGeneratorGenerates the required type variables for the rule's LHS- Specified by:
generateRequiredTypeVariablesin interfaceDroolsRuleConditionsGenerator- Parameters:
context- - the drools rule generator context- Returns:
- string, containing the type variables
-
collectTypeConditions
protected void collectTypeConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrCondition> conditions, java.util.Map<java.lang.String,RuleIrTypeCondition> typeConditions)
-
generateWhenConditions
protected java.lang.String generateWhenConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrCondition> conditions, RuleIrGroupOperator operator, java.lang.String conditionPrefix, java.lang.String indentation)
-
doesNotContainTargetCustomerConditions
protected boolean doesNotContainTargetCustomerConditions(RuleIrGroupCondition ruleIrGroupCondition, DroolsRuleGeneratorContext context, java.lang.String indentation)
-
isConditionDependentOnOthers
protected boolean isConditionDependentOnOthers(RuleIrCondition condition, java.util.Collection<? extends RuleIrCondition> others, java.util.Collection<java.lang.String> definedVariables)
-
isAnyVariableReferredInConditions
protected boolean isAnyVariableReferredInConditions(java.util.Collection<java.lang.String> variableNamesToCheck, java.util.Collection<? extends RuleIrCondition> others)
-
isAnyVariableReferredInPatternConditions
protected boolean isAnyVariableReferredInPatternConditions(java.util.Collection<java.lang.String> variableNamesToCheck, java.util.Collection<? extends RuleIrCondition> others)
-
isAnyVariableReferredInAttrRelConditions
protected boolean isAnyVariableReferredInAttrRelConditions(java.util.Collection<java.lang.String> variableNamesToCheck, java.util.Collection<? extends RuleIrCondition> others)
-
findVariablesOfPatternConditions
protected void findVariablesOfPatternConditions(java.util.Collection<java.lang.String> variableNames, java.util.Collection<RuleIrCondition> conditions)
-
getConditionsInGroups
protected java.util.Collection<RuleIrCondition> getConditionsInGroups(java.util.Collection<? extends RuleIrCondition> conditions)
-
filterOutNonGroupConditions
protected java.util.Collection<RuleIrCondition> filterOutNonGroupConditions(java.util.Collection<RuleIrCondition> conditions)
-
generateConditions
protected java.lang.String generateConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrCondition> conditions, RuleIrGroupOperator operator, java.lang.String conditionPrefix, java.lang.String indentation)
-
evaluateRuleConditionType
protected RuleIrConditionsByType evaluateRuleConditionType(java.util.List<RuleIrCondition> conditions)
-
generateBooleanConditions
protected void generateBooleanConditions(java.util.Map<java.lang.Boolean,java.util.Collection<AbstractRuleIrBooleanCondition>> booleanConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)
-
generateWhenPatternConditions
protected void generateWhenPatternConditions(DroolsRuleGeneratorContext context, java.util.Map<java.lang.String,java.util.Collection<AbstractRuleIrPatternCondition>> patternConditions, RuleIrGroupOperator groupOperator, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)
-
isVariableTerminal
protected boolean isVariableTerminal(java.lang.String variableName, DroolsRuleGeneratorContext context)
-
isVariableTerminal
protected boolean isVariableTerminal(java.lang.String variableName, java.util.Collection<RuleIrCondition> conditions)
-
generatePatternConditions
protected void generatePatternConditions(DroolsRuleGeneratorContext context, java.util.Map<java.lang.String,java.util.Collection<AbstractRuleIrPatternCondition>> patternConditions, RuleIrGroupOperator groupOperator, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)
-
evaluateAttributeNameAndOperator
protected java.lang.String evaluateAttributeNameAndOperator(AbstractRuleIrAttributeCondition condition)
-
evaluatePatternConditionType
protected java.lang.String evaluatePatternConditionType(DroolsRuleGeneratorContext context, AbstractRuleIrPatternCondition patternCondition)
-
evaluatePatternConditionType
protected java.lang.String evaluatePatternConditionType(DroolsRuleGeneratorContext context, AbstractRuleIrPatternCondition patternCondition, java.util.function.Supplier<java.lang.String> variablePrefixSupplier)
-
generateUniqueFactMatchingCondition
protected void generateUniqueFactMatchingCondition(DroolsRuleGeneratorContext context, RuleIrVariable variable, java.lang.StringBuilder conditionsBuffer, java.util.function.Supplier<java.lang.String> variablePrefixSupplier)
adds additional conditions likethis != $v4_raoto OrderEntryRAO variables. Example:$rao_v5 := OrderEntryRAO(this != $rao_v4, productCode == "478828". This is a performance improvement that reduces matching efforts for drools. Note: If multiple containers define the same set of products / categories this can have a functional impact (i.e. the promotion might not fire) if the containers are supposed to match the same cart entry. Ideally, containers should not contain any overlap in their defined products/categories, but if business needs requires such a setup of containers, this functionality can be turned off by setting the properydroolsruleengineservices.generate.unique.fact.matching.condition=false, followed by recompilation of the promotions.- Parameters:
context-variable-conditionsBuffer-variablePrefixSupplier-
-
generateWhenGroupConditions
protected void generateWhenGroupConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrGroupCondition> groupConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)
-
generateGroupConditions
protected void generateGroupConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrGroupCondition> groupConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)
-
generateGroupConditions
protected void generateGroupConditions(java.util.List<RuleIrGroupCondition> groupConditions, java.util.function.Function<RuleIrGroupCondition,java.lang.String> generateConditionsFunction, java.util.StringJoiner conditionsJoiner)
-
generateExistsConditions
protected void generateExistsConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrExistsCondition> existsConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)
-
generateNotConditions
protected void generateNotConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrNotCondition> notConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)
-
generateWhenNotConditions
protected void generateWhenNotConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrNotCondition> notConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)
-
generateNotConditions
protected void generateNotConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrNotCondition> notConditions, java.util.function.Function<RuleIrNotCondition,java.lang.String> generateConditionsSupplier, java.util.StringJoiner conditionsJoiner)
-
generateExecutableConditions
protected void generateExecutableConditions(DroolsRuleGeneratorContext context, java.util.List<RuleIrExecutableCondition> executableConditions, java.util.StringJoiner conditionsJoiner, java.lang.String indentation)
-
findVariable
protected RuleIrVariable findVariable(DroolsRuleGeneratorContext context, java.lang.String variableName)
-
buildDependencies
protected java.util.Set<DefaultDroolsRuleConditionsGenerator.Dependency> buildDependencies(java.util.Map<java.lang.String,java.util.Collection<AbstractRuleIrPatternCondition>> patternConditions)
-
expandDependencies
protected void expandDependencies(java.util.Set<DefaultDroolsRuleConditionsGenerator.Dependency> dependencies)
-
getDroolsRuleValueFormatter
public DroolsRuleValueFormatter getDroolsRuleValueFormatter()
-
setDroolsRuleValueFormatter
public void setDroolsRuleValueFormatter(DroolsRuleValueFormatter droolsRuleValueFormatter)
-
getExcludedQueryVariableClassNames
protected java.util.List<java.lang.String> getExcludedQueryVariableClassNames()
-
setExcludedQueryVariableClassNames
public void setExcludedQueryVariableClassNames(java.util.List<java.lang.String> excludedQueryVariableClassNames)
-
getTypesToSkipOperatorEvaluation
protected java.util.List<java.lang.Class<?>> getTypesToSkipOperatorEvaluation()
-
setTypesToSkipOperatorEvaluation
public void setTypesToSkipOperatorEvaluation(java.util.List<java.lang.Class<?>> typesToSkipOperatorEvaluation)
-
getConfigurationService
protected ConfigurationService getConfigurationService()
-
setConfigurationService
public void setConfigurationService(ConfigurationService configurationService)
-
getDroolsStringUtils
protected DroolsStringUtils getDroolsStringUtils()
-
setDroolsStringUtils
public void setDroolsStringUtils(DroolsStringUtils droolsStringUtils)
-
-