summaryrefslogtreecommitdiff
path: root/frontend/client/src/autotest/planner/machine/MachineViewTable.java
blob: 3cc44408aea702c330ec63c3f7cec791fa09a5ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package autotest.planner.machine;

import autotest.common.Utils;
import autotest.planner.TestPlannerTableDisplay;
import autotest.planner.TestPlannerTableDisplay.RowDisplay;

import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

public class MachineViewTable {

    public static class Row {
        String machine;
        String status;
        Map<String, StatusSummary> statusSummaries;
        List<String> bugIds;

        private Row(String machine, String status,
                Map<String, StatusSummary> statusSummaries, List<String> bugIds) {
            this.machine = machine;
            this.status = status;
            this.statusSummaries = statusSummaries;
            this.bugIds = bugIds;
        }

        public static Row fromJsonObject(JSONObject rowObject) {
            Map<String, StatusSummary> statusSummaries = new HashMap<String, StatusSummary>();

            JSONArray testsRun = rowObject.get("tests_run").isArray();
            for (int i = 0; i < testsRun.size(); i++) {
                JSONObject test = testsRun.get(i).isObject();
                String testName = Utils.jsonToString(test.get("test_name"));

                StatusSummary statusSummary = statusSummaries.get(testName);
                if (statusSummary == null) {
                    statusSummary = new StatusSummary();
                    statusSummaries.put(testName, statusSummary);
                }

                statusSummary.addStatus(Utils.jsonToString(test.get("status")));
            }

            return new Row(Utils.jsonToString(rowObject.get("machine")),
                    Utils.jsonToString(rowObject.get("status")),
                    statusSummaries,
                    Arrays.asList(Utils.JSONtoStrings(rowObject.get("bug_ids").isArray())));
        }
    }

    private TestPlannerTableDisplay display;
    private List<Row> rows = new ArrayList<Row>();

    public void bindDisplay(TestPlannerTableDisplay display) {
        this.display = display;
    }

    public void setData(JSONArray data) {
        for (int i = 0; i < data.size(); i++) {
            rows.add(Row.fromJsonObject(data.get(i).isObject()));
        }

        display.clearData();
        displayData();
    }

    private void displayData() {
        Set<String> allTestNames = new TreeSet<String>();
        for (Row row : rows) {
            allTestNames.addAll(row.statusSummaries.keySet());
        }

        List<String> headers = new ArrayList<String>();
        headers.add("Machine");
        headers.add("Status");
        headers.addAll(allTestNames);
        headers.add("Bugs Filed");
        display.setHeaders(headers);

        for (Row row : rows) {
            List<RowDisplay> rowData = new ArrayList<RowDisplay>();
            rowData.add(new RowDisplay(row.machine));
            rowData.add(new RowDisplay(row.status));

            for (String testName : allTestNames) {
                StatusSummary statusSummary = row.statusSummaries.get(testName);
                if (statusSummary != null) {
                    rowData.add(new RowDisplay(
                            statusSummary.formatStatusCounts(), statusSummary.getCssClass()));
                } else {
                    rowData.add(new RowDisplay(""));
                }
            }

            rowData.add(new RowDisplay(String.valueOf(row.bugIds.size())));

            display.addRow(rowData);
        }

        display.finalRender();
    }
}