TestDetailView.java revision 11bd063f741c3bcfc59cadfed4abc65686df10ef
1aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanipackage autotest.tko;
2aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport autotest.common.JsonRpcCallback;
4aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport autotest.common.Utils;
5aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport autotest.common.ui.DetailView;
6aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport autotest.common.ui.NotifyManager;
7aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport autotest.common.ui.RealHyperlink;
8aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
9aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.http.client.Request;
10aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.http.client.RequestBuilder;
11aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.http.client.RequestCallback;
12aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.http.client.RequestException;
13aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.http.client.Response;
14aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.json.client.JSONNumber;
15aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.json.client.JSONObject;
16aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.json.client.JSONValue;
17aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.user.client.ui.Composite;
18aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.user.client.ui.DisclosureEvent;
19aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.user.client.ui.DisclosureHandler;
20aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.user.client.ui.DisclosurePanel;
21aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.user.client.ui.FlexTable;
22aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.user.client.ui.FlowPanel;
23aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.user.client.ui.HTML;
24aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.user.client.ui.Label;
25aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.user.client.ui.Panel;
26aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport com.google.gwt.user.client.ui.RootPanel;
27aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
28aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport java.util.ArrayList;
29aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport java.util.Arrays;
30aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport java.util.Collections;
31aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniimport java.util.List;
32aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
33aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniclass TestDetailView extends DetailView {
34aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    private static final int NO_TEST_ID = -1;
35aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
36aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    private int testId = NO_TEST_ID;
37aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    private String jobTag;
38aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    private List<LogFileViewer> logFileViewers = new ArrayList<LogFileViewer>();
39aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    private RealHyperlink logLink = new RealHyperlink("(view all logs)");
40aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
41aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    private Panel logPanel;
42aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
43aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    private class LogFileViewer extends Composite implements DisclosureHandler, RequestCallback {
44aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        private static final String FAILED_TEXT = "Failed to retrieve log";
45aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        private DisclosurePanel panel;
46aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        private String logFilePath;
47aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
48aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        public LogFileViewer(String logFilePath, String logFileName) {
49aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            this.logFilePath = logFilePath;
50aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            panel = new DisclosurePanel(logFileName);
51aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            panel.addEventHandler(this);
52aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            panel.addStyleName("log-file-panel");
53aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            initWidget(panel);
54aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
55aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
56aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        public void onOpen(DisclosureEvent event) {
57aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, getLogUrl());
58aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            try {
59aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                builder.sendRequest("", this);
60aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                setStatusText("Loading...");
61aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            } catch (RequestException exc) {
62aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                onRequestFailure();
63aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
64aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
65aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
66aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        private String getLogUrl() {
67aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            return Utils.getLogsURL(jobTag + "/" + logFilePath);
68aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
69aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
70aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        private void setLogText(String text) {
71aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            panel.clear();
72aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            Label label = new Label(text);
73aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            label.setStyleName("log-file-text");
74aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            panel.add(label);
75aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
76aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
77aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        private void setStatusText(String status) {
78aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            panel.clear();
79aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            panel.add(new HTML("<i>" + status + "</i>"));
80aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
81aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
82aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        public void onClose(DisclosureEvent event) {}
83aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
84aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        public void onError(Request request, Throwable exception) {
85aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            onRequestFailure();
86aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
87aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
88aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        private void onRequestFailure() {
89aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            setStatusText(FAILED_TEXT);
90aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
91aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
92aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        public void onResponseReceived(Request request, Response response) {
93aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if (response.getStatusCode() != 200) {
94aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                onRequestFailure();
95aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                return;
96aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
97aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
98aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            String logText = response.getText();
99aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if (logText.equals("")) {
100aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                setStatusText("Log file is empty");
101aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            } else {
102aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                setLogText(logText);
103aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
104aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
105aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
106aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
107aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    private static class AttributeTable extends Composite {
108aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        private DisclosurePanel container = new DisclosurePanel("Test attributes");
109aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        private FlexTable table = new FlexTable();
110aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
111aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        public AttributeTable(JSONObject attributes) {
112aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            processAttributes(attributes);
113aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            setupTableStyle();
114aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            container.add(table);
115aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            initWidget(container);
116aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
117aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
118aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        private void processAttributes(JSONObject attributes) {
119aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if (attributes.size() == 0) {
120aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                table.setText(0, 0, "No test attributes");
121aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                return;
122aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
123aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
124aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            List<String> sortedKeys = new ArrayList<String>(attributes.keySet());
125aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            Collections.sort(sortedKeys);
126aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            for (String key : sortedKeys) {
127aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                String value = Utils.jsonToString(attributes.get(key));
128aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                int row = table.getRowCount();
129aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                table.setText(row, 0, key);
130aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                table.setText(row, 1, value);
131aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
132aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
133aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
134aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        private void setupTableStyle() {
135aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            container.addStyleName("test-attributes");
136aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
137aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
138aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
139aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    @Override
140aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    public void initialize() {
141aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        super.initialize();
142aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
143aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        logPanel = new FlowPanel();
144aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        RootPanel.get("td_log_files").add(logPanel);
145aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
146aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        logLink.setOpensNewWindow(true);
147aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        RootPanel.get("td_view_logs_link").add(logLink);
148aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
149aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
150aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    private void addLogViewers(String testName) {
151aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        logPanel.clear();
152aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        addLogFileViewer(testName + "/debug/stdout", "Test stdout");
153aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        addLogFileViewer(testName + "/debug/stderr", "Test stderr");
154aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        addLogFileViewer("status.log", "Job status log");
155aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        addLogFileViewer("debug/autoserv.stdout", "Job autoserv stdout");
156aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        addLogFileViewer("debug/autoserv.stderr", "Job autoserv stderr");
157aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
158aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
159aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    private void addLogFileViewer(String logPath, String logName) {
160aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        LogFileViewer viewer = new LogFileViewer(logPath, logName);
161aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        logFileViewers.add(viewer);
162aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        logPanel.add(viewer);
163aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
164aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
165aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    @Override
166aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    protected void fetchData() {
167aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        JSONObject params = new JSONObject();
168aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        params.put("test_idx", new JSONNumber(testId));
169aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        rpcProxy.rpcCall("get_detailed_test_views", params, new JsonRpcCallback() {
170aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            @Override
171aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            public void onSuccess(JSONValue result) {
172aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                JSONObject test;
173aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                try {
174aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    test = Utils.getSingleValueFromArray(result.isArray()).isObject();
175aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
176aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                catch (IllegalArgumentException exc) {
177aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    NotifyManager.getInstance().showError("No such job found");
178aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    resetPage();
179aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    return;
180aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
181aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
182aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                showTest(test);
183aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
184aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
185aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            @Override
186aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            public void onError(JSONObject errorObject) {
187aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                super.onError(errorObject);
188aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                resetPage();
189aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
190aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        });
191aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
192aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
193aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    @Override
194aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    protected void setObjectId(String id) {
195aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        try {
196aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            testId = Integer.parseInt(id);
197aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
198aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        catch (NumberFormatException exc) {
199aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            throw new IllegalArgumentException();
200aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
201aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
202aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
203aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    @Override
204aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    protected String getObjectId() {
205aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if (testId == NO_TEST_ID) {
206aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            return NO_OBJECT;
207aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
208aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return Integer.toString(testId);
209aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
210aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
211aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    @Override
212aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    protected String getDataElementId() {
213aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return "td_data";
214aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
215aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
216aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    @Override
217aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    protected String getFetchControlsElementId() {
218aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return "td_fetch_controls";
219aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
220aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
221aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    @Override
222aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    protected String getNoObjectText() {
223aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return "No test selected";
224aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
225aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
226aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    @Override
227aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    protected String getTitleElementId() {
228aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return "td_title";
229aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
230aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
231aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    @Override
232aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    public String getElementId() {
233aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return "test_detail_view";
234aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
235aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
236aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    @Override
237aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    public void display() {
238aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        super.display();
239aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        CommonPanel.getPanel().setConditionVisible(false);
240aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
241aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
242aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    protected void showTest(JSONObject test) {
243aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        String testName = test.get("test_name").isString().stringValue();
244aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        jobTag = test.get("job_tag").isString().stringValue();
245aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
246aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        showText(testName, "td_test");
247aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        showText(jobTag, "td_job_tag");
248aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        showField(test, "job_name", "td_job_name");
249aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        showField(test, "status", "td_status");
250aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        showField(test, "reason", "td_reason");
251aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        showField(test, "test_started_time", "td_test_started");
252aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        showField(test, "test_finished_time", "td_test_finished");
253aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        showField(test, "hostname", "td_hostname");
254aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        showField(test, "platform", "td_platform");
255aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        showField(test, "kernel", "td_kernel");
256aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
257aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        String[] labels = Utils.JSONtoStrings(test.get("labels").isArray());
258aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        String labelList = Utils.joinStrings(", ", Arrays.asList(labels));
259aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if (labelList.equals("")) {
260aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            labelList = "none";
261aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
262aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        showText(labelList, "td_test_labels");
263aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
264aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        JSONObject attributes = test.get("attributes").isObject();
265aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        RootPanel attributePanel = RootPanel.get("td_attributes");
266aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        attributePanel.clear();
267aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        attributePanel.add(new AttributeTable(attributes));
268aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
269aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        logLink.setHref(Utils.getLogsURL(jobTag));
270aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        addLogViewers(testName);
271aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
272aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        displayObjectData("Test " + testName + " (job " + jobTag + ")");
273aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
274aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
275aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani