
jadex.bdi.examples.blocksworld.Table Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jadex-applications-bdi Show documentation
Show all versions of jadex-applications-bdi Show documentation
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.commons.SUtil;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* A table in the blocks-world.
* In contrast to a block, a table may have multiple blocks on top.
*/
public class Table extends Block
{
//-------- attributes --------
/** The name of the table. */
protected String name;
/** The blocks located on top of the table. */
protected List blocks;
/** The target configuration (if any). */
protected Table target;
// /** The block listener (if any). */
// protected PropertyChangeListener listener;
/** The old solution state. */
protected boolean solution;
//-------- constructors --------
/**
* Create a new table.
*/
public Table()
{
this("Table", new Color(64, 32, 32));
}
/**
* Create a new table.
* /
public Table(Table target)
{
this();
this.target = target;
if(target!=null)
{
this.solution = configurationEquals(target);
listener = new PropertyChangeListener()
{
public void propertyChange(PropertyChangeEvent evt)
{
boolean oldsolution = solution;
solution = configurationEquals(Table.this.target);
pcs.firePropertyChange("solution", oldsolution, solution);
}
};
}
}*/
/**
* Create a new table.
* @param name The name of the table.
* @param color The color of the table.
*/
public Table(String name, Color color)
{
super(-1, color, null);
this.name = name;
this.blocks = new ArrayList();
}
//-------- methods --------
/**
* The table is always clear.
*/
public boolean isClear()
{
return true;
}
/**
* Create a string representation of this block.
*/
public String toString()
{
return name;
}
/**
* Get all blocks on the table.
* Also returns blocks which are located on other blocks on the table.
*/
public Block[] getAllBlocks()
{
List ret = new ArrayList(blocks);
for(int i=0; i=0; i--)
all[i].stackOn(null);
}
/**
* Check if two configurations are equal.
*/
public boolean configurationEquals(Table table)
{
boolean ret = false;
if(blocks.size()==table.blocks.size())
{
// Iterate through base blocks.
ret = true;
for(Iterator i=blocks.iterator(); ret && i.hasNext(); )
{
Block block = (Block)i.next();
int index = table.blocks.indexOf(block);
if(index!=-1)
{
// Traverse and compare corresponding stacks.
Block block2 = (Block)table.blocks.get(index);
while((block!=null || block2!=null)
&& (ret=SUtil.equals(block, block2)))
{
block = block.upper;
block2 = block2.upper;
}
}
else
{
ret = false;
}
}
}
return ret;
}
/**
* Add a block to this block.
*/
protected void addBlock(Block block)
{
blocks.add(block);
// if(listener!=null)
// block.addPropertyChangeListener(listener);
this.pcs.firePropertyChange("allBlocks", null, block);
}
/**
* Remove a block from this block.
*/
protected void removeBlock(Block block)
{
blocks.remove(block);
// if(listener!=null)
// block.removePropertyChangeListener(listener);
this.pcs.firePropertyChange("allBlocks", block, null);
}
/**
* Check for equality.
* /
public boolean equals(Object o)
{
return o instanceof Table && configurationEquals((Table)o);
}*/
/**
* Check for equality.
* /
public boolean isSolution()
{
return solution;
}*/
/**
* Get the hash code.
* /
public int hashCode()
{
int ret = 1;
List allblocks = new ArrayList(blocks);
for(int i=0; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy