package org.singinst.uf.model;
import java.awt.Color;
import org.singinst.uf.presenter.HtmlUtil;
import org.singinst.uf.common.StringUtil;
import org.singinst.uf.math.MathUtil;
public abstract class Calculation implements Evaluable {
private final String description;
private StringBuilder htmlConsole = new StringBuilder();
private final boolean prependDescription;
public Calculation(String description) {
this(description, true);
}
public Calculation(String description, boolean prependDescription) {
this.description = description.intern();
this.prependDescription = prependDescription;
}
public String getDescription() {
return description;
}
public final double evaluate() {
return evaluate(getHtmlConsole());
}
public final double evaluate(StringBuilder htmlConsole) {
if (prependDescription) {
htmlConsole.append(description);
}
double raw = rawEvaluate(htmlConsole);
double rounded = MathUtil.round(raw, 12);
// String percentage = MathUtil.round(raw * 100, 2) + "%"; //FIXME
// htmlConsole.append(" = " + HtmlUtil.htmlcolorFromColor(getColor(), percentage) + "
\n");
htmlConsole.append(" = " + HtmlUtil.htmlcolorFromColor(getColor(), StringUtil.formatProbability(raw)) + "
\n");
return rounded;
}
protected abstract double rawEvaluate(StringBuilder htmlConsole);
/**
* Returns the color for this calculation, so that we consistently display the correct one.
*
* @return
* The color to display this calculation
*/
public Color getColor() {
return Color.BLACK;
}
public StringBuilder getHtmlConsole() {
return htmlConsole;
}
public void setHtmlConsole(StringBuilder htmlConsole) {
this.htmlConsole = htmlConsole;
}
}