All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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