summaryrefslogtreecommitdiff
path: root/frontend/client/src/autotest/planner/triage/TriageViewPresenter.java
blob: bb4389f6e52aaf9c8e1bc22c757cc725dae31ba9 (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
package autotest.planner.triage;

import autotest.common.JsonRpcCallback;
import autotest.common.JsonRpcProxy;
import autotest.planner.TestPlannerPresenter;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;

import java.util.ArrayList;
import java.util.List;

public class TriageViewPresenter extends TestPlannerPresenter
        implements ClickHandler, TriagePopup.Listener {

    public interface Display {
        public void setLoading(boolean loading);
        public void clearAllFailureTables();
        public FailureTable.Display generateFailureTable(String group, String[] columnNames);
        public TriagePopup.Display generateTriagePopupDisplay();
        public HasClickHandlers getTriageButton();
    }

    private Display display;
    private List<FailureTable> failureTables = new ArrayList<FailureTable>();

    public void bindDisplay(Display display) {
        this.display = display;
        display.getTriageButton().addClickHandler(this);
    }

    @Override
    public void refresh(String planId) {
        display.setLoading(true);

        JSONObject params = new JSONObject();
        params.put("plan_id", new JSONString(planId));

        JsonRpcProxy.getProxy().rpcCall("get_failures", params, new JsonRpcCallback() {
            @Override
            public void onSuccess(JSONValue result) {
                display.clearAllFailureTables();
                display.setLoading(false);
                generateFailureTables(result.isObject());
            }

            @Override
            public void onError(JSONObject errorObject) {
                super.onError(errorObject);
                display.setLoading(false);
            }
        });
    }

    private void generateFailureTables(JSONObject failures) {
        failureTables.clear();

        for (String group : failures.keySet()) {
            FailureTable table = new FailureTable();
            FailureTable.Display tableDisplay =
                    display.generateFailureTable(group, FailureTable.COLUMN_NAMES);
            table.bindDisplay(tableDisplay);

            JSONArray groupFailures = failures.get(group).isArray();

            for (int i = 0; i < groupFailures.size(); i++) {
                table.addFailure(groupFailures.get(i).isObject());
            }

            table.finishedAdding();
            failureTables.add(table);
        }
    }

    @Override
    public void onClick(ClickEvent event) {
        assert event.getSource() == display.getTriageButton();

        List<Integer> failureIds = new ArrayList<Integer>();
        for (FailureTable failure : failureTables) {
            failureIds.addAll(failure.getSelectedFailureIds());
        }

        TriagePopup popup = new TriagePopup(this, failureIds);
        popup.bindDisplay(display.generateTriagePopupDisplay());
        popup.render();
    }

    @Override
    public void onTriage() {
        refresh();
    }
}