<DT><B>All Implemented Interfaces:</B><DD>java.io.Serializable, java.lang.Cloneable, java.lang.Iterable<<AHREF="../../jrummikub/util/Pair.html"title="class in jrummikub.util">Pair</A><E,<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A>>>, <AHREF="../../jrummikub/model/IStoneTray.html"title="interface in jrummikub.model">IStoneTray</A><E></DD>
<DT><B>Direct Known Subclasses:</B><DD><AHREF="../../jrummikub/model/Hand.html"title="class in jrummikub.model">Hand</A>, <AHREF="../../jrummikub/model/Table.html"title="class in jrummikub.model">Table</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>StoneTray<E extends <AHREF="../../jrummikub/model/Sizeable.html"title="interface in jrummikub.model">Sizeable</A>></B><DT>extends java.lang.Object<DT>implements <AHREF="../../jrummikub/model/IStoneTray.html"title="interface in jrummikub.model">IStoneTray</A><E></DL>
</PRE>
<P>
A StoneTray is a collection of positioned objects (for example <AHREF="../../jrummikub/model/Stone.html"title="class in jrummikub.model"><CODE>Stone</CODE></A>s
or <AHREF="../../jrummikub/model/StoneSet.html"title="class in jrummikub.model"><CODE>StoneSet</CODE></A>s.
<CODE>protected java.util.HashMap<<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A>,<AHREF="../../jrummikub/util/Pair.html"title="class in jrummikub.util">Pair</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A>,<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A>>></CODE></FONT></TD>
<CODE> <AHREF="../../jrummikub/model/IStoneTray.html"title="interface in jrummikub.model">IStoneTray</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A>></CODE></FONT></TD>
<TD><CODE><B><AHREF="../../jrummikub/model/StoneTray.html#contains(E)">contains</A></B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object)</CODE>
<BR>
Search for an object within the stone tray</TD>
<TD><CODE><B><AHREF="../../jrummikub/model/StoneTray.html#drop(E, jrummikub.model.Position)">drop</A></B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position)</CODE>
<BR>
Adds object to the tray</TD>
<CODE>protected <AHREF="../../jrummikub/util/Pair.html"title="class in jrummikub.util">Pair</A><<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A>,<AHREF="../../jrummikub/model/StoneTray.Direction.html"title="enum in jrummikub.model">StoneTray.Direction</A>></CODE></FONT></TD>
<TD><CODE><B><AHREF="../../jrummikub/model/StoneTray.html#fixInvalidDrop(E, jrummikub.model.Position, jrummikub.model.StoneTray.Direction)">fixInvalidDrop</A></B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> pos,
<AHREF="../../jrummikub/model/StoneTray.Direction.html"title="enum in jrummikub.model">StoneTray.Direction</A> dir)</CODE>
<BR>
Checks whether the object may be placed on the given position, computes
<CODE>private <AHREF="../../jrummikub/model/StoneTray.Direction.html"title="enum in jrummikub.model">StoneTray.Direction</A></CODE></FONT></TD>
<TD><CODE><B><AHREF="../../jrummikub/model/StoneTray.html#getMoveDirection(E, jrummikub.model.Position, jrummikub.util.Pair)">getMoveDirection</A></B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position,
<AHREF="../../jrummikub/util/Pair.html"title="class in jrummikub.util">Pair</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A>,<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A>> blocking)</CODE>
<BR>
Returns the direction to move the object in</TD>
<TD><CODE><B><AHREF="../../jrummikub/model/StoneTray.html#getMoveOrientation(E, jrummikub.model.Position, jrummikub.util.Pair)">getMoveOrientation</A></B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position,
<AHREF="../../jrummikub/util/Pair.html"title="class in jrummikub.util">Pair</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A>,<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A>> blocking)</CODE>
<BR>
Will the object be moved horizontally or vertically</TD>
<CODE>private <AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A></CODE></FONT></TD>
<TD><CODE><B><AHREF="../../jrummikub/model/StoneTray.html#getNewPosition(E, jrummikub.model.Position, jrummikub.model.StoneTray.Direction, E, jrummikub.model.Position)">getNewPosition</A></B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position,
<AHREF="../../jrummikub/model/StoneTray.Direction.html"title="enum in jrummikub.model">StoneTray.Direction</A> newDirection,
<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> currentObject,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> currentPosition)</CODE>
<CODE> <AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A></CODE></FONT></TD>
<TD><CODE><B><AHREF="../../jrummikub/model/StoneTray.html#getPosition(E)">getPosition</A></B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object)</CODE>
<BR>
Returns the position of an object that is already on the tray</TD>
<CODE> java.util.Iterator<<AHREF="../../jrummikub/util/Pair.html"title="class in jrummikub.util">Pair</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A>,<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A>>></CODE></FONT></TD>
<TD><CODE><B><AHREF="../../jrummikub/model/StoneTray.html#objectsOverlap(E, jrummikub.model.Position, E, jrummikub.model.Position)">objectsOverlap</A></B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object1,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position1,
<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object2,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position2)</CODE>
<BR>
Tests whether two objects overlap</TD>
<TD><CODE><B><AHREF="../../jrummikub/model/StoneTray.html#pickUp(E)">pickUp</A></B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object)</CODE>
<BR>
Tries to pick up (remove) a given object</TD>
protected java.util.HashMap<<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> extends <AHREF="../../jrummikub/model/Sizeable.html"title="interface in jrummikub.model">Sizeable</A>,<AHREF="../../jrummikub/util/Pair.html"title="class in jrummikub.util">Pair</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> extends <AHREF="../../jrummikub/model/Sizeable.html"title="interface in jrummikub.model">Sizeable</A>,<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A>>><B>objects</B></PRE>
public void <B>drop</B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><AHREF="../../jrummikub/model/IStoneTray.html#drop(E, jrummikub.model.Position)">IStoneTray</A></CODE></B></DD>
<DD>Adds object to the tray
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><AHREF="../../jrummikub/model/IStoneTray.html#drop(E, jrummikub.model.Position)">drop</A></CODE> in interface <CODE><AHREF="../../jrummikub/model/IStoneTray.html"title="interface in jrummikub.model">IStoneTray</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> extends <AHREF="../../jrummikub/model/Sizeable.html"title="interface in jrummikub.model">Sizeable</A>></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - object to add to Hand<DD><CODE>position</CODE> - <AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model"><CODE>Position</CODE></A> to put the object</DL>
private void <B>drop</B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position,
<AHREF="../../jrummikub/model/StoneTray.Direction.html"title="enum in jrummikub.model">StoneTray.Direction</A> direction)</PRE>
<DL>
<DD>Subroutine to "drop" to consider and determine the direction the objects
dropped one collides with position-wise evade in
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - the object to add to Hand<DD><CODE>position</CODE> - <AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model"><CODE>Position</CODE></A> to put the object<DD><CODE>direction</CODE> - the direction the other stones evade in</DL>
private void <B>dropUnchecked</B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position,
<AHREF="../../jrummikub/model/StoneTray.Direction.html"title="enum in jrummikub.model">StoneTray.Direction</A> direction)</PRE>
<DL>
<DD>Subroutine to "drop" to execute the actual drop
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - the object to add to Hand<DD><CODE>position</CODE> - <AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model"><CODE>Position</CODE></A> to put the object<DD><CODE>direction</CODE> - the direction the other stones evade in</DL>
</DD>
</DL>
<HR>
<ANAME="getNewPosition(jrummikub.model.Sizeable,jrummikub.model.Position,jrummikub.model.StoneTray.Direction,jrummikub.model.Sizeable,jrummikub.model.Position)"><!----></A><ANAME="getNewPosition(E, jrummikub.model.Position, jrummikub.model.StoneTray.Direction, E, jrummikub.model.Position)"><!----></A><H3>
getNewPosition</H3>
<PRE>
private <AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A><B>getNewPosition</B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position,
<AHREF="../../jrummikub/model/StoneTray.Direction.html"title="enum in jrummikub.model">StoneTray.Direction</A> newDirection,
<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> currentObject,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> currentPosition)</PRE>
protected <AHREF="../../jrummikub/util/Pair.html"title="class in jrummikub.util">Pair</A><<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A>,<AHREF="../../jrummikub/model/StoneTray.Direction.html"title="enum in jrummikub.model">StoneTray.Direction</A>><B>fixInvalidDrop</B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> pos,
<AHREF="../../jrummikub/model/StoneTray.Direction.html"title="enum in jrummikub.model">StoneTray.Direction</A> dir)</PRE>
<DL>
<DD>Checks whether the object may be placed on the given position, computes
new position if not
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - to be dropped<DD><CODE>dir</CODE> - <DD><CODE>pos</CODE> - the object is dropped at
<DT><B>Returns:</B><DD>null if the drop is valid, new position otherwise</DL>
<DD>Static method for determining a less or equal relation considering a
small fuzziness
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>d</CODE> - the value to be less or equal<DD><CODE>e</CODE> - than the other one
<DT><B>Returns:</B><DD>if d is less or equal e</DL>
</DD>
</DL>
<HR>
<ANAME="objectsOverlap(jrummikub.model.Sizeable,jrummikub.model.Position,jrummikub.model.Sizeable,jrummikub.model.Position)"><!----></A><ANAME="objectsOverlap(E, jrummikub.model.Position, E, jrummikub.model.Position)"><!----></A><H3>
objectsOverlap</H3>
<PRE>
private boolean <B>objectsOverlap</B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object1,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position1,
<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object2,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position2)</PRE>
<DL>
<DD>Tests whether two objects overlap
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object1</CODE> - first object<DD><CODE>position1</CODE> - first object's position<DD><CODE>object2</CODE> - second object<DD><CODE>position2</CODE> - second object's position
private <AHREF="../../jrummikub/model/StoneTray.Direction.html"title="enum in jrummikub.model">StoneTray.Direction</A><B>getMoveDirection</B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position,
<AHREF="../../jrummikub/util/Pair.html"title="class in jrummikub.util">Pair</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A>,<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A>> blocking)</PRE>
<DL>
<DD>Returns the direction to move the object in
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - the object<DD><CODE>position</CODE> - the object's position<DD><CODE>blocking</CODE> - the object thats blocking
private boolean <B>getMoveOrientation</B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object,
<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A> position,
<AHREF="../../jrummikub/util/Pair.html"title="class in jrummikub.util">Pair</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A>,<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A>> blocking)</PRE>
<DL>
<DD>Will the object be moved horizontally or vertically
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - the object<DD><CODE>position</CODE> - the objects position<DD><CODE>blocking</CODE> - the object thats blocking
public <AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A><B>getPosition</B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><AHREF="../../jrummikub/model/IStoneTray.html#getPosition(E)">IStoneTray</A></CODE></B></DD>
<DD>Returns the position of an object that is already on the tray
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><AHREF="../../jrummikub/model/IStoneTray.html#getPosition(E)">getPosition</A></CODE> in interface <CODE><AHREF="../../jrummikub/model/IStoneTray.html"title="interface in jrummikub.model">IStoneTray</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> extends <AHREF="../../jrummikub/model/Sizeable.html"title="interface in jrummikub.model">Sizeable</A>></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - object whose position is requested
<DT><B>Returns:</B><DD>position of the object or null when the object is not on the tray</DL>
public boolean <B>contains</B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><AHREF="../../jrummikub/model/IStoneTray.html#contains(E)">IStoneTray</A></CODE></B></DD>
<DD>Search for an object within the stone tray
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><AHREF="../../jrummikub/model/IStoneTray.html#contains(E)">contains</A></CODE> in interface <CODE><AHREF="../../jrummikub/model/IStoneTray.html"title="interface in jrummikub.model">IStoneTray</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> extends <AHREF="../../jrummikub/model/Sizeable.html"title="interface in jrummikub.model">Sizeable</A>></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - object to search for
<DT><B>Returns:</B><DD>object found in stone tray</DL>
public java.util.Iterator<<AHREF="../../jrummikub/util/Pair.html"title="class in jrummikub.util">Pair</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A>,<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A>>><B>iterator</B>()</PRE>
<DL>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE>iterator</CODE> in interface <CODE>java.lang.Iterable<<AHREF="../../jrummikub/util/Pair.html"title="class in jrummikub.util">Pair</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> extends <AHREF="../../jrummikub/model/Sizeable.html"title="interface in jrummikub.model">Sizeable</A>,<AHREF="../../jrummikub/model/Position.html"title="class in jrummikub.model">Position</A>>></CODE></DL>
public boolean <B>pickUp</B>(<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> object)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><AHREF="../../jrummikub/model/IStoneTray.html#pickUp(E)">IStoneTray</A></CODE></B></DD>
<DD>Tries to pick up (remove) a given object
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><AHREF="../../jrummikub/model/IStoneTray.html#pickUp(E)">pickUp</A></CODE> in interface <CODE><AHREF="../../jrummikub/model/IStoneTray.html"title="interface in jrummikub.model">IStoneTray</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> extends <AHREF="../../jrummikub/model/Sizeable.html"title="interface in jrummikub.model">Sizeable</A>></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - object to pick up
<DT><B>Returns:</B><DD>true when the object was successfully removed</DL>
</DD>
</DL>
<HR>
<ANAME="clone()"><!----></A><H3>
clone</H3>
<PRE>
public <AHREF="../../jrummikub/model/IStoneTray.html"title="interface in jrummikub.model">IStoneTray</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A>><B>clone</B>()</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><AHREF="../../jrummikub/model/IStoneTray.html#clone()">IStoneTray</A></CODE></B></DD>
<DD>Create a clone of the StoneTray
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><AHREF="../../jrummikub/model/IStoneTray.html#clone()">clone</A></CODE> in interface <CODE><AHREF="../../jrummikub/model/IStoneTray.html"title="interface in jrummikub.model">IStoneTray</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> extends <AHREF="../../jrummikub/model/Sizeable.html"title="interface in jrummikub.model">Sizeable</A>></CODE><DT><B>Overrides:</B><DD><CODE>clone</CODE> in class <CODE>java.lang.Object</CODE></DL>
</DD>
<DD><DL>
<DT><B>Returns:</B><DD>cloned StoneTray</DL>
</DD>
</DL>
<HR>
<ANAME="getSize()"><!----></A><H3>
getSize</H3>
<PRE>
public int <B>getSize</B>()</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><AHREF="../../jrummikub/model/IStoneTray.html#getSize()">IStoneTray</A></CODE></B></DD>
<DD>Return the number of objects on the tray
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><AHREF="../../jrummikub/model/IStoneTray.html#getSize()">getSize</A></CODE> in interface <CODE><AHREF="../../jrummikub/model/IStoneTray.html"title="interface in jrummikub.model">IStoneTray</A><<AHREF="../../jrummikub/model/StoneTray.html"title="type parameter in StoneTray">E</A> extends <AHREF="../../jrummikub/model/Sizeable.html"title="interface in jrummikub.model">Sizeable</A>></CODE></DL>