package org.drools.chance.kbase;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.chance.Chance;
import org.drools.common.DefaultFactHandle;
import org.drools.common.EventFactHandle;
import org.drools.io.impl.ClassPathResource;
import org.drools.runtime.KnowledgeSessionConfiguration;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.conf.ClockTypeOption;
import org.drools.runtime.rule.FactHandle;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
import static junit.framework.Assert.fail;
public class AbstractChanceTest {
public static final String MAP = "map";
protected StatefulKnowledgeSession initBasicChanceTest( String drl ) {
return initBasicChanceTest( new String[] { drl } );
}
protected StatefulKnowledgeSession initBasicChanceTest( String[] drls ) {
KnowledgeBuilder kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(
Chance.getChanceKBuilderConfiguration()
);
for ( String s : drls ) {
kBuilder.add( new ClassPathResource( s ), ResourceType.DRL );
}
if ( kBuilder.hasErrors() ) {
fail( kBuilder.getErrors().toString() );
}
KnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase(
Chance.getChanceKnowledgeBaseConfiguration()
);
kBase.addKnowledgePackages( kBuilder.getKnowledgePackages() );
Map res = new HashMap();
StatefulKnowledgeSession kSession = kBase.newStatefulKnowledgeSession();
kSession.setGlobal( "map", res );
kSession.fireAllRules();
return kSession;
}
protected StatefulKnowledgeSession initTimedChanceTest( String[] drls, boolean useRealTimeClock ) {
KnowledgeBuilder kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( Chance.getChanceKBuilderConfiguration( ) );
for ( String s : drls ) {
kBuilder.add( new ClassPathResource( s ), ResourceType.DRL );
}
if ( kBuilder.hasErrors() ) {
fail( kBuilder.getErrors().toString() );
}
KnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase( Chance.getChanceKnowledgeBaseConfiguration( ) );
kBase.addKnowledgePackages( kBuilder.getKnowledgePackages() );
KnowledgeSessionConfiguration conf = Chance.getChanceKnowledgeSessionConfiguration();
conf.setOption( useRealTimeClock ? ClockTypeOption.get("realtime") : ClockTypeOption.get("pseudo") );
Map res = new HashMap();
StatefulKnowledgeSession kSession = kBase.newStatefulKnowledgeSession( conf, null );
kSession.setGlobal( "map", res );
kSession.fireAllRules();
return kSession;
}
public String reportWMObjects(StatefulKnowledgeSession session) {
PriorityQueue<String> queue = new PriorityQueue<String>();
for (FactHandle fh : session.getFactHandles()) {
Object o;
if (fh instanceof EventFactHandle) {
EventFactHandle efh = (EventFactHandle) fh;
queue.add("\t " + efh.getStartTimestamp() + "\t" + efh.getObject().toString() + "\n");
} else {
o = ((DefaultFactHandle) fh).getObject();
queue.add("\t " + o.toString() + "\n");
}
}
String ans = " ---------------- WM " + session.getObjects().size() + " --------------\n";
while (! queue.isEmpty()) {
Object o = queue.poll();
ans += o;
}
ans += " ---------------- END WM -----------\n";
return ans;
}
}