@Override
  public void onAnimationStart(Animation animation) {

    // Disable board
    mBoardView.setBoardEnabled(false);
    mBoardView.animationStarted(this.posAnim);
  }
  @Override
  public void onAnimationEnd(Animation animation) {
    // TODO Auto-generated method stub
    mBoardView.invalidate();
    mBoardView.animationEnded(posAnim, dy, posDest, xInitial);

    // Enable board
    mBoardView.setBoardEnabled(true);
  }
  /**
   * Ensure this board isn't built too high and doesn't intersect any other boards
   *
   * @throws ChessException if an intersection would occur
   */
  private void validateBoardPosition() throws ChessException {
    Cuboid bounds = getFullBoard();

    if (bounds.getUpperSW().getBlock().getLocation().getY()
        > bounds.getUpperSW().getWorld().getMaxHeight()) {
      throw new ChessException(Messages.getString("BoardView.boardTooHigh")); // $NON-NLS-1$
    }
    for (BoardView bv : BoardViewManager.getManager().listBoardViews()) {
      if (bv.getA1Square().getWorld() != bounds.getWorld()) {
        continue;
      }
      for (Block b : bounds.corners()) {
        if (bv.getOuterBounds().contains(b)) {
          throw new ChessException(
              Messages.getString("BoardView.boardWouldIntersect", bv.getName())); // $NON-NLS-1$
        }
      }
    }
  }
 @Override
 public void actionPerformed(ActionEvent e) {
   boardViewInstance.auto();
 }
 @Override
 public void actionPerformed(ActionEvent e) {
   boardViewInstance.undoState();
 }