/* (non-Javadoc) * @see org.kie.reteoo.builder.ReteooComponentBuilder#build(org.kie.reteoo.builder.BuildContext, org.kie.reteoo.builder.BuildUtils, org.kie.rule.RuleConditionElement) */ public void build( final BuildContext context, final BuildUtils utils, final RuleConditionElement rce) { final From from = (From) rce; context.pushRuleComponent(from); @SuppressWarnings("unchecked") BetaConstraints betaConstraints = utils.createBetaNodeConstraint( context, (List<BetaNodeFieldConstraint>) context.getBetaconstraints(), true); context.setTupleSource( (LeftTupleSource) utils.attachNode( context, context .getComponentFactory() .getNodeFactoryService() .buildFromNode( context.getNextId(), from.getDataProvider(), context.getTupleSource(), context .getAlphaConstraints() .toArray( new AlphaNodeFieldConstraint[context.getAlphaConstraints().size()]), betaConstraints, context.isTupleMemoryEnabled(), context, from))); context.setAlphaConstraints(null); context.setBetaconstraints(null); context.popRuleComponent(); }
static RuleTerminalNode buildTerminalNodeForNamedConsequence( BuildContext context, NamedConsequence namedConsequence) { RuleImpl rule = context.getRule(); GroupElement subrule = (GroupElement) context.peek(); ActivationListenerFactory factory = context .getKnowledgeBase() .getConfiguration() .getActivationListenerFactory(rule.getActivationListener()); context.setConsequenceName(namedConsequence.getConsequenceName()); TerminalNode terminal = factory.createActivationListener( context.getNextId(), context.getTupleSource(), rule, subrule, 0, // subruleIndex, context); context.setConsequenceName(null); return (RuleTerminalNode) terminal; }
public void build(BuildContext context, BuildUtils utils, RuleConditionElement rce) { NamedConsequence namedConsequence = (NamedConsequence) rce; Timer timer = context.getRule().getTimer(); if (timer != null) { ReteooComponentBuilder builder = utils.getBuilderFor(Timer.class); builder.build(context, utils, context.getRule().getTimer()); } RuleTerminalNode terminalNode = buildTerminalNodeForNamedConsequence(context, namedConsequence); terminalNode.attach(context); terminalNode.networkUpdated(new UpdateContext()); // adds the terminal node to the list of nodes created/added by this sub-rule context.getNodes().add(terminalNode); if (timer != null) { context.setTupleSource(context.getTupleSource().getLeftTupleSource()); } context.setTerminated(namedConsequence.isTerminal()); }