Search in sources :

Example 41 with BetaNodeFieldConstraint

use of org.drools.core.spi.BetaNodeFieldConstraint in project drools by kiegroup.

the class IndexUtil method sortEqualIndexable.

private static boolean sortEqualIndexable(int keyDepth, boolean[] indexable, BetaNodeFieldConstraint[] constraints, int start) {
    boolean hasEqualIndexable = false;
    int indexableCouter = 0;
    for (int i = start; i < constraints.length; i++) {
        if (isEqualIndexable(constraints[i])) {
            hasEqualIndexable = true;
            if (keyDepth > indexableCouter) {
                swap(constraints, i, indexableCouter);
                indexable[indexableCouter++] = true;
            }
        }
    }
    return hasEqualIndexable;
}
Also used : BetaNodeFieldConstraint(org.drools.core.spi.BetaNodeFieldConstraint) Constraint(org.drools.core.spi.Constraint) MvelConstraint(org.drools.core.rule.constraint.MvelConstraint) IndexableConstraint(org.drools.core.rule.IndexableConstraint)

Example 42 with BetaNodeFieldConstraint

use of org.drools.core.spi.BetaNodeFieldConstraint in project drools by kiegroup.

the class PatternBuilder method createConstraints.

private Constraints createConstraints(BuildContext context, Pattern pattern) {
    Constraints constraints = new Constraints();
    // check if cross products for identity patterns should be disabled
    checkRemoveIdentities(context, pattern, constraints.betaConstraints);
    // checks if this pattern is nested inside a NOT CE
    final boolean isNegative = isNegative(context);
    for (Constraint constraint : pattern.getConstraints()) {
        switch(constraint.getType()) {
            case ALPHA:
                linkAlphaConstraint((AlphaNodeFieldConstraint) constraint, constraints.alphaConstraints);
                break;
            case BETA:
                linkBetaConstraint((BetaNodeFieldConstraint) constraint, constraints.betaConstraints);
                if (isNegative && context.getKnowledgeBase().getConfiguration().getEventProcessingMode() == EventProcessingOption.STREAM && pattern.getObjectType().isEvent() && constraint.isTemporal()) {
                    checkDelaying(context, constraint);
                }
                break;
            case XPATH:
                constraints.xpathConstraints.add((XpathConstraint) constraint);
                break;
            default:
                throw new RuntimeException("Unknown constraint type: " + constraint.getType() + ". This is a bug. Please contact development team.");
        }
    }
    return constraints;
}
Also used : InstanceNotEqualsConstraint(org.drools.core.common.InstanceNotEqualsConstraint) BetaNodeFieldConstraint(org.drools.core.spi.BetaNodeFieldConstraint) IntervalProviderConstraint(org.drools.core.rule.IntervalProviderConstraint) XpathConstraint(org.drools.core.rule.constraint.XpathConstraint) AlphaNodeFieldConstraint(org.drools.core.spi.AlphaNodeFieldConstraint) Constraint(org.drools.core.spi.Constraint)

Example 43 with BetaNodeFieldConstraint

use of org.drools.core.spi.BetaNodeFieldConstraint in project drools by kiegroup.

the class AccumulateBuilder method build.

/**
 * @inheritDoc
 */
public void build(final BuildContext context, final BuildUtils utils, final RuleConditionElement rce) {
    final Accumulate accumulate = (Accumulate) rce;
    boolean existSubNetwort = false;
    context.pushRuleComponent(accumulate);
    final List<BetaNodeFieldConstraint> resultBetaConstraints = context.getBetaconstraints();
    final List<AlphaNodeFieldConstraint> resultAlphaConstraints = context.getAlphaConstraints();
    RuleConditionElement source = accumulate.getSource();
    if (source instanceof GroupElement) {
        GroupElement ge = (GroupElement) source;
        if (ge.isAnd() && ge.getChildren().size() == 1) {
            source = ge.getChildren().get(0);
        }
    }
    // get builder for the pattern
    final ReteooComponentBuilder builder = utils.getBuilderFor(source);
    // save tuple source and current pattern offset for later if needed
    LeftTupleSource tupleSource = context.getTupleSource();
    final int currentPatternIndex = context.getCurrentPatternOffset();
    // builds the source pattern
    builder.build(context, utils, source);
    // if object source is null, then we need to adapt tuple source into a subnetwork
    if (context.getObjectSource() == null) {
        // attach right input adapter node to convert tuple source into an object source
        RightInputAdapterNode riaNode = context.getComponentFactory().getNodeFactoryService().buildRightInputNode(context.getNextId(), context.getTupleSource(), tupleSource, context);
        // attach right input adapter node to convert tuple source into an object source
        context.setObjectSource(utils.attachNode(context, riaNode));
        // restore tuple source from before the start of the sub network
        context.setTupleSource(tupleSource);
        // create a tuple start equals constraint and set it in the context
        final TupleStartEqualsConstraint constraint = TupleStartEqualsConstraint.getInstance();
        final List<BetaNodeFieldConstraint> betaConstraints = new ArrayList<BetaNodeFieldConstraint>();
        betaConstraints.add(constraint);
        context.setBetaconstraints(betaConstraints);
        existSubNetwort = true;
    }
    NodeFactory nfactory = context.getComponentFactory().getNodeFactoryService();
    final BetaConstraints resultsBinder = utils.createBetaNodeConstraint(context, resultBetaConstraints, true);
    final BetaConstraints sourceBinder = utils.createBetaNodeConstraint(context, context.getBetaconstraints(), false);
    AccumulateNode accNode = nfactory.buildAccumulateNode(context.getNextId(), context.getTupleSource(), context.getObjectSource(), resultAlphaConstraints.toArray(new AlphaNodeFieldConstraint[resultAlphaConstraints.size()]), sourceBinder, resultsBinder, accumulate, existSubNetwort, context);
    context.setTupleSource(utils.attachNode(context, accNode));
    // source pattern was bound, so nulling context
    context.setObjectSource(null);
    context.setCurrentPatternOffset(currentPatternIndex);
    context.popRuleComponent();
}
Also used : BetaConstraints(org.drools.core.common.BetaConstraints) AccumulateNode(org.drools.core.reteoo.AccumulateNode) GroupElement(org.drools.core.rule.GroupElement) ArrayList(java.util.ArrayList) TupleStartEqualsConstraint(org.drools.core.common.TupleStartEqualsConstraint) RuleConditionElement(org.drools.core.rule.RuleConditionElement) BetaNodeFieldConstraint(org.drools.core.spi.BetaNodeFieldConstraint) AlphaNodeFieldConstraint(org.drools.core.spi.AlphaNodeFieldConstraint) BetaNodeFieldConstraint(org.drools.core.spi.BetaNodeFieldConstraint) TupleStartEqualsConstraint(org.drools.core.common.TupleStartEqualsConstraint) Accumulate(org.drools.core.rule.Accumulate) LeftTupleSource(org.drools.core.reteoo.LeftTupleSource) AlphaNodeFieldConstraint(org.drools.core.spi.AlphaNodeFieldConstraint) RightInputAdapterNode(org.drools.core.reteoo.RightInputAdapterNode)

Aggregations

BetaNodeFieldConstraint (org.drools.core.spi.BetaNodeFieldConstraint)43 Test (org.junit.Test)28 MvelConstraint (org.drools.core.rule.constraint.MvelConstraint)8 IndexableConstraint (org.drools.core.rule.IndexableConstraint)7 Cheese (org.drools.core.test.model.Cheese)6 ArrayList (java.util.ArrayList)5 Constraint (org.drools.core.spi.Constraint)5 BetaConstraints (org.drools.core.common.BetaConstraints)4 MutableTypeConstraint (org.drools.core.rule.MutableTypeConstraint)4 RuleBaseConfiguration (org.drools.core.RuleBaseConfiguration)3 BetaMemory (org.drools.core.reteoo.BetaMemory)3 AlphaNodeFieldConstraint (org.drools.core.spi.AlphaNodeFieldConstraint)3 TupleIndexHashTable (org.drools.core.util.index.TupleIndexHashTable)3 TupleList (org.drools.core.util.index.TupleList)3 List (java.util.List)2 InternalFactHandle (org.drools.core.common.InternalFactHandle)2 SingleBetaConstraints (org.drools.core.common.SingleBetaConstraints)2 TupleStartEqualsConstraint (org.drools.core.common.TupleStartEqualsConstraint)2 InternalKnowledgeBase (org.drools.core.impl.InternalKnowledgeBase)2 AccumulateNode (org.drools.core.reteoo.AccumulateNode)2