Class RuleImpl
- java.lang.Object
-
- org.drools.core.definitions.rule.impl.RuleImpl
-
- All Implemented Interfaces:
Externalizable,Serializable,Wireable,Dialectable,org.kie.api.definition.KieDefinition,org.kie.api.definition.rule.Query,org.kie.api.definition.rule.Rule,org.kie.internal.definition.rule.InternalRule
- Direct Known Subclasses:
QueryImpl
public class RuleImpl extends Object implements Externalizable, Wireable, Dialectable, org.kie.internal.definition.rule.InternalRule, org.kie.api.definition.rule.Query
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classRuleImpl.SafeEnabledstatic classRuleImpl.SafeSalience-
Nested classes/interfaces inherited from interface org.kie.api.definition.KieDefinition
org.kie.api.definition.KieDefinition.KnowledgeType
-
Nested classes/interfaces inherited from interface org.drools.core.rule.accessor.Wireable
Wireable.Immutable
-
-
Field Summary
Fields Modifier and Type Field Description protected StringactivationListenerstatic StringDEFAULT_CONSEQUENCE_NAME
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddChild(RuleImpl child)voidaddMetaAttribute(String key, Object value)voidaddNamedConsequence(String name, Consequence consequence)voidaddPattern(RuleConditionElement element)Add a pattern to the rule.voidaddUsedQuery(QueryImpl query)protected Collection<QueryImpl>collectDependingQueries(Deque<QueryImpl> accumulator)booleanequals(Object obj)Declaration[]findEnabledDeclarations(Map<String,Declaration> decls)Declaration[]findSalienceDeclarations(Map<String,Declaration> decls)StringgetActivationGroup()StringgetActivationListener()StringgetAgendaGroup()booleangetAutoFocus()String[]getCalendars()List<RuleImpl>getChildren()ConsequencegetConsequence()Retrieve theConsequenceassociated with thisRule.ConsequenceMetaDatagetConsequenceMetaData()CalendargetDateEffective()CalendargetDateExpires()DeclarationgetDeclaration(String identifier)Retrieve a parameterDeclarationby identifier.Map<String,Declaration>getDeclarations()Retrieve the set of all root fact object parameterDeclarations.Collection<QueryImpl>getDependingQueries()Returns the lists of queries from which this rule (or query) depends on ordered by their relative dependencies, e.g. if R1 -> A -> B -> C (where the letter are queries) it will return [C, B, A]StringgetDialect()EnabledgetEnabled()StringgetFullyQualifiedName()StringgetId()org.kie.api.definition.KieDefinition.KnowledgeTypegetKnowledgeType()GroupElementgetLhs()Retrieve theListofConditionsfor this rule.intgetLoadOrder()Map<String,Object>getMetaData()ObjectgetMetaData(String name)StringgetName()Retrieve the name of this rule.ConsequencegetNamedConsequence(String consequenceName)StringgetNamespace()StringgetPackage()StringgetPackageName()RuleImplgetParent()String[]getRequiredDeclarationsForConsequence(String consequenceName)org.kie.api.io.ResourcegetResource()StringgetRuleFlowGroup()StringgetRuleUnitClassName()SaliencegetSalience()Retrieve theRulesalience.intgetSalienceValue()Retrieve theRulesalience value.TimergetTimer()Returns the Timer semantics for a rule.GroupElement[]getTransformedLhs(LogicTransformer transformer, Map<String,Type> globals)Uses the LogicTransformer to process the Rule patters - if no ORs are used this will return an array of a single AND element.booleanhasCalendars()booleanhasChildren()inthashCode()booleanhasLogicalDependency()This field is updated at runtime, when the first logical assertion is done.booleanhasNamedConsequences()booleanisAllMatches()booleanisDataDriven()booleanisEager()booleanisEffective(Tuple tuple, RuleTerminalNode rtn, ReteEvaluator reteEvaluator)This returns true is the rule is effective.booleanisEnabled(Tuple tuple, RuleTerminalNode rtn, ReteEvaluator reteEvaluator)booleanisLockOnActive()booleanisMainAgendaGroup()booleanisNoLoop()booleanisQuery()booleanisSalienceDynamic()Returnstrueif the rule uses dynamic salience,falseotherwise.booleanisSemanticallyValid()This will return if the semantic actions or predicates in the rules are valid.booleanisValid()Determine if this rule is internally consistent and valid.voidreadExternal(ObjectInput in)voidremoveChild(RuleImpl child)voidsetActivationGroup(String activationGroup)voidsetActivationListener(String activationListener)RuleImplsetAgendaGroup(String agendaGroup)voidsetAllMatches(boolean allMatches)voidsetAutoFocus(boolean autoFocus)voidsetCalendars(String[] calendars)voidsetConsequence(Consequence consequence)Set theConsequencethat is associated with the successful match of this rule.voidsetDataDriven(boolean dataDriven)voidsetDateEffective(Calendar effectiveDate)Sets the date from which this rule takes effect (can include time to the millisecond).voidsetDateExpires(Calendar expiresDate)Sets the date after which the rule will no longer apply (can include time to the millisecond).voidsetDialect(String dialect)voidsetEager(boolean eager)voidsetEnabled(Enabled b)A rule is enabled by default.voidsetHasLogicalDependency(boolean hasLogicalDependency)voidsetLhs(GroupElement lhsRoot)voidsetLoadOrder(int loadOrder)voidsetLockOnActive(boolean lockOnActive)voidsetNoLoop(boolean noLoop)RuleImplsetPackage(String pkg)voidsetParent(RuleImpl parent)voidsetRequiredDeclarationsForConsequence(String consequenceName, String[] requiredDeclarations)voidsetResource(org.kie.api.io.Resource resource)voidsetRuleFlowGroup(String ruleFlowGroup)voidsetRuleUnitClass(Class<?> ruleUnit)voidsetRuleUnitClassName(String ruleUnitClassName)voidsetSalience(Salience salience)Set theRulesalience.voidsetSemanticallyValid(boolean valid)voidsetTimer(Timer timer)Sets the timer semantics for a rule.StringtoRuleNameAndPathString()StringtoString()voidwire(Object object)voidwriteExternal(ObjectOutput out)
-
-
-
Field Detail
-
DEFAULT_CONSEQUENCE_NAME
public static final String DEFAULT_CONSEQUENCE_NAME
- See Also:
- Constant Field Values
-
activationListener
protected String activationListener
-
-
Constructor Detail
-
RuleImpl
public RuleImpl()
-
RuleImpl
public RuleImpl(String name)
Construct aRulewith the given name for the specified pkg parent- Parameters:
name- The name of this rule.
-
-
Method Detail
-
writeExternal
public void writeExternal(ObjectOutput out) throws IOException
- Specified by:
writeExternalin interfaceExternalizable- Throws:
IOException
-
readExternal
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
- Specified by:
readExternalin interfaceExternalizable- Throws:
IOExceptionClassNotFoundException
-
addUsedQuery
public void addUsedQuery(QueryImpl query)
-
getDependingQueries
public Collection<QueryImpl> getDependingQueries()
Returns the lists of queries from which this rule (or query) depends on ordered by their relative dependencies, e.g. if R1 -> A -> B -> C (where the letter are queries) it will return [C, B, A]
-
collectDependingQueries
protected Collection<QueryImpl> collectDependingQueries(Deque<QueryImpl> accumulator)
-
getResource
public org.kie.api.io.Resource getResource()
- Specified by:
getResourcein interfaceorg.kie.internal.definition.rule.InternalRule
-
setResource
public void setResource(org.kie.api.io.Resource resource)
-
getDialect
public String getDialect()
- Specified by:
getDialectin interfaceDialectable- Specified by:
getDialectin interfaceorg.kie.internal.definition.rule.InternalRule
-
setDialect
public void setDialect(String dialect)
-
getTimer
public Timer getTimer()
Returns the Timer semantics for a rule. Timer based rules are not added directly to the Agenda instead they are scheduled for Agenda addition, based on the timer.
-
setTimer
public void setTimer(Timer timer)
Sets the timer semantics for a rule. Timer based rules are not added directly to the Agenda instead they are scheduled for Agenda addition, based on the timer.
-
isValid
public boolean isValid()
Determine if this rule is internally consistent and valid. This will include checks to make sure the rules semantic components (actions and predicates) are valid. No exception is thrown.A
Rulemust include at least one parameter declaration and one condition.- Specified by:
isValidin interfaceorg.kie.internal.definition.rule.InternalRule- Returns:
trueif this rule is valid, elsefalse.
-
getPackage
public String getPackage()
-
getPackageName
public String getPackageName()
- Specified by:
getPackageNamein interfaceorg.kie.api.definition.rule.Query- Specified by:
getPackageNamein interfaceorg.kie.api.definition.rule.Rule
-
getName
public String getName()
Retrieve the name of this rule.- Specified by:
getNamein interfaceorg.kie.api.definition.rule.Query- Specified by:
getNamein interfaceorg.kie.api.definition.rule.Rule- Returns:
- The name of this rule.
-
getFullyQualifiedName
public String getFullyQualifiedName()
- Specified by:
getFullyQualifiedNamein interfaceorg.kie.internal.definition.rule.InternalRule
-
getSalience
public Salience getSalience()
Retrieve theRulesalience.- Returns:
- The salience.
-
getSalienceValue
public int getSalienceValue()
Retrieve theRulesalience value.- Specified by:
getSalienceValuein interfaceorg.kie.internal.definition.rule.InternalRule- Returns:
- The salience value.
-
isSalienceDynamic
public boolean isSalienceDynamic()
Returnstrueif the rule uses dynamic salience,falseotherwise.- Specified by:
isSalienceDynamicin interfaceorg.kie.internal.definition.rule.InternalRule- Returns:
trueif the rule uses dynamic salience, elsefalse.
-
setSalience
public void setSalience(Salience salience)
Set theRulesalience.- Parameters:
salience- The salience.
-
getAgendaGroup
public String getAgendaGroup()
- Specified by:
getAgendaGroupin interfaceorg.kie.internal.definition.rule.InternalRule
-
isMainAgendaGroup
public boolean isMainAgendaGroup()
- Specified by:
isMainAgendaGroupin interfaceorg.kie.internal.definition.rule.InternalRule
-
isNoLoop
public boolean isNoLoop()
- Specified by:
isNoLoopin interfaceorg.kie.internal.definition.rule.InternalRule
-
isEffective
public boolean isEffective(Tuple tuple, RuleTerminalNode rtn, ReteEvaluator reteEvaluator)
This returns true is the rule is effective. If the rule is not effective, it cannot activate. This uses the dateEffective, dateExpires and enabled flag to decide this.
-
setNoLoop
public void setNoLoop(boolean noLoop)
-
getAutoFocus
public boolean getAutoFocus()
- Specified by:
getAutoFocusin interfaceorg.kie.internal.definition.rule.InternalRule
-
setAutoFocus
public void setAutoFocus(boolean autoFocus)
-
getActivationGroup
public String getActivationGroup()
- Specified by:
getActivationGroupin interfaceorg.kie.internal.definition.rule.InternalRule
-
setActivationGroup
public void setActivationGroup(String activationGroup)
-
getRuleFlowGroup
public String getRuleFlowGroup()
- Specified by:
getRuleFlowGroupin interfaceorg.kie.internal.definition.rule.InternalRule
-
setRuleFlowGroup
public void setRuleFlowGroup(String ruleFlowGroup)
-
getDeclaration
public Declaration getDeclaration(String identifier)
Retrieve a parameterDeclarationby identifier.- Parameters:
identifier- The identifier.- Returns:
- The declaration or
nullif no declaration matches theidentifier.
-
getRequiredDeclarationsForConsequence
public String[] getRequiredDeclarationsForConsequence(String consequenceName)
-
setRequiredDeclarationsForConsequence
public void setRequiredDeclarationsForConsequence(String consequenceName, String[] requiredDeclarations)
-
hasLogicalDependency
public boolean hasLogicalDependency()
This field is updated at runtime, when the first logical assertion is done. I'm currently not too happy about having this determine at runtime but its currently easier than trying to do this at compile time, although eventually this should be changed- Returns:
-
setHasLogicalDependency
public void setHasLogicalDependency(boolean hasLogicalDependency)
-
isLockOnActive
public boolean isLockOnActive()
- Specified by:
isLockOnActivein interfaceorg.kie.internal.definition.rule.InternalRule
-
setLockOnActive
public void setLockOnActive(boolean lockOnActive)
-
getDeclarations
public Map<String,Declaration> getDeclarations()
Retrieve the set of all root fact object parameterDeclarations.- Returns:
- The Set of
Declarationsin order which specify the root fact objects.
-
addPattern
public void addPattern(RuleConditionElement element)
Add a pattern to the rule. All patterns are searched for bindings which are then added to the rule as declarations- Parameters:
element- TheTestto add.- Throws:
InvalidRuleException
-
getLhs
public GroupElement getLhs()
Retrieve theListofConditionsfor this rule.- Returns:
- The
ListofConditions.
-
setLhs
public void setLhs(GroupElement lhsRoot)
-
getTransformedLhs
public GroupElement[] getTransformedLhs(LogicTransformer transformer, Map<String,Type> globals) throws InvalidPatternException
Uses the LogicTransformer to process the Rule patters - if no ORs are used this will return an array of a single AND element. If there are Ors it will return an And element for each possible logic branch. The processing uses as a clone of the Rule's patterns, so they are not changed.- Returns:
- Throws:
InvalidPatternException
-
setConsequence
public void setConsequence(Consequence consequence)
Set theConsequencethat is associated with the successful match of this rule.- Parameters:
consequence- TheConsequenceto attach to thisRule.
-
getConsequence
public Consequence getConsequence()
Retrieve theConsequenceassociated with thisRule.- Returns:
- The
Consequence.
-
hasNamedConsequences
public boolean hasNamedConsequences()
-
getNamedConsequence
public Consequence getNamedConsequence(String consequenceName)
-
addNamedConsequence
public void addNamedConsequence(String name, Consequence consequence)
-
getLoadOrder
public int getLoadOrder()
-
setLoadOrder
public void setLoadOrder(int loadOrder)
-
isEager
public boolean isEager()
-
setEager
public void setEager(boolean eager)
-
isDataDriven
public boolean isDataDriven()
-
setDataDriven
public void setDataDriven(boolean dataDriven)
-
isAllMatches
public boolean isAllMatches()
-
setAllMatches
public void setAllMatches(boolean allMatches)
-
toRuleNameAndPathString
public String toRuleNameAndPathString()
-
setSemanticallyValid
public void setSemanticallyValid(boolean valid)
-
isSemanticallyValid
public boolean isSemanticallyValid()
This will return if the semantic actions or predicates in the rules are valid. This is provided so that lists of rules can be provided even if their semantic actions do not "compile" etc.
-
hasCalendars
public boolean hasCalendars()
-
getCalendars
public String[] getCalendars()
-
setCalendars
public void setCalendars(String[] calendars)
-
setDateEffective
public void setDateEffective(Calendar effectiveDate)
Sets the date from which this rule takes effect (can include time to the millisecond).- Parameters:
effectiveDate-
-
setDateExpires
public void setDateExpires(Calendar expiresDate)
Sets the date after which the rule will no longer apply (can include time to the millisecond).- Parameters:
expiresDate-
-
getDateEffective
public Calendar getDateEffective()
- Specified by:
getDateEffectivein interfaceorg.kie.internal.definition.rule.InternalRule
-
getDateExpires
public Calendar getDateExpires()
- Specified by:
getDateExpiresin interfaceorg.kie.internal.definition.rule.InternalRule
-
setEnabled
public void setEnabled(Enabled b)
A rule is enabled by default. This can explicitly disable it in which case it will never activate.
-
getEnabled
public Enabled getEnabled()
-
isEnabled
public boolean isEnabled(Tuple tuple, RuleTerminalNode rtn, ReteEvaluator reteEvaluator)
-
getActivationListener
public String getActivationListener()
-
setActivationListener
public void setActivationListener(String activationListener)
-
getMetaData
public Map<String,Object> getMetaData()
- Specified by:
getMetaDatain interfaceorg.kie.api.definition.rule.Query- Specified by:
getMetaDatain interfaceorg.kie.api.definition.rule.Rule
-
setParent
public void setParent(RuleImpl parent)
-
getParent
public RuleImpl getParent()
-
addChild
public void addChild(RuleImpl child)
-
removeChild
public void removeChild(RuleImpl child)
-
hasChildren
public boolean hasChildren()
-
isQuery
public boolean isQuery()
-
getKnowledgeType
public org.kie.api.definition.KieDefinition.KnowledgeType getKnowledgeType()
- Specified by:
getKnowledgeTypein interfaceorg.kie.api.definition.KieDefinition
-
getNamespace
public String getNamespace()
- Specified by:
getNamespacein interfaceorg.kie.api.definition.KieDefinition
-
getId
public String getId()
- Specified by:
getIdin interfaceorg.kie.api.definition.KieDefinition
-
getConsequenceMetaData
public ConsequenceMetaData getConsequenceMetaData()
-
getRuleUnitClassName
public String getRuleUnitClassName()
-
setRuleUnitClass
public void setRuleUnitClass(Class<?> ruleUnit)
-
setRuleUnitClassName
public void setRuleUnitClassName(String ruleUnitClassName)
-
findEnabledDeclarations
public Declaration[] findEnabledDeclarations(Map<String,Declaration> decls)
-
findSalienceDeclarations
public Declaration[] findSalienceDeclarations(Map<String,Declaration> decls)
-
-