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

jadex.bdi.examples.blocksworld.StackBlocksPlan Maven / Gradle / Ivy

Go to download

The Jadex BDI applications package contain several example applications, benchmarks and testcases using BDI agents.

The newest version!
package jadex.bdi.examples.blocksworld;

import jadex.bdi.runtime.IGoal;
import jadex.bdi.runtime.Plan;


/**
 *  Stack a block on top of another.
 */
public class StackBlocksPlan	extends Plan
{
	//-------- constants --------

	/** The normal execution mode. */
	public static final String	MODE_NORMAL	= "Normal";

	/** The slow execution mode. */
	public static final String	MODE_SLOW	= "Slow";

	/** The step execution mode. */
	public static final String	MODE_STEP	= "Step";

	//-------- attributes --------

	/** The block to be moved. */
	protected Block	block;

	/** The block on to which to put the other block. */
	protected Block	target;

	/** The execution mode. */
	protected String	mode;

	/** The quiet flag (do not printout messages). */
	protected boolean	quiet;

	//-------- constructors --------

	/**
	 *  Create a new plan.
	 */
	public StackBlocksPlan()
	{
		this.block	= (Block)getParameter("block").getValue();
		this.target	= (Block)getParameter("target").getValue();
		this.mode	= (String)getBeliefbase().getBelief("mode").getFact();
		this.quiet	= ((Boolean)getBeliefbase().getBelief("quiet").getFact()).booleanValue();
	}

	//-------- methods --------

	/**
	 *  The plan body.
	 */
	public void body()
	{
		// Clear blocks.
		IGoal clear = createGoal("clear");
		clear.getParameter("block").setValue(block);
		dispatchSubgoalAndWait(clear);

		clear = createGoal("clear");
		clear.getParameter("block").setValue(target);
		dispatchSubgoalAndWait(clear);

		// Maybe wait before moving block.
		if(mode.equals(MODE_SLOW))
		{
			waitFor(1000);
		}
		else if(mode.equals(MODE_STEP))
		{
			waitForInternalEvent("step");
		}

		// Now move block.
		if(!quiet)
			System.out.println("Moving '"+block+"' to '"+target+"'");

		// This operation has to be performed atomic,
		// because it fires bean changes on several affected blocks. 
		startAtomic();
		block.stackOn(target);
		endAtomic();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy