1package autotest.tko;
2
3import autotest.common.JsonRpcCallback;
4import autotest.common.Utils;
5import autotest.common.ui.SimpleDialog;
6
7import com.google.gwt.event.dom.client.ClickEvent;
8import com.google.gwt.event.dom.client.ClickHandler;
9import com.google.gwt.json.client.JSONArray;
10import com.google.gwt.json.client.JSONObject;
11import com.google.gwt.json.client.JSONString;
12import com.google.gwt.json.client.JSONValue;
13import com.google.gwt.user.client.ui.Anchor;
14import com.google.gwt.user.client.ui.FlexTable;
15
16class MetricsPlot extends Plot {
17    public MetricsPlot() {
18        super("create_metrics_plot");
19    }
20
21    /**
22     * drilldownParams contains:
23     * * query - SQL query for the selected series
24     * * series - name of the selected series
25     * * param - parameter to fill in query for the selected data point
26     */
27    @Override
28    protected void showDrilldownImpl(JSONObject drilldownParams) {
29        String query = Utils.jsonToString(drilldownParams.get("query"));
30        final String series = Utils.jsonToString(drilldownParams.get("series"));
31        final String param = Utils.jsonToString(drilldownParams.get("param"));
32
33        JSONObject params = new JSONObject();
34        params.put("query", new JSONString(query));
35        params.put("param", new JSONString(param));
36        rpcProxy.rpcCall("execute_query_with_param", params, new JsonRpcCallback() {
37            @Override
38            public void onSuccess(JSONValue result) {
39                JSONArray data = result.isArray();
40
41                String title = series + " for " + param;
42                FlexTable contents = new FlexTable();
43                final SimpleDialog drill = new SimpleDialog(title, contents);
44
45                for (int i = 0; i < data.size(); i++) {
46                    final JSONArray row = data.get(i).isArray();
47                    final int testId = (int) row.get(0).isNumber().doubleValue();
48                    String yValue = Utils.jsonToString(row.get(1));
49
50                    Anchor link = new Anchor(yValue);
51                    link.addClickHandler(new ClickHandler() {
52                        public void onClick(ClickEvent event) {
53                            drill.hide();
54                            listener.onSelectTest(testId);
55                        }
56                    });
57                    contents.setWidget(i, 0, link);
58                }
59
60                drill.center();
61            }
62        });
63    }
64}
65