public Element handle(FreeColServer server, Player player,
                          Connection connection) {
        ServerPlayer serverPlayer = server.getPlayer(connection);
        
        Unit unit;
        try {
            unit = serverPlayer.getFreeColGameObject(unitId, Unit.class);
        } catch (Exception e) {
            return DOMMessage.clientError(e.getMessage());
        }

        Tile tile;
        try {
            tile = unit.getNeighbourTile(directionString);
        } catch (Exception e) {
            return DOMMessage.clientError(e.getMessage());
        }

        MoveType moveType = unit.getMoveType(tile);
        if (moveType == MoveType.ENTER_INDIAN_SETTLEMENT_WITH_SCOUT
            || moveType == MoveType.ENTER_FOREIGN_COLONY_WITH_SCOUT
            || moveType.isAttack()) {
            ; // OK
        } else {
            return DOMMessage.clientError("Illegal attack move for: " + unitId
                + " type: " + moveType
                + " from: " + unit.getLocation().getId()
                + " to: " + tile.getId());
        }

        Unit defender = tile.getDefendingUnit(unit);
        if (defender == null) {
            return DOMMessage.clientError("Could not find defender"
                + " in tile: " + tile.getId()
                + " from: " + unit.getLocation().getId());
        }

        // Proceed to attack.
        return server.getInGameController()
            .combat(serverPlayer, unit, defender, null);
    }