Пример #1
0
  /* (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();
  }
Пример #2
0
  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;
  }
Пример #3
0
  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());
  }