package edu.sc.seis.sod.status;

import java.io.PrintWriter;
import java.io.StringWriter;

import edu.sc.seis.sod.util.exceptionHandler.ExceptionReporterUtils;

public class StringTreeLeaf extends StringTree {

    public StringTreeLeaf(Object actor, boolean status, String reason) {
        this(actor, status, reason, null);
    }

    public StringTreeLeaf(Object actor,
                          boolean status,
                          String reason,
                          Throwable t) {
        this(ExceptionReporterUtils.getClassName(actor), status, reason, t);
    }

    public StringTreeLeaf(String actorName,
                          boolean status,
                          String reason,
                          Throwable t) {
        super(actorName, status);
        this.reason = reason;
        this.t = t;
    }

    public StringTreeLeaf(Object actor, boolean boo) {
        this(actor, boo, "");
    }

    public StringTreeLeaf(String name, boolean boo) {
        this(name, boo, "");
    }

    public String toString(int indentationLevel) {
        String throwableAsString = "";
        if (getThrowable() != null) {
            StringWriter s = new StringWriter();
            PrintWriter pw = new PrintWriter(s);
            getThrowable().printStackTrace(pw);
            pw.flush();
            throwableAsString = s.toString();
            pw.close();
        }
        return super.toString(indentationLevel)
                + (reason != null ? ":" + reason : "")
                + (t != null ? ":" + t +"\n"+throwableAsString : "");
    }

    
    public String getReason() {
        return reason;
    }

    
    public Throwable getThrowable() {
        return t;
    }

    protected String reason;

    protected Throwable t;
}