blob: c1300033ba64e5ebae305782ef4fcb9c86dad27e [file] [log] [blame]
package autotest.common;
public abstract class AbstractStatusSummary {
public static final String BLANK_COLOR = "status_blank";
private static final ColorMapping[] CELL_COLOR_MAP = {
// must be in descending order of percentage
new ColorMapping(95, "status_95"),
new ColorMapping(90, "status_90"),
new ColorMapping(85, "status_85"),
new ColorMapping(75, "status_75"),
new ColorMapping(1, "status_bad"),
new ColorMapping(0, "status_none"),
};
/**
* Stores a CSS class for pass rates and the minimum passing percentage required
* to have that class.
*/
private static class ColorMapping {
// store percentage as int so we can reprint it consistently
public int minPercent;
public String cssClass;
public ColorMapping(int minPercent, String cssClass) {
this.minPercent = minPercent;
this.cssClass = cssClass;
}
public boolean matches(double ratio) {
return ratio * 100 >= minPercent;
}
}
public String formatStatusCounts() {
String text = getPassed() + " / " + getComplete();
if (getIncomplete() > 0) {
text += " (" + getIncomplete() + " incomplete)";
}
return text;
}
public String getCssClass() {
if (getComplete() == 0) {
return BLANK_COLOR;
}
double ratio = (double) getPassed() / getComplete();
for (ColorMapping mapping : CELL_COLOR_MAP) {
if (mapping.matches(ratio))
return mapping.cssClass;
}
throw new RuntimeException("No color map match for ratio " + ratio);
}
protected abstract int getPassed();
protected abstract int getComplete();
protected abstract int getIncomplete();
}