Search in sources :

Example 1 with Sensor

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

the class TruthMaintenanceTest method testLogicalInsertions3.

@Test(timeout = 10000)
public void testLogicalInsertions3() throws Exception {
    KieBase kbase = loadKnowledgeBase("test_logicalInsertions3.drl");
    KieSession ksession = kbase.newKieSession();
    try {
        final List list = new ArrayList();
        ksession.setGlobal("events", list);
        // asserting the sensor object
        final Sensor sensor = new Sensor(150, 100);
        FactHandle sensorHandle = ksession.insert(sensor);
        ksession.fireAllRules();
        ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
        // alarm must sound
        assertEquals(2, list.size());
        assertEquals(2, ksession.getObjects().size());
        // modifying sensor
        sensor.setTemperature(125);
        sensorHandle = getFactHandle(sensorHandle, ksession);
        ksession.update(sensorHandle, sensor);
        ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
        ksession.fireAllRules();
        ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
        // alarm must continue to sound
        assertEquals(3, list.size());
        assertEquals(2, ksession.getObjects().size());
        // modifying sensor
        sensor.setTemperature(80);
        sensorHandle = getFactHandle(sensorHandle, ksession);
        ksession.update(sensorHandle, sensor);
        ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
        ksession.fireAllRules();
        // no alarms anymore
        assertEquals(3, list.size());
        assertEquals(1, ksession.getObjects().size());
    } finally {
        ksession.dispose();
    }
}
Also used : InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) List(java.util.List) Sensor(org.drools.mvel.compiler.Sensor) Test(org.junit.Test)

Example 2 with Sensor

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

the class TruthMaintenanceTest method testLogicalInsertionsModifySameRuleGivesDifferentLogicalInsertion.

@Test(timeout = 10000)
public void testLogicalInsertionsModifySameRuleGivesDifferentLogicalInsertion() throws Exception {
    // TODO JBRULES-1804
    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    kbuilder.add(ResourceFactory.newClassPathResource("test_LogicalInsertionsModifySameRuleGivesDifferentLogicalInsertion.drl", getClass()), ResourceType.DRL);
    Collection<KiePackage> pkgs = kbuilder.getKnowledgePackages();
    InternalKnowledgeBase kbase = (InternalKnowledgeBase) getKnowledgeBase();
    kbase.addPackages(pkgs);
    KieSession session = createKnowledgeSession(kbase);
    try {
        Sensor sensor1 = new Sensor(100, 0);
        FactHandle sensor1Handle = session.insert(sensor1);
        Sensor sensor2 = new Sensor(200, 0);
        FactHandle sensor2Handle = session.insert(sensor2);
        Sensor sensor3 = new Sensor(200, 0);
        FactHandle sensor3Handle = session.insert(sensor3);
        session.fireAllRules();
        session = getSerialisedStatefulKnowledgeSession(session, true);
        List temperatureList = new ArrayList(session.getObjects(new ClassObjectFilter(Integer.class)));
        assertTrue(temperatureList.contains(Integer.valueOf(100)));
        assertTrue(temperatureList.contains(Integer.valueOf(200)));
        assertEquals(2, temperatureList.size());
        sensor1.setTemperature(150);
        sensor1Handle = getFactHandle(sensor1Handle, session);
        session.update(sensor1Handle, sensor1);
        session = getSerialisedStatefulKnowledgeSession(session, true);
        session.fireAllRules();
        temperatureList = new ArrayList(session.getObjects(new ClassObjectFilter(Integer.class)));
        assertFalse(temperatureList.contains(Integer.valueOf(100)));
        assertTrue(temperatureList.contains(Integer.valueOf(150)));
        assertTrue(temperatureList.contains(Integer.valueOf(200)));
        assertEquals(2, temperatureList.size());
    } finally {
        session.dispose();
    }
}
Also used : KnowledgeBuilder(org.kie.internal.builder.KnowledgeBuilder) ClassObjectFilter(org.drools.core.ClassObjectFilter) KiePackage(org.kie.api.definition.KiePackage) InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) List(java.util.List) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) Sensor(org.drools.mvel.compiler.Sensor) Test(org.junit.Test)

Example 3 with Sensor

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

the class TruthMaintenanceTest method testLogicalInsertions2.

@Test(timeout = 10000)
public void testLogicalInsertions2() throws Exception {
    KieBase kbase = loadKnowledgeBase("test_LogicalInsertions2.drl");
    KieSession ksession = kbase.newKieSession();
    try {
        final List events = new ArrayList();
        ksession.setGlobal("events", events);
        final Sensor sensor = new Sensor(80, 80);
        FactHandle handle = ksession.insert(sensor);
        // everything should be normal
        ksession = getSerialisedStatefulKnowledgeSession(ksession, false);
        ksession.fireAllRules();
        Collection list = ksession.getObjects();
        assertEquals("Only sensor is there", 1, list.size());
        assertEquals("Only one event", 1, events.size());
        // problems should be detected
        sensor.setPressure(200);
        sensor.setTemperature(200);
        handle = getFactHandle(handle, ksession);
        ksession.update(handle, sensor);
        ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
        ksession.fireAllRules();
        list = ksession.getObjects();
        assertEquals("Only sensor is there", 1, list.size());
        TruthMaintenanceSystem tms = TruthMaintenanceSystemFactory.get().getOrCreateTruthMaintenanceSystem((ReteEvaluator) ksession);
        assertTrue(tms.getEqualityKeyMap().isEmpty());
    } finally {
        ksession.dispose();
    }
}
Also used : TruthMaintenanceSystem(org.drools.core.common.TruthMaintenanceSystem) InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) Collection(java.util.Collection) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) List(java.util.List) Sensor(org.drools.mvel.compiler.Sensor) Test(org.junit.Test)

Aggregations

ArrayList (java.util.ArrayList)3 List (java.util.List)3 InternalFactHandle (org.drools.core.common.InternalFactHandle)3 Sensor (org.drools.mvel.compiler.Sensor)3 Test (org.junit.Test)3 KieSession (org.kie.api.runtime.KieSession)3 FactHandle (org.kie.api.runtime.rule.FactHandle)3 KieBase (org.kie.api.KieBase)2 Collection (java.util.Collection)1 ClassObjectFilter (org.drools.core.ClassObjectFilter)1 TruthMaintenanceSystem (org.drools.core.common.TruthMaintenanceSystem)1 InternalKnowledgeBase (org.drools.kiesession.rulebase.InternalKnowledgeBase)1 KiePackage (org.kie.api.definition.KiePackage)1 KnowledgeBuilder (org.kie.internal.builder.KnowledgeBuilder)1