
jadex.rules.rulesystem.RuleSystemExecutor Maven / Gradle / Ivy
package jadex.rules.rulesystem;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import jadex.commons.ICommand;
import jadex.commons.ISteppable;
import jadex.commons.concurrent.Executor;
import jadex.commons.concurrent.IExecutable;
import jadex.commons.concurrent.IThreadPool;
import jadex.commons.concurrent.ThreadPoolFactory;
/**
* A rule system executor can execute rule systems on a separate thread.
*/
public class RuleSystemExecutor implements ISteppable
{
//-------- attributes --------
/** The stepmode flag. */
protected boolean stepmode;
/** Flag indicating that a single step should be performed. */
protected boolean dostep;
/** The agenda. */
protected RuleSystem rulesystem;
/** The executor. */
protected Executor executor;
/** The breakpoints (i.e. rules that set the interpreter to step mode, when activated). */
protected Set breakpoints;
/** The breakpoint commands. */
protected ICommand[] breakpointcommands;
//-------- constructors --------
/**
* Executor for rule systems.
*/
public RuleSystemExecutor(final RuleSystem rulesystem, boolean stepmode)
{
this(rulesystem, stepmode, null);
}
/**
* Executor for rule systems.
*/
public RuleSystemExecutor(final RuleSystem rulesystem, boolean stepmode, IThreadPool threadpool)
{
this.rulesystem = rulesystem;
this.executor = new Executor(threadpool!=null? threadpool: ThreadPoolFactory.createThreadPool(),
new IExecutable()
{
public boolean execute()
{
// Check for breakpoints, if any.
if(breakpoints!=null)
{
Iterator it = rulesystem.getAgenda().getActivations().iterator();
while(it.hasNext())
{
IRule rule = ((Activation)it.next()).getRule();
if(breakpoints.contains(rule.getName()))
{
setStepmode(true);
// Notify listeners
if(breakpointcommands!=null)
{
for(int i=0; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy