package br.ufes.inf.lprm.scene.examples.fever; import java.util.Random; import br.ufes.inf.lprm.scene.base.listeners.SCENESessionListener; import org.drools.KnowledgeBase; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderError; import org.drools.builder.KnowledgeBuilderErrors; import org.drools.builder.ResourceType; import org.drools.io.ResourceFactory; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.runtime.rule.FactHandle; import br.ufes.inf.lprm.scene.SituationKnowledgeBaseFactory; import br.ufes.inf.lprm.scene.SituationKnowledgeBuilderFactory; import br.ufes.inf.lprm.scene.examples.shared.Person; /** * This is a sample class to launch a rule. */ class RuleEngineThread extends Thread { private StatefulKnowledgeSession ksession; public RuleEngineThread(StatefulKnowledgeSession ksession) { this.ksession = ksession; } public void run() { this.ksession.fireUntilHalt(); } } public class FeverExampleMain { public static final void main(String[] args) { try { // load up the knowledge base KnowledgeBase kbase = readKnowledgeBase(); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); ksession.addEventListener(new SCENESessionListener()); final RuleEngineThread eng = new RuleEngineThread(ksession); eng.start(); Person p1 = new Person("john", 1); p1.setTemperature(37); FactHandle fh1 = ksession.insert(p1); while (true) { Thread.sleep(1000); p1.setTemperature(38); ksession.update(fh1, p1); Thread.sleep(3000); p1.setTemperature(39); ksession.update(fh1, p1); Thread.sleep(3000); p1.setTemperature(40); ksession.update(fh1, p1); Thread.sleep(3000); p1.setTemperature(38); ksession.update(fh1, p1); Thread.sleep(3000); p1.setTemperature(37); ksession.update(fh1, p1); Thread.sleep(3000); p1.setTemperature(32); ksession.update(fh1, p1); Thread.sleep(3000); p1.setTemperature(31); ksession.update(fh1, p1); } } catch (Throwable t) { t.printStackTrace(); } } private static KnowledgeBase readKnowledgeBase() throws Exception { KnowledgeBuilder kbuilder = SituationKnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("br/ufes/inf/lprm/scene/examples/fever/FeverSituation.drl"), ResourceType.DRL); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if (errors.size() > 0) { for (KnowledgeBuilderError error: errors) { System.err.println(error); } throw new IllegalArgumentException("Could not parse knowledge."); } KnowledgeBase kbase = SituationKnowledgeBaseFactory.newKnowledgeBase(kbuilder); return kbase; } }