package br.ufes.inf.lprm.scene.examples.connectionswitch;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderConfiguration;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
//import org.drools.definition.KnowledgePackage;
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.base.SituationHelper;
//import org.drools.situation.example.model.Person;
import br.ufes.inf.lprm.scene.examples.shared.Device;
import br.ufes.inf.lprm.scene.examples.shared.Network;
import br.ufes.inf.lprm.scene.examples.shared.NetworkType;
/**
* 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 SituationOfSituationMain {
public static final void main(String[] args) {
try {
// load up the knowledge base
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
//KnowledgeRuntimeLoggerFactory.newConsoleLogger(ksession);
// go !
final RuleEngineThread eng = new RuleEngineThread(ksession);
eng.start();
Network wlan = new Network("Enschede", NetworkType.WLAN);
ksession.insert(wlan);
Network bt = new Network("Nemo", NetworkType.BLUETOOTH);
ksession.insert(bt);
Device dev = new Device("Computer01");
FactHandle fh = ksession.insert(dev);
Thread.sleep(1000);
dev.setConnection(wlan);
ksession.update(fh, dev);
Thread.sleep(3000);
dev.setConnection(null);
ksession.update(fh, dev);
Thread.sleep(1000);
dev.setConnection(bt);
ksession.update(fh, dev);
Thread.sleep(3000);
} 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/connectionswitch/SituationRules.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;
}
}