public CubeColor[][] getColorMapByFace(Face face) {
        CubeColor[][] colorMap = new CubeColor[getCubeComplexity()][];
        for (int i=0; i<getCubeComplexity(); i++) {
            colorMap[i] = new CubeColor[getCubeComplexity()];
            for (int j=0; j<getCubeComplexity(); j++) {
                CubeColor color;
                if (face == TOP) {
                    CubeBlock block = blockMap[getCubeComplexity() - 1 - i][0][j];
                    color = block.getColorList().get(0);
                } else if (face == BOTTOM) {
                    CubeBlock block = blockMap[getCubeComplexity() - 1 - i]
                            [getCubeComplexity() - 1][getCubeComplexity() - 1 - j];
                    color = block.getColorList().get(0);
                } else if (face == FRONT) {
                    CubeBlock block = blockMap[0][i][j];
                    color = getFrontRightBackFaceColor(i, j, block);
                } else if (face == RIGHT) {
                    CubeBlock block = blockMap[j][i][getCubeComplexity() - 1];
                    color = getFrontRightBackFaceColor(i, j, block);
                } else if (face == LEFT) {
                    CubeBlock block = blockMap[getCubeComplexity() - 1 - j]
                            [i][0];
                    color = getBackFaceColor(i, j, block);
                } else if (face == BACK) {
                    CubeBlock block = blockMap[getCubeComplexity() - 1]
                            [i][getCubeComplexity() - 1 - j];
                    color = getFrontRightBackFaceColor(i, j, block);
                } else {
                    throw new CubeException("Unknown face: "+face);
                }
                colorMap[i][j] = color;

            }
        }

        return colorMap;
    }