public Map<Position, List<Path>> findAvailablePaths(final Game game, final Position position, final int player) {

        final List<List<Integer>> boardState = game.getBoardState();

        if (boardState.get(position.getRow()).get(position.getCol()) != EMPTY_PLACE) {
            return null;
        }

        final Map<Position, List<Path>> playerPaths     = new HashMap<Position, List<Path>>();
        final int                       DIFFERENT_COLOR = player == WHITE_PLAYER ? BLACK_DISK : WHITE_DISK;
        final int                       SAME_COLOR      = player; // Redundant constant for code readability

        for (int direction = 0; direction < 8; direction++) {

            int value = getPositionValue(game, position, direction, 1);

            if (value == DIFFERENT_COLOR) {

                for (int step = 2; step < 8; step++) {

                    value = getPositionValue(game, position, direction, step);

                    if (value == END_OF_DIRECTION || value == EMPTY_PLACE) {
                        break;
                    } else if (value == SAME_COLOR) {
                        List<Path> paths = playerPaths.get(position);

                        if (paths == null) {
                            paths = new ArrayList<Path>();
                        }

                        paths.add(new Path(position, direction, step));
                        playerPaths.put(position, paths);

                        break;
                    }
                } // end for
            }
        }         // end for

        return playerPaths;
    }