Search in sources :

Example 96 with Pattern

use of org.drools.core.rule.Pattern in project drools by kiegroup.

the class KnowledgeBuilderTest method testPredicateMethodCompare.

@Test
public void testPredicateMethodCompare() {
    final KnowledgeBuilderImpl builder1 = new KnowledgeBuilderImpl();
    final PackageDescr packageDescr1 = new PackageDescr("package1");
    createPredicateRule(packageDescr1, "eval(x==y)");
    builder1.addPackage(packageDescr1);
    if (builder1.hasErrors()) {
        fail(builder1.getErrors().toString());
    }
    final Pattern pattern1 = (Pattern) ((RuleImpl) builder1.getPackage("package1").getRules().iterator().next()).getLhs().getChildren().get(0);
    final PredicateConstraint predicate1 = (PredicateConstraint) pattern1.getConstraints().get(0);
    final KnowledgeBuilderImpl builder2 = new KnowledgeBuilderImpl();
    final PackageDescr packageDescr2 = new PackageDescr("package2");
    createPredicateRule(packageDescr2, "eval(x==y)");
    builder2.addPackage(packageDescr2);
    if (builder2.hasErrors()) {
        fail(builder2.getErrors().toString());
    }
    final Pattern pattern2 = (Pattern) ((RuleImpl) builder2.getPackage("package2").getRules().iterator().next()).getLhs().getChildren().get(0);
    final PredicateConstraint predicate2 = (PredicateConstraint) pattern2.getConstraints().get(0);
    final KnowledgeBuilderImpl builder3 = new KnowledgeBuilderImpl();
    if (builder3.hasErrors()) {
        fail(builder3.getErrors().toString());
    }
    final PackageDescr packageDescr3 = new PackageDescr("package3");
    createPredicateRule(packageDescr3, "eval(x!=y)");
    builder3.addPackage(packageDescr3);
    final Pattern pattern3 = (Pattern) ((RuleImpl) builder3.getPackage("package3").getRules().iterator().next()).getLhs().getChildren().get(0);
    final PredicateConstraint predicate3 = (PredicateConstraint) pattern3.getConstraints().get(0);
    assertEquals(predicate1, predicate2);
    assertFalse(predicate1.equals(predicate3));
    assertFalse(predicate2.equals(predicate3));
}
Also used : Pattern(org.drools.core.rule.Pattern) PredicateConstraint(org.drools.core.rule.PredicateConstraint) PackageDescr(org.drools.compiler.lang.descr.PackageDescr) CompositeObjectSinkAdapterTest(org.drools.core.reteoo.CompositeObjectSinkAdapterTest) Test(org.junit.Test)

Example 97 with Pattern

use of org.drools.core.rule.Pattern in project drools by kiegroup.

the class KiePackagesBuilder method populateLHS.

private void populateLHS(RuleContext ctx, KnowledgePackageImpl pkg, View view) {
    GroupElement lhs = ctx.getRule().getLhs();
    if (ctx.getRule().getRuleUnitClassName() != null) {
        lhs.addChild(addPatternForVariable(ctx, lhs, getUnitVariable(ctx, pkg, view)));
    }
    addSubConditions(ctx, lhs, view.getSubConditions());
    if (requiresLeftActivation(lhs)) {
        lhs.addChild(0, new Pattern(0, ClassObjectType.InitialFact_ObjectType));
    }
}
Also used : QueryCallPattern(org.drools.model.patterns.QueryCallPattern) AccumulatePattern(org.drools.model.AccumulatePattern) Pattern(org.drools.core.rule.Pattern) GroupElement(org.drools.core.rule.GroupElement)

Example 98 with Pattern

use of org.drools.core.rule.Pattern in project drools by kiegroup.

the class RightTupleIndexHashTableIteratorTest method getConstraint.

protected BetaNodeFieldConstraint getConstraint(String identifier, Operator operator, String fieldName, Class clazz) {
    ClassFieldAccessorStore store = new ClassFieldAccessorStore();
    store.setClassFieldAccessorCache(new ClassFieldAccessorCache(Thread.currentThread().getContextClassLoader()));
    store.setEagerWire(true);
    InternalReadAccessor extractor = store.getReader(clazz, fieldName);
    Declaration declaration = new Declaration(identifier, extractor, new Pattern(0, new ClassObjectType(clazz)));
    String expression = fieldName + " " + operator.getOperatorString() + " " + declaration.getIdentifier();
    return new MvelConstraintTestUtil(expression, declaration, extractor);
}
Also used : ClassFieldAccessorCache(org.drools.core.base.ClassFieldAccessorCache) Pattern(org.drools.core.rule.Pattern) ClassObjectType(org.drools.core.base.ClassObjectType) InternalReadAccessor(org.drools.core.spi.InternalReadAccessor) ClassFieldAccessorStore(org.drools.core.base.ClassFieldAccessorStore) Declaration(org.drools.core.rule.Declaration) MvelConstraintTestUtil(org.drools.core.rule.MvelConstraintTestUtil)

Example 99 with Pattern

use of org.drools.core.rule.Pattern in project drools by kiegroup.

the class RightTupleIndexHashTableTest method testResize.

@Test
public void testResize() throws Exception {
    final InternalReadAccessor extractor = store.getReader(Cheese.class, "type");
    final Pattern pattern = new Pattern(0, new ClassObjectType(Cheese.class));
    final Declaration declaration = new Declaration("typeOfCheese", extractor, pattern);
    final FieldIndex fieldIndex = new FieldIndex(extractor, declaration, MvelConstraint.INDEX_EVALUATOR);
    final TupleIndexHashTable map = new TupleIndexHashTable(16, 0.75f, new FieldIndex[] { fieldIndex }, false);
    assertEquals(0, map.size());
    final Cheese stilton1 = new Cheese("stilton", 35);
    map.add(newRightTuple(1, stilton1));
    final Cheese stilton2 = new Cheese("stilton", 81);
    map.add(newRightTuple(2, stilton2));
    final Cheese cheddar1 = new Cheese("cheddar", 35);
    map.add(newRightTuple(3, cheddar1));
    final Cheese cheddar2 = new Cheese("cheddar", 38);
    map.add(newRightTuple(4, cheddar2));
    final Cheese brie = new Cheese("brie", 293);
    map.add(newRightTuple(5, brie));
    final Cheese mozerella = new Cheese("mozerella", 15);
    map.add(newRightTuple(6, mozerella));
    final Cheese dolcelatte = new Cheese("dolcelatte", 284);
    map.add(newRightTuple(7, dolcelatte));
    final Cheese camembert1 = new Cheese("camembert", 924);
    map.add(newRightTuple(8, camembert1));
    final Cheese camembert2 = new Cheese("camembert", 765);
    map.add(newRightTuple(9, camembert2));
    final Cheese redLeicestor = new Cheese("red leicestor", 23);
    map.add(newRightTuple(10, redLeicestor));
    final Cheese wensleydale = new Cheese("wensleydale", 20);
    map.add(newRightTuple(11, wensleydale));
    final Cheese edam = new Cheese("edam", 12);
    map.add(newRightTuple(12, edam));
    final Cheese goude1 = new Cheese("goude", 93);
    map.add(newRightTuple(13, goude1));
    final Cheese goude2 = new Cheese("goude", 88);
    map.add(newRightTuple(14, goude2));
    final Cheese gruyere = new Cheese("gruyere", 82);
    map.add(newRightTuple(15, gruyere));
    final Cheese emmental = new Cheese("emmental", 98);
    map.add(newRightTuple(16, emmental));
    // At this point we have 16 facts but only 12 different types of cheeses
    // so no table resize and thus its size is 16
    assertEquals(16, map.size());
    Entry[] table = map.getTable();
    assertEquals(16, table.length);
    final Cheese feta = new Cheese("feta", 48);
    map.add(newRightTuple(2, feta));
    // This adds our 13th type of cheese. The map is set with an initial capacity of 16 and
    // a threshold of 75%, that after 12 it should resize the map to 32.
    assertEquals(17, map.size());
    table = map.getTable();
    assertEquals(32, table.length);
    final Cheese haloumi = new Cheese("haloumi", 48);
    map.add(newRightTuple(2, haloumi));
    final Cheese chevre = new Cheese("chevre", 48);
    map.add(newRightTuple(2, chevre));
}
Also used : Pattern(org.drools.core.rule.Pattern) FieldIndex(org.drools.core.util.AbstractHashTable.FieldIndex) ClassObjectType(org.drools.core.base.ClassObjectType) InternalReadAccessor(org.drools.core.spi.InternalReadAccessor) Cheese(org.drools.core.test.model.Cheese) Declaration(org.drools.core.rule.Declaration) TupleIndexHashTable(org.drools.core.util.index.TupleIndexHashTable) Test(org.junit.Test)

Example 100 with Pattern

use of org.drools.core.rule.Pattern in project drools by kiegroup.

the class RightTupleIndexHashTableTest method testRemove.

@Test
public void testRemove() throws Exception {
    final InternalReadAccessor extractor = store.getReader(Cheese.class, "type");
    final Pattern pattern = new Pattern(0, new ClassObjectType(Cheese.class));
    final Declaration declaration = new Declaration("typeOfCheese", extractor, pattern);
    final FieldIndex fieldIndex = new FieldIndex(extractor, declaration, MvelConstraint.INDEX_EVALUATOR);
    final TupleIndexHashTable map = new TupleIndexHashTable(new FieldIndex[] { fieldIndex }, false);
    assertEquals(0, map.size());
    final Cheese stilton1 = new Cheese("stilton", 35);
    final InternalFactHandle stiltonHandle1 = new DefaultFactHandle(1, stilton1);
    RightTuple stiltonRightTuple1 = new RightTupleImpl(stiltonHandle1, null);
    map.add(stiltonRightTuple1);
    final Cheese cheddar1 = new Cheese("cheddar", 35);
    final InternalFactHandle cheddarHandle1 = new DefaultFactHandle(2, cheddar1);
    RightTuple cheddarRightTuple1 = new RightTupleImpl(cheddarHandle1, null);
    map.add(cheddarRightTuple1);
    final Cheese stilton2 = new Cheese("stilton", 81);
    final InternalFactHandle stiltonHandle2 = new DefaultFactHandle(3, stilton2);
    RightTuple stiltonRightTuple2 = new RightTupleImpl(stiltonHandle2, null);
    map.add(stiltonRightTuple2);
    assertEquals(3, map.size());
    assertEquals(2, tablePopulationSize(map));
    // cheddar is in its own bucket, which should be removed once empty. We cannot have
    // empty FieldIndexEntries in the Map, as they get their value  from the first FactEntry.
    map.remove(cheddarRightTuple1);
    assertEquals(2, map.size());
    assertEquals(1, tablePopulationSize(map));
    // We remove t he stiltonHandle2, but there is still  one more stilton, so size  should be the same
    map.remove(stiltonRightTuple2);
    assertEquals(1, map.size());
    assertEquals(1, tablePopulationSize(map));
    // No more stiltons, so the table should be empty
    map.remove(stiltonRightTuple1);
    assertEquals(0, map.size());
    assertEquals(0, tablePopulationSize(map));
}
Also used : Pattern(org.drools.core.rule.Pattern) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) FieldIndex(org.drools.core.util.AbstractHashTable.FieldIndex) ClassObjectType(org.drools.core.base.ClassObjectType) InternalReadAccessor(org.drools.core.spi.InternalReadAccessor) Cheese(org.drools.core.test.model.Cheese) Declaration(org.drools.core.rule.Declaration) RightTupleImpl(org.drools.core.reteoo.RightTupleImpl) TupleIndexHashTable(org.drools.core.util.index.TupleIndexHashTable) InternalFactHandle(org.drools.core.common.InternalFactHandle) RightTuple(org.drools.core.reteoo.RightTuple) Test(org.junit.Test)

Aggregations

Pattern (org.drools.core.rule.Pattern)190 ClassObjectType (org.drools.core.base.ClassObjectType)103 Test (org.junit.Test)98 Declaration (org.drools.core.rule.Declaration)79 RuleImpl (org.drools.core.definitions.rule.impl.RuleImpl)69 GroupElement (org.drools.core.rule.GroupElement)49 InternalReadAccessor (org.drools.core.spi.InternalReadAccessor)45 ArrayList (java.util.ArrayList)35 IOException (java.io.IOException)33 ObjectType (org.drools.core.spi.ObjectType)32 KnowledgeBuilderImpl (org.drools.compiler.builder.impl.KnowledgeBuilderImpl)28 Variable (org.drools.model.Variable)25 LambdaConstraint (org.drools.modelcompiler.constraints.LambdaConstraint)25 List (java.util.List)24 Accumulate (org.drools.core.rule.Accumulate)24 InternalKnowledgePackage (org.drools.core.definitions.InternalKnowledgePackage)23 KieBase (org.kie.api.KieBase)23 Collection (java.util.Collection)21 QueryImpl (org.drools.core.rule.QueryImpl)21 KieSession (org.kie.api.runtime.KieSession)21