Viewable.java

package soen6441riskgame.models;

import java.io.PrintStream;

import soen6441riskgame.singleton.GameBoard;

/**
 * indicate an object is printable to console with/without indentation
 */
public interface Viewable {
    /**
     * view with a number of indent on custom printStream
     *
     * @param printStream the stream to print
     * @param indent      number of indent
     */
    void view(PrintStream printStream, int indent);

    /**
     * view without indent
     */
    default void view() {
        view(GameBoard.getInstance().standardPrintStream, 0);
    }

    default void view(int indent) {
        view(GameBoard.getInstance().standardPrintStream, indent);
    }

    /**
     * view without indent on custom printStream
     *
     * @param printStream the stream to print
     */
    default void view(PrintStream printStream) {
        view(printStream, 0);
    }

    /**
     * print the indent with 4 spaces
     *
     * @param indent number of indent
     */
    default void printIndent(int indent) {
        printIndent(GameBoard.getInstance().standardPrintStream, indent);
    }

    /**
     * print the indent with 4 spaces
     *
     * @param printStream the stream to print.
     * @param indent      number of indent
     */
    default void printIndent(PrintStream printStream, int indent) {
        for (int index = 0; index < indent; index++) {
            printStream.print("    ");
        }
    }
}