Class RuleImpl

  • All Implemented Interfaces:
    java.io.Externalizable, java.io.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 java.lang.Object
    implements java.io.Externalizable, Wireable, Dialectable, org.kie.internal.definition.rule.InternalRule, org.kie.api.definition.rule.Query
    See Also:
    Serialized Form
    • Field Detail

      • DEFAULT_CONSEQUENCE_NAME

        public static final java.lang.String DEFAULT_CONSEQUENCE_NAME
        See Also:
        Constant Field Values
      • activationListener

        protected java.lang.String activationListener
    • Constructor Detail

      • RuleImpl

        public RuleImpl()
      • RuleImpl

        public RuleImpl​(java.lang.String name)
        Construct a Rule with the given name for the specified pkg parent
        Parameters:
        name - The name of this rule.
    • Method Detail

      • writeExternal

        public void writeExternal​(java.io.ObjectOutput out)
                           throws java.io.IOException
        Specified by:
        writeExternal in interface java.io.Externalizable
        Throws:
        java.io.IOException
      • readExternal

        public void readExternal​(java.io.ObjectInput in)
                          throws java.io.IOException,
                                 java.lang.ClassNotFoundException
        Specified by:
        readExternal in interface java.io.Externalizable
        Throws:
        java.io.IOException
        java.lang.ClassNotFoundException
      • addUsedQuery

        public void addUsedQuery​(QueryImpl query)
      • getDependingQueries

        public java.util.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 java.util.Collection<QueryImpl> collectDependingQueries​(java.util.Deque<QueryImpl> accumulator)
      • getResource

        public org.kie.api.io.Resource getResource()
        Specified by:
        getResource in interface org.kie.internal.definition.rule.InternalRule
      • setResource

        public void setResource​(org.kie.api.io.Resource resource)
      • getDialect

        public java.lang.String getDialect()
        Specified by:
        getDialect in interface Dialectable
        Specified by:
        getDialect in interface org.kie.internal.definition.rule.InternalRule
      • setDialect

        public void setDialect​(java.lang.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 Rule must include at least one parameter declaration and one condition.

        Specified by:
        isValid in interface org.kie.internal.definition.rule.InternalRule
        Returns:
        true if this rule is valid, else false.
      • getPackage

        public java.lang.String getPackage()
      • setPackage

        public RuleImpl setPackage​(java.lang.String pkg)
      • getPackageName

        public java.lang.String getPackageName()
        Specified by:
        getPackageName in interface org.kie.api.definition.rule.Query
        Specified by:
        getPackageName in interface org.kie.api.definition.rule.Rule
      • getName

        public java.lang.String getName()
        Retrieve the name of this rule.
        Specified by:
        getName in interface org.kie.api.definition.rule.Query
        Specified by:
        getName in interface org.kie.api.definition.rule.Rule
        Returns:
        The name of this rule.
      • getFullyQualifiedName

        public java.lang.String getFullyQualifiedName()
        Specified by:
        getFullyQualifiedName in interface org.kie.internal.definition.rule.InternalRule
      • getSalience

        public Salience getSalience()
        Retrieve the Rule salience.
        Returns:
        The salience.
      • getSalienceValue

        public int getSalienceValue()
        Retrieve the Rule salience value.
        Specified by:
        getSalienceValue in interface org.kie.internal.definition.rule.InternalRule
        Returns:
        The salience value.
      • isSalienceDynamic

        public boolean isSalienceDynamic()
        Returns true if the rule uses dynamic salience, false otherwise.
        Specified by:
        isSalienceDynamic in interface org.kie.internal.definition.rule.InternalRule
        Returns:
        true if the rule uses dynamic salience, else false.
      • setSalience

        public void setSalience​(Salience salience)
        Set the Rule salience.
        Parameters:
        salience - The salience.
      • getAgendaGroup

        public java.lang.String getAgendaGroup()
        Specified by:
        getAgendaGroup in interface org.kie.internal.definition.rule.InternalRule
      • setAgendaGroup

        public RuleImpl setAgendaGroup​(java.lang.String agendaGroup)
      • isMainAgendaGroup

        public boolean isMainAgendaGroup()
        Specified by:
        isMainAgendaGroup in interface org.kie.internal.definition.rule.InternalRule
      • isNoLoop

        public boolean isNoLoop()
        Specified by:
        isNoLoop in interface org.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:
        getAutoFocus in interface org.kie.internal.definition.rule.InternalRule
      • setAutoFocus

        public void setAutoFocus​(boolean autoFocus)
      • getActivationGroup

        public java.lang.String getActivationGroup()
        Specified by:
        getActivationGroup in interface org.kie.internal.definition.rule.InternalRule
      • setActivationGroup

        public void setActivationGroup​(java.lang.String activationGroup)
      • getRuleFlowGroup

        public java.lang.String getRuleFlowGroup()
        Specified by:
        getRuleFlowGroup in interface org.kie.internal.definition.rule.InternalRule
      • setRuleFlowGroup

        public void setRuleFlowGroup​(java.lang.String ruleFlowGroup)
      • getDeclaration

        public Declaration getDeclaration​(java.lang.String identifier)
        Retrieve a parameter Declaration by identifier.
        Parameters:
        identifier - The identifier.
        Returns:
        The declaration or null if no declaration matches the identifier.
      • getRequiredDeclarationsForConsequence

        public java.lang.String[] getRequiredDeclarationsForConsequence​(java.lang.String consequenceName)
      • setRequiredDeclarationsForConsequence

        public void setRequiredDeclarationsForConsequence​(java.lang.String consequenceName,
                                                          java.lang.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:
        isLockOnActive in interface org.kie.internal.definition.rule.InternalRule
      • setLockOnActive

        public void setLockOnActive​(boolean lockOnActive)
      • getDeclarations

        public java.util.Map<java.lang.String,​Declaration> getDeclarations()
        Retrieve the set of all root fact object parameter Declarations.
        Returns:
        The Set of Declarations in 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 - The Test to add.
        Throws:
        InvalidRuleException
      • getLhs

        public GroupElement getLhs()
        Retrieve the List of Conditions for this rule.
        Returns:
        The List of Conditions.
      • getTransformedLhs

        public GroupElement[] getTransformedLhs​(LogicTransformer transformer,
                                                java.util.Map<java.lang.String,​java.lang.reflect.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
      • wire

        public void wire​(java.lang.Object object)
        Specified by:
        wire in interface Wireable
      • setConsequence

        public void setConsequence​(Consequence consequence)
        Set the Consequence that is associated with the successful match of this rule.
        Parameters:
        consequence - The Consequence to attach to this Rule.
      • getConsequence

        public Consequence getConsequence()
        Retrieve the Consequence associated with this Rule.
        Returns:
        The Consequence.
      • hasNamedConsequences

        public boolean hasNamedConsequences()
      • getNamedConsequence

        public Consequence getNamedConsequence​(java.lang.String consequenceName)
      • addNamedConsequence

        public void addNamedConsequence​(java.lang.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)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • toRuleNameAndPathString

        public java.lang.String toRuleNameAndPathString()
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • equals

        public boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object
      • 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 java.lang.String[] getCalendars()
      • setCalendars

        public void setCalendars​(java.lang.String[] calendars)
      • setDateEffective

        public void setDateEffective​(java.util.Calendar effectiveDate)
        Sets the date from which this rule takes effect (can include time to the millisecond).
        Parameters:
        effectiveDate -
      • setDateExpires

        public void setDateExpires​(java.util.Calendar expiresDate)
        Sets the date after which the rule will no longer apply (can include time to the millisecond).
        Parameters:
        expiresDate -
      • getDateEffective

        public java.util.Calendar getDateEffective()
        Specified by:
        getDateEffective in interface org.kie.internal.definition.rule.InternalRule
      • getDateExpires

        public java.util.Calendar getDateExpires()
        Specified by:
        getDateExpires in interface org.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()
      • addMetaAttribute

        public void addMetaAttribute​(java.lang.String key,
                                     java.lang.Object value)
      • getActivationListener

        public java.lang.String getActivationListener()
      • setActivationListener

        public void setActivationListener​(java.lang.String activationListener)
      • getMetaData

        public java.util.Map<java.lang.String,​java.lang.Object> getMetaData()
        Specified by:
        getMetaData in interface org.kie.api.definition.rule.Query
        Specified by:
        getMetaData in interface org.kie.api.definition.rule.Rule
      • getMetaData

        public java.lang.Object getMetaData​(java.lang.String name)
      • setParent

        public void setParent​(RuleImpl parent)
      • getParent

        public RuleImpl getParent()
      • addChild

        public void addChild​(RuleImpl child)
      • removeChild

        public void removeChild​(RuleImpl child)
      • getChildren

        public java.util.List<RuleImpl> getChildren()
      • hasChildren

        public boolean hasChildren()
      • isQuery

        public boolean isQuery()
      • getKnowledgeType

        public org.kie.api.definition.KieDefinition.KnowledgeType getKnowledgeType()
        Specified by:
        getKnowledgeType in interface org.kie.api.definition.KieDefinition
      • getNamespace

        public java.lang.String getNamespace()
        Specified by:
        getNamespace in interface org.kie.api.definition.KieDefinition
      • getId

        public java.lang.String getId()
        Specified by:
        getId in interface org.kie.api.definition.KieDefinition
      • getRuleUnitClassName

        public java.lang.String getRuleUnitClassName()
      • setRuleUnitClass

        public void setRuleUnitClass​(java.lang.Class<?> ruleUnit)
      • setRuleUnitClassName

        public void setRuleUnitClassName​(java.lang.String ruleUnitClassName)
      • findEnabledDeclarations

        public Declaration[] findEnabledDeclarations​(java.util.Map<java.lang.String,​Declaration> decls)
      • findSalienceDeclarations

        public Declaration[] findSalienceDeclarations​(java.util.Map<java.lang.String,​Declaration> decls)