155fc38afc375e326656f121770305376b6239659jamesrenpackage autotest.common;
255fc38afc375e326656f121770305376b6239659jamesren
355fc38afc375e326656f121770305376b6239659jamesren
455fc38afc375e326656f121770305376b6239659jamesrenpublic abstract class AbstractStatusSummary {
555fc38afc375e326656f121770305376b6239659jamesren    public static final String BLANK_COLOR = "status_blank";
655fc38afc375e326656f121770305376b6239659jamesren    private static final ColorMapping[] CELL_COLOR_MAP = {
755fc38afc375e326656f121770305376b6239659jamesren        // must be in descending order of percentage
855fc38afc375e326656f121770305376b6239659jamesren        new ColorMapping(95, "status_95"),
955fc38afc375e326656f121770305376b6239659jamesren        new ColorMapping(90, "status_90"),
1055fc38afc375e326656f121770305376b6239659jamesren        new ColorMapping(85, "status_85"),
1155fc38afc375e326656f121770305376b6239659jamesren        new ColorMapping(75, "status_75"),
1255fc38afc375e326656f121770305376b6239659jamesren        new ColorMapping(1, "status_bad"),
1355fc38afc375e326656f121770305376b6239659jamesren        new ColorMapping(0, "status_none"),
1455fc38afc375e326656f121770305376b6239659jamesren    };
1555fc38afc375e326656f121770305376b6239659jamesren
1655fc38afc375e326656f121770305376b6239659jamesren    /**
1755fc38afc375e326656f121770305376b6239659jamesren     * Stores a CSS class for pass rates and the minimum passing percentage required
1855fc38afc375e326656f121770305376b6239659jamesren     * to have that class.
1955fc38afc375e326656f121770305376b6239659jamesren     */
2055fc38afc375e326656f121770305376b6239659jamesren    private static class ColorMapping {
2155fc38afc375e326656f121770305376b6239659jamesren        // store percentage as int so we can reprint it consistently
2255fc38afc375e326656f121770305376b6239659jamesren        public int minPercent;
2355fc38afc375e326656f121770305376b6239659jamesren        public String cssClass;
2455fc38afc375e326656f121770305376b6239659jamesren
2555fc38afc375e326656f121770305376b6239659jamesren        public ColorMapping(int minPercent, String cssClass) {
2655fc38afc375e326656f121770305376b6239659jamesren            this.minPercent = minPercent;
2755fc38afc375e326656f121770305376b6239659jamesren            this.cssClass = cssClass;
2855fc38afc375e326656f121770305376b6239659jamesren        }
2955fc38afc375e326656f121770305376b6239659jamesren
3055fc38afc375e326656f121770305376b6239659jamesren        public boolean matches(double ratio) {
3155fc38afc375e326656f121770305376b6239659jamesren            return ratio * 100 >= minPercent;
3255fc38afc375e326656f121770305376b6239659jamesren        }
3355fc38afc375e326656f121770305376b6239659jamesren    }
3455fc38afc375e326656f121770305376b6239659jamesren
3555fc38afc375e326656f121770305376b6239659jamesren    public String formatStatusCounts() {
3655fc38afc375e326656f121770305376b6239659jamesren        String text = getPassed() + " / " + getComplete();
3755fc38afc375e326656f121770305376b6239659jamesren        if (getIncomplete() > 0) {
3855fc38afc375e326656f121770305376b6239659jamesren            text += " (" + getIncomplete() + " incomplete)";
3955fc38afc375e326656f121770305376b6239659jamesren        }
4055fc38afc375e326656f121770305376b6239659jamesren        return text;
4155fc38afc375e326656f121770305376b6239659jamesren    }
4255fc38afc375e326656f121770305376b6239659jamesren
4355fc38afc375e326656f121770305376b6239659jamesren    public String getCssClass() {
4455fc38afc375e326656f121770305376b6239659jamesren        if (getComplete() == 0) {
4555fc38afc375e326656f121770305376b6239659jamesren            return BLANK_COLOR;
4655fc38afc375e326656f121770305376b6239659jamesren        }
4755fc38afc375e326656f121770305376b6239659jamesren        double ratio = (double) getPassed() / getComplete();
4855fc38afc375e326656f121770305376b6239659jamesren        for (ColorMapping mapping : CELL_COLOR_MAP) {
4955fc38afc375e326656f121770305376b6239659jamesren            if (mapping.matches(ratio))
5055fc38afc375e326656f121770305376b6239659jamesren                return mapping.cssClass;
5155fc38afc375e326656f121770305376b6239659jamesren        }
5255fc38afc375e326656f121770305376b6239659jamesren        throw new RuntimeException("No color map match for ratio " + ratio);
5355fc38afc375e326656f121770305376b6239659jamesren    }
5455fc38afc375e326656f121770305376b6239659jamesren
5555fc38afc375e326656f121770305376b6239659jamesren    protected abstract int getPassed();
5655fc38afc375e326656f121770305376b6239659jamesren    protected abstract int getComplete();
5755fc38afc375e326656f121770305376b6239659jamesren    protected abstract int getIncomplete();
5855fc38afc375e326656f121770305376b6239659jamesren}
59