package org.ggp.base.util.statemachine; import java.io.Serializable; import org.ggp.base.util.gdl.factory.GdlFactory; import org.ggp.base.util.gdl.grammar.GdlTerm; import org.ggp.base.util.symbol.factory.exceptions.SymbolFormatException; /** * A Move represents a possible move that can be made by a role. Each * player makes exactly one move on every turn. This includes moves * that represent passing, or taking no action. * <p> * Note that Move objects are not intrinsically tied to a role. They * only express the action itself. */ @SuppressWarnings("serial") public class Move implements Serializable { protected final GdlTerm contents; public Move(GdlTerm contents) { this.contents = contents; } public static Move create(String contents) { try { return new Move(GdlFactory.createTerm(contents)); } catch (SymbolFormatException e) { throw new IllegalArgumentException("Could not parse as move: " + contents, e); } } @Override public boolean equals(Object o) { if ((o != null) && (o instanceof Move)) { Move move = (Move) o; return move.contents.equals(contents); } return false; } public GdlTerm getContents() { return contents; } @Override public int hashCode() { return contents.hashCode(); } @Override public String toString() { return contents.toString(); } }