// do not add the activation if the rule is "lock-on-active" and the AgendaGroup is active
// we must check the context to determine if its a new tuple or an exist re-activated tuple as part of the retract
if ( context.getType() == PropagationContext.MODIFICATION ) {
if ( this.rule.isLockOnActive() && agendaGroup.isActive() ) {
Activation justifier = context.removeRetractedTuple( this.rule,
tuple );
if ( justifier == null ) {
// This rule is locked and active, do not allow new tuples to activate
return;
} else if ( this.rule.hasLogicalDependency() ) {
copyLogicalDependencies( context,
workingMemory,
item,
justifier );
}
} else if ( this.rule.hasLogicalDependency() ) {
Activation justifier = context.removeRetractedTuple( this.rule,
tuple );
copyLogicalDependencies( context,
workingMemory,
item,
justifier );
}
} else if ( this.rule.isLockOnActive() && agendaGroup.isActive() ) {
return;
}
agendaGroup.add( item );
} else {
//There is a RuleFlowNode so add it there, instead of the Agenda
RuleFlowGroup rfg = memory.getRuleFlowGroup();
// Lazy cache ruleFlowGroup
if ( rfg == null ) {
rfg = workingMemory.getAgenda().getRuleFlowGroup( this.rule.getRuleFlowGroup() );
memory.setRuleFlowGroup( rfg );
}
// do not add the activation if the rule is "lock-on-active" and the RuleFlowGroup is active
// we must check the context to determine if its a new tuple or an exist re-activated tuple as part of the retract
if ( context.getType() == PropagationContext.MODIFICATION ) {
if ( this.rule.isLockOnActive() && rfg.isActive() ) {
Activation justifier = context.removeRetractedTuple( this.rule,
tuple );
if ( justifier == null ) {
// This rule is locked and active, do not allow new tuples to activate
return;
} else if ( this.rule.hasLogicalDependency() ) {
copyLogicalDependencies( context,
workingMemory,
item,
justifier );
}
} else if ( this.rule.hasLogicalDependency() ) {
Activation justifier = context.removeRetractedTuple( this.rule,
tuple );
copyLogicalDependencies( context,
workingMemory,
item,
justifier );