Console.java

package org.ferris.tweial.console.io;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Set;
import javax.inject.Inject;
import javax.validation.ConstraintViolation;
import org.ferris.tweial.console.text.i18n.LocalizedString;
import org.ferris.tweial.console.text.i18n.LocalizedStringKey;
import org.ferris.tweial.console.text.i18n.LocalizedStringList;

public class Console {

    private ConsoleWriter writer;

    @Inject
    @LocalizedStringKey("Violation.Message")
    protected LocalizedString violationMessage;

    @Inject
    @LocalizedStringKey("Violation.Bullet")
    protected LocalizedString violationBullet;

    @Inject
    protected void setConsoleWriter(ConsoleWriter writer) {
        this.writer = writer;
    }

    public void h1(LocalizedString format, Object... args) {
        writer.println();
        writer.printf("[%s]", String.format(format.toString(), args));
        writer.println();
    }

    public void h1(LocalizedString heading) {
        h1(heading, (Object[]) null);
    }

    public void h2(LocalizedString format, Object... args) {
        writer.println();
        writer.printf("++ %s", String.format(format.toString(), args));
        writer.println();
    }

    public void h2(LocalizedString heading) {
        h2(heading, (Object[]) null);
    }

    public void p(LocalizedStringList paragraph) {
        writer.println();
        for (String s : paragraph) {
            writer.printf("%s", s);
            writer.println();
        }
    }

    public void p(LocalizedString format, Object... args) {
        writer.println();
        writer.printf("%s", String.format(format.toString(), args));
        writer.println();
    }

    public void p(Throwable throwable) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        throwable.printStackTrace(pw);
        pw.flush();
        sw.flush();

        writer.println();
        writer.printf(sw.toString());
        writer.println();
    }

    public <T> void print(Set<ConstraintViolation<T>> violations) {
        writer.println();
        writer.printf("%s", violationMessage);
        writer.println();
        for (ConstraintViolation<T> violation : violations) {
            writer.printf(" %s %s", violationBullet, violation.getMessage());
            writer.println();
        }
    }
}