1 16 package com.google.gwt.junit.viewer.client; 17 18 import com.google.gwt.core.client.EntryPoint; 19 import com.google.gwt.core.client.GWT; 20 import com.google.gwt.http.client.URL; 21 import com.google.gwt.user.client.rpc.AsyncCallback; 22 import com.google.gwt.user.client.rpc.ServiceDefTarget; 23 import com.google.gwt.user.client.ui.Button; 24 import com.google.gwt.user.client.ui.CellPanel; 25 import com.google.gwt.user.client.ui.ClickListener; 26 import com.google.gwt.user.client.ui.FlexTable; 27 import com.google.gwt.user.client.ui.HTML; 28 import com.google.gwt.user.client.ui.HasHorizontalAlignment; 29 import com.google.gwt.user.client.ui.HasVerticalAlignment; 30 import com.google.gwt.user.client.ui.HorizontalPanel; 31 import com.google.gwt.user.client.ui.Image; 32 import com.google.gwt.user.client.ui.Label; 33 import com.google.gwt.user.client.ui.RootPanel; 34 import com.google.gwt.user.client.ui.VerticalPanel; 35 import com.google.gwt.user.client.ui.Widget; 36 37 import java.util.ArrayList ; 38 import java.util.Collections ; 39 import java.util.Comparator ; 40 import java.util.List ; 41 import java.util.Map ; 42 43 61 public class ReportViewer implements EntryPoint { 62 63 private static class MutableBool { 64 65 boolean value; 66 67 MutableBool(boolean value) { 68 this.value = value; 69 } 70 } 71 72 private static final String baseUrl = GWT.getModuleBaseURL(); 73 74 private static final String imageServer = baseUrl + "test_images/"; 75 76 HTML detailsLabel; 77 78 Report report; 79 80 VerticalPanel reportPanel; 81 82 ReportServerAsync reportServer; 83 84 FlexTable reportTable; 85 86 HTML statusLabel; 87 88 List summaries; 89 90 VerticalPanel summariesPanel; 91 92 FlexTable summariesTable; 93 94 CellPanel topPanel; 95 96 public void onModuleLoad() { 97 98 init(); 99 100 ServiceDefTarget target = (ServiceDefTarget) GWT.create(ReportServer.class); 102 target.setServiceEntryPoint(GWT.getModuleBaseURL() + "test_reports"); 103 reportServer = (ReportServerAsync) target; 104 105 reportServer.getReportSummaries(new AsyncCallback() { 106 public void onFailure(Throwable caught) { 107 String msg = "<p>" + caught.toString() + "</p>" 108 + "<p>Is your path to the reports correct?</p>"; 109 statusLabel.setHTML(msg); 110 } 111 112 public void onSuccess(Object result) { 113 summaries = (List ) result; 114 if (summaries != null) { 115 if (summaries.size() == 0) { 116 statusLabel.setText("There are no benchmark reports available in this folder."); 117 } 118 Collections.sort(summaries, new Comparator () { 119 public int compare(Object o1, Object o2) { 120 ReportSummary r1 = (ReportSummary) o1; 121 ReportSummary r2 = (ReportSummary) o2; 122 return r2.getDate().compareTo(r1.getDate()); } 124 }); 125 displaySummaries(); 126 } 127 } 128 }); 129 } 130 131 private FlexTable createReportTable() { 132 133 FlexTable topTable = new FlexTable(); 134 135 FlexTable tempReportTable = new FlexTable(); 136 tempReportTable.setBorderWidth(1); 137 tempReportTable.setCellPadding(5); 138 tempReportTable.setWidget(0, 0, new Label("Date Created")); 139 tempReportTable.setWidget(0, 1, new Label("GWT Version")); 140 141 if (report == null) { 142 tempReportTable.setWidget(1, 0, 143 new Label("No currently selected report.")); 144 tempReportTable.getFlexCellFormatter().setColSpan(1, 0, 3); 145 return tempReportTable; 146 } 147 148 detailsLabel.setHTML("<h3>" + report.getId() + " details </h3>"); 149 tempReportTable.setWidget(1, 0, new Label(report.getDateString())); 150 tempReportTable.setWidget(1, 1, new Label(report.getGwtVersion())); 151 152 int currentRow = 1; 154 155 Collections.sort(report.getCategories(), new Comparator () { 156 public int compare(Object o1, Object o2) { 157 Category c1 = (Category) o1; 158 Category c2 = (Category) o2; 159 return c1.getName().compareTo(c2.getName()); 160 } 161 }); 163 for (int i = 0; i < report.getCategories().size(); ++i) { 164 Category c = (Category) report.getCategories().get(i); 165 166 if (!c.getName().equals("")) { 167 FlexTable categoryTable = new FlexTable(); 168 categoryTable.setBorderWidth(0); 169 categoryTable.setCellPadding(5); 170 categoryTable.setText(0, 0, c.getName()); 171 categoryTable.getFlexCellFormatter().setStyleName(0, 0, 172 "benchmark-category"); 173 174 categoryTable.setWidget(0, 1, new Label("Description")); 175 categoryTable.setWidget(1, 0, new Label(c.getName())); 176 categoryTable.setWidget(1, 1, new Label(c.getDescription())); 177 178 topTable.setWidget(currentRow++, 0, categoryTable); 179 } 180 181 Collections.sort(c.getBenchmarks(), new Comparator () { 182 public int compare(Object o1, Object o2) { 183 Benchmark b1 = (Benchmark) o1; 184 Benchmark b2 = (Benchmark) o2; 185 return b1.getName().compareTo(b2.getName()); 186 } 187 }); 189 for (int j = 0; j < c.getBenchmarks().size(); ++j) { 190 Benchmark benchmark = (Benchmark) c.getBenchmarks().get(j); 191 192 FlexTable benchmarkTable = new FlexTable(); 193 benchmarkTable.setBorderWidth(0); 194 benchmarkTable.setCellPadding(5); 195 benchmarkTable.setText(0, 0, benchmark.getName()); 196 benchmarkTable.setWidget(1, 0, new HTML("<pre>" 198 + benchmark.getSourceCode() + "</pre>")); 199 benchmarkTable.getFlexCellFormatter().setStyleName(0, 0, 200 "benchmark-name"); 201 benchmarkTable.getFlexCellFormatter().setStyleName(1, 0, 204 "benchmark-code"); 205 206 218 topTable.setWidget(currentRow++, 0, benchmarkTable); 219 220 FlexTable resultsTable = new FlexTable(); 221 resultsTable.setBorderWidth(0); 222 resultsTable.setCellPadding(5); 223 FlexTable.FlexCellFormatter resultsFormatter = resultsTable.getFlexCellFormatter(); 224 topTable.setWidget(currentRow++, 0, resultsTable); 225 226 Collections.sort(benchmark.getResults(), new Comparator () { 227 public int compare(Object o1, Object o2) { 228 Result r1 = (Result) o1; 229 Result r2 = (Result) o2; 230 return r1.getAgent().compareTo(r2.getAgent()); 231 } 232 }); 234 final List trialsTables = new ArrayList (); 235 final MutableBool isVisible = new MutableBool(false); 236 237 Button visibilityButton = new Button("Show Data", new ClickListener() { 238 public void onClick(Widget sender) { 239 isVisible.value = !isVisible.value; 240 for (int i = 0; i < trialsTables.size(); ++i) { 241 Widget w = (Widget) trialsTables.get(i); 242 w.setVisible(isVisible.value); 243 } 244 String name = isVisible.value ? "Hide Data" : "Show Data"; 245 ((Button) sender).setText(name); 246 } 247 }); 248 249 for (int k = 0; k < benchmark.getResults().size(); ++k) { 250 Result result = (Result) benchmark.getResults().get(k); 251 252 259 260 resultsTable.setWidget(0, k, new Image(getImageUrl(report.getId(), 261 c.getName(), benchmark.getClassName(), benchmark.getName(), 262 result.getAgent()))); 263 264 274 275 resultsFormatter.setAlignment(2, k, 276 HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP); 277 278 FlexTable trialsTable = new FlexTable(); 280 trialsTable.setVisible(false); 281 trialsTables.add(trialsTable); 282 trialsTable.setBorderWidth(1); 283 trialsTable.setCellPadding(5); 284 285 if (k == 0) { 286 resultsTable.setWidget(1, k, visibilityButton); 287 resultsFormatter.setColSpan(1, k, benchmark.getResults().size()); 288 resultsFormatter.setAlignment(1, k, 289 HasHorizontalAlignment.ALIGN_LEFT, 290 HasVerticalAlignment.ALIGN_MIDDLE); 291 } 292 293 resultsTable.setWidget(2, k, trialsTable); 294 295 List trials = result.getTrials(); 296 int numTrials = trials.size(); 297 int numVariables = ((Trial) trials.get(0)).getVariables().size(); 298 299 Trial sampleTrial = (Trial) trials.get(0); 300 Map variables = sampleTrial.getVariables(); 301 List variableNames = new ArrayList (variables.keySet()); 302 Collections.sort(variableNames); 303 304 for (int varIndex = 0; varIndex < numVariables; ++varIndex) { 306 String varName = (String ) variableNames.get(varIndex); 307 trialsTable.setWidget(0, varIndex, new HTML(varName)); 308 } 309 310 trialsTable.setWidget(0, numVariables, new HTML("Timing (ms)")); 312 313 for (int l = 0; l < numTrials; ++l) { 315 Trial trial = (Trial) trials.get(l); 316 317 for (int varIndex = 0; varIndex < numVariables; ++varIndex) { 319 String varName = (String ) variableNames.get(varIndex); 320 String varValue = (String ) trial.getVariables().get(varName); 321 trialsTable.setWidget(l + 1, varIndex, new HTML(varValue)); 322 } 323 324 String data = null; 326 if (trial.getException() != null) { 327 data = trial.getException(); 328 } else { 329 data = trial.getRunTimeMillis() + ""; 330 } 331 trialsTable.setWidget(l + 1, numVariables, new HTML(data)); 332 } 333 } 334 } 335 } 336 337 return topTable; 338 } 339 340 private FlexTable createSummariesTable() { 341 342 FlexTable tempSummariesTable = new FlexTable(); 343 tempSummariesTable.setCellPadding(5); 344 tempSummariesTable.setBorderWidth(1); 345 tempSummariesTable.setWidget(0, 0, new Label("Id")); 346 tempSummariesTable.setWidget(0, 1, new Label("Date Created")); 347 tempSummariesTable.setWidget(0, 2, new Label("Tests")); 348 350 if (summaries == null) { 351 tempSummariesTable.setWidget(1, 0, new Label("Fetching reports...")); 352 tempSummariesTable.getFlexCellFormatter().setColSpan(1, 0, 4); 353 return tempSummariesTable; 354 } 355 356 for (int i = 0; i < summaries.size(); ++i) { 357 ReportSummary summary = (ReportSummary) summaries.get(i); 358 int index = i + 1; 359 Label idLabel = new Label(summary.getId()); 360 idLabel.addClickListener(new ClickListener() { 361 public void onClick(Widget w) { 362 getReportDetails(((Label) w).getText()); 363 } 364 }); 365 tempSummariesTable.setWidget(index, 0, idLabel); 366 tempSummariesTable.setWidget(index, 1, new Label(summary.getDateString())); 367 tempSummariesTable.setWidget(index, 2, new Label(summary.getNumTests() 368 + "")); 369 } 372 373 return tempSummariesTable; 374 } 375 376 private void displayReport() { 377 FlexTable table = createReportTable(); 378 reportPanel.remove(reportTable); 379 reportTable = table; 380 reportPanel.insert(reportTable, 1); 381 } 382 383 private void displaySummaries() { 384 FlexTable table = createSummariesTable(); 385 summariesPanel.remove(summariesTable); 386 summariesTable = table; 387 summariesPanel.insert(summariesTable, 1); 388 } 389 390 private String encode(String str) { 391 if (str.equals("")) { 392 return str; 393 } 394 return URL.encodeComponent(str); 395 } 396 397 private String getImageUrl(String report, String category, String testClass, 398 String testMethod, String agent) { 399 return imageServer + encode(report) + "/" + encode(category) + "/" 400 + encode(testClass) + "/" + encode(testMethod) + "/" + encode(agent); 401 } 402 403 408 private void getReportDetails(String id) { 409 statusLabel.setText("Retrieving the report..."); 410 reportServer.getReport(id, new AsyncCallback() { 411 public void onFailure(Throwable caught) { 412 statusLabel.setText(caught.toString()); 413 } 414 415 public void onSuccess(Object result) { 416 report = (Report) result; 417 statusLabel.setText("Finished fetching report details."); 418 displayReport(); 419 } 420 }); 421 } 422 423 private void init() { 424 topPanel = new VerticalPanel(); 425 426 summariesPanel = new VerticalPanel(); 427 summariesPanel.add(new HTML("<h3>Benchmark Reports</h3>")); 428 summariesTable = createSummariesTable(); 429 summariesPanel.add(summariesTable); 430 431 reportPanel = new VerticalPanel(); 432 detailsLabel = new HTML("<h3>Report Details</h3>"); 433 reportPanel.add(detailsLabel); 434 reportTable = createReportTable(); 435 437 topPanel.add(summariesPanel); 438 CellPanel spacerPanel = new HorizontalPanel(); 439 spacerPanel.setSpacing(10); 440 spacerPanel.add(new Label()); 441 topPanel.add(spacerPanel); 442 topPanel.add(reportPanel); 443 final RootPanel root = RootPanel.get(); 444 445 root.add(topPanel); 446 447 statusLabel = new HTML("Select a report."); 448 root.add(statusLabel); 449 } 450 } 451 | Popular Tags |