Search in sources :

Example 1 with Foo

use of org.drools.mvel.compiler.Foo in project drools by kiegroup.

the class JBRULESTest method testJBRULES3323.

@Test
public void testJBRULES3323() throws Exception {
    // adding rules. it is important to add both since they reciprocate
    final StringBuilder rule = new StringBuilder();
    rule.append("package de.orbitx.accumulatetesettest;\n");
    rule.append("import java.util.Set;\n");
    rule.append("import java.util.HashSet;\n");
    rule.append("import org.drools.mvel.compiler.Foo;\n");
    rule.append("import org.drools.mvel.compiler.Bar;\n");
    rule.append("rule \"Sub optimal foo parallelism - this rule is causing NPE upon reverse\"\n");
    rule.append("when\n");
    rule.append("$foo : Foo($leftId : id, $leftBar : bar != null)\n");
    rule.append("$fooSet : Set()\n");
    rule.append("from accumulate ( Foo(id > $leftId, bar != null && != $leftBar, $bar : bar),\n");
    rule.append("collectSet( $bar ) )\n");
    rule.append("then\n");
    rule.append("//System.out.println(\"ok\");\n");
    rule.append("end\n");
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, rule.toString());
    KieSession ksession = kbase.newKieSession();
    // adding test data
    final Bar[] barList = new Bar[3];
    for (int i = 0; i < barList.length; i++) {
        barList[i] = new Bar(String.valueOf(i));
    }
    final Foo[] fooList = new Foo[4];
    for (int i = 0; i < fooList.length; i++) {
        fooList[i] = new Foo(String.valueOf(i), i == 3 ? barList[2] : barList[i]);
    }
    for (final Foo foo : fooList) {
        ksession.insert(foo);
    }
    // the NPE is caused by exactly this sequence. of course there are more sequences but this
    // appears to be the most short one
    final int[] magicFoos = new int[] { 3, 3, 1, 1, 0, 0, 2, 2, 1, 1, 0, 0, 3, 3, 2, 2, 3, 1, 1 };
    final int[] magicBars = new int[] { 1, 2, 0, 1, 1, 0, 1, 2, 2, 1, 2, 0, 0, 2, 0, 2, 0, 0, 1 };
    // upon final rule firing an NPE will be thrown in org.drools.core.rule.Accumulate
    for (int i = 0; i < magicFoos.length; i++) {
        final Foo tehFoo = fooList[magicFoos[i]];
        final FactHandle fooFactHandle = ksession.getFactHandle(tehFoo);
        tehFoo.setBar(barList[magicBars[i]]);
        ksession.update(fooFactHandle, tehFoo);
        int fired = ksession.fireAllRules();
        // it's fine if it doesn't throw NPE
        assertTrue(fired > 0);
    }
    ksession.dispose();
}
Also used : Bar(org.drools.mvel.compiler.Bar) FactHandle(org.kie.api.runtime.rule.FactHandle) KieBase(org.kie.api.KieBase) Foo(org.drools.mvel.compiler.Foo) KieSession(org.kie.api.runtime.KieSession) Test(org.junit.Test)

Example 2 with Foo

use of org.drools.mvel.compiler.Foo in project drools by kiegroup.

the class ExecutionFlowControlTest method testSalienceExpressionWithOr.

@Test
public void testSalienceExpressionWithOr() throws Exception {
    String text = "package org.kie.test\n" + "global java.util.List list\n" + "import " + FactA.class.getCanonicalName() + "\n" + "import " + Foo.class.getCanonicalName() + "\n" + "import " + Pet.class.getCanonicalName() + "\n" + "rule r1 salience (f1.field2)\n" + "when\n" + "    foo: Foo()\n" + "    ( Pet()  and f1 : FactA( field1 == 'f1') ) or \n" + "    f1 : FactA(field1 == 'f2') \n" + "then\n" + "    list.add( f1 );\n" + "    foo.setId( 'xxx' );\n" + "end\n" + "\n";
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, text);
    KieSession ksession = kbase.newKieSession();
    List list = new ArrayList();
    ksession.setGlobal("list", list);
    ksession.insert(new Foo(null, null));
    ksession.insert(new Pet(null));
    FactA fact1 = new FactA();
    fact1.setField1("f1");
    fact1.setField2(10);
    FactA fact2 = new FactA();
    fact2.setField1("f1");
    fact2.setField2(30);
    FactA fact3 = new FactA();
    fact3.setField1("f2");
    fact3.setField2(20);
    ksession.insert(fact1);
    ksession.insert(fact2);
    ksession.insert(fact3);
    ksession.fireAllRules();
    System.out.println(list);
    assertEquals(3, list.size());
    assertEquals(fact2, list.get(0));
    assertEquals(fact3, list.get(1));
    assertEquals(fact1, list.get(2));
}
Also used : KieBase(org.kie.api.KieBase) Foo(org.drools.mvel.compiler.Foo) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) List(java.util.List) FactA(org.drools.mvel.compiler.FactA) Pet(org.drools.mvel.compiler.Pet) Test(org.junit.Test)

Example 3 with Foo

use of org.drools.mvel.compiler.Foo in project drools by kiegroup.

the class MatchTest method testGetObjectsExists.

@Test
public void testGetObjectsExists() {
    // DROOLS-1474
    String str = "import org.drools.mvel.compiler.Foo\n" + "import org.drools.mvel.compiler.Bar\n" + "global java.util.List list\n" + "rule R when\n" + "  $b : Bar(id == \"roadster\")\n" + "  exists Foo(bar == $b)\n" + "then\n" + "  list.addAll(((org.drools.core.spi.Activation)kcontext.getMatch()).getObjectsDeep());\n" + "end\n";
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, str);
    KieSession ksession = kbase.newKieSession();
    List<Object> list = new ArrayList<>();
    ksession.setGlobal("list", list);
    Bar roadsterType = new Bar("roadster");
    ksession.insert(roadsterType);
    Foo bmwZ4 = new Foo("BMW Z4", roadsterType);
    ksession.insert(bmwZ4);
    Foo lotusElise = new Foo("Lotus Elise", roadsterType);
    ksession.insert(lotusElise);
    Foo mazdaMx5 = new Foo("Mazda MX-5", roadsterType);
    ksession.insert(mazdaMx5);
    Bar miniVanType = new Bar("minivan");
    ksession.insert(miniVanType);
    Foo kiaCarnival = new Foo("Kia Carnival", miniVanType);
    ksession.insert(kiaCarnival);
    Foo renaultEspace = new Foo("Renault Espace", miniVanType);
    ksession.insert(renaultEspace);
    ksession.fireAllRules();
    assertTrue(list.contains(roadsterType));
    assertTrue(list.contains(bmwZ4));
    assertTrue(list.contains(lotusElise));
    assertTrue(list.contains(mazdaMx5));
    assertFalse(list.contains(miniVanType));
    assertFalse(list.contains(kiaCarnival));
    assertFalse(list.contains(renaultEspace));
    ksession.dispose();
}
Also used : Bar(org.drools.mvel.compiler.Bar) KieBase(org.kie.api.KieBase) Foo(org.drools.mvel.compiler.Foo) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Test(org.junit.Test)

Example 4 with Foo

use of org.drools.mvel.compiler.Foo in project drools by kiegroup.

the class MatchTest method testGetObjectsAccumulate.

@Test
public void testGetObjectsAccumulate() {
    // DROOLS-1470
    String str = "import org.drools.mvel.compiler.Foo\n" + "import org.drools.mvel.compiler.Bar\n" + "global java.util.List list\n" + "rule R when\n" + "  $b : Bar(id == \"roadster\")\n" + "  accumulate(\n" + "    $f : Foo(bar == $b);\n" + "    $t : count($f)\n" + "  )\n" + "then\n" + "  list.addAll(((org.drools.core.spi.Activation)kcontext.getMatch()).getObjectsDeep());\n" + "end\n";
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, str);
    KieSession ksession = kbase.newKieSession();
    List<Object> list = new ArrayList<>();
    ksession.setGlobal("list", list);
    Bar roadsterType = new Bar("roadster");
    ksession.insert(roadsterType);
    Foo bmwZ4 = new Foo("BMW Z4", roadsterType);
    ksession.insert(bmwZ4);
    Foo lotusElise = new Foo("Lotus Elise", roadsterType);
    ksession.insert(lotusElise);
    Foo mazdaMx5 = new Foo("Mazda MX-5", roadsterType);
    ksession.insert(mazdaMx5);
    Bar miniVanType = new Bar("minivan");
    ksession.insert(miniVanType);
    Foo kieCarnival = new Foo("Kia Carnival", miniVanType);
    ksession.insert(kieCarnival);
    Foo renaultEspace = new Foo("Renault Espace", miniVanType);
    ksession.insert(renaultEspace);
    ksession.fireAllRules();
    assertTrue(list.contains(roadsterType));
    assertTrue(list.contains(bmwZ4));
    assertTrue(list.contains(lotusElise));
    assertTrue(list.contains(mazdaMx5));
    ksession.dispose();
}
Also used : Bar(org.drools.mvel.compiler.Bar) KieBase(org.kie.api.KieBase) Foo(org.drools.mvel.compiler.Foo) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Test(org.junit.Test)

Example 5 with Foo

use of org.drools.mvel.compiler.Foo in project drools by kiegroup.

the class MatchTest method testGetObjectsAccumulateWithNestedExists.

@Test
public void testGetObjectsAccumulateWithNestedExists() {
    // DROOLS-1474
    String str = "import org.drools.mvel.compiler.Foo\n" + "import org.drools.mvel.compiler.Bar\n" + "global java.util.List list\n" + "rule R when\n" + "  $b1 : Bar(id == \"roadster\")\n" + "  accumulate(\n" + "    $b2 : Bar(this != $b1) and exists Foo(bar == $b2);\n" + "    $t : count($b2)\n" + "  )\n" + "then\n" + "  list.addAll(((org.drools.core.spi.Activation)kcontext.getMatch()).getObjectsDeep());\n" + "end\n";
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, str);
    KieSession ksession = kbase.newKieSession();
    List<Object> list = new ArrayList<>();
    ksession.setGlobal("list", list);
    Bar roadsterType = new Bar("roadster");
    ksession.insert(roadsterType);
    Foo bmwZ4 = new Foo("BMW Z4", roadsterType);
    ksession.insert(bmwZ4);
    Foo lotusElise = new Foo("Lotus Elise", roadsterType);
    ksession.insert(lotusElise);
    Foo mazdaMx5 = new Foo("Mazda MX-5", roadsterType);
    ksession.insert(mazdaMx5);
    Bar miniVanType = new Bar("minivan");
    ksession.insert(miniVanType);
    Foo kiaCarnival = new Foo("Kia Carnival", miniVanType);
    ksession.insert(kiaCarnival);
    Foo renaultEspace = new Foo("Renault Espace", miniVanType);
    ksession.insert(renaultEspace);
    ksession.fireAllRules();
    assertTrue(list.contains(roadsterType));
    assertFalse(list.contains(bmwZ4));
    assertFalse(list.contains(lotusElise));
    assertFalse(list.contains(mazdaMx5));
    assertTrue(list.contains(miniVanType));
    assertTrue(list.contains(kiaCarnival));
    assertTrue(list.contains(renaultEspace));
    ksession.dispose();
}
Also used : Bar(org.drools.mvel.compiler.Bar) KieBase(org.kie.api.KieBase) Foo(org.drools.mvel.compiler.Foo) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Test(org.junit.Test)

Aggregations

Foo (org.drools.mvel.compiler.Foo)8 Test (org.junit.Test)8 KieBase (org.kie.api.KieBase)8 KieSession (org.kie.api.runtime.KieSession)8 ArrayList (java.util.ArrayList)7 Bar (org.drools.mvel.compiler.Bar)6 List (java.util.List)2 FactA (org.drools.mvel.compiler.FactA)2 Pet (org.drools.mvel.compiler.Pet)2 FactHandle (org.kie.api.runtime.rule.FactHandle)1