001/* 002 * Sonar, open source software quality management tool. 003 * Copyright (C) 2008-2012 SonarSource 004 * mailto:contact AT sonarsource DOT com 005 * 006 * Sonar is free software; you can redistribute it and/or 007 * modify it under the terms of the GNU Lesser General Public 008 * License as published by the Free Software Foundation; either 009 * version 3 of the License, or (at your option) any later version. 010 * 011 * Sonar is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 * Lesser General Public License for more details. 015 * 016 * You should have received a copy of the GNU Lesser General Public 017 * License along with Sonar; if not, write to the Free Software 018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 019 */ 020package org.sonar.plugins.core.dashboards; 021 022import org.sonar.api.web.Dashboard; 023import org.sonar.api.web.Dashboard.Widget; 024import org.sonar.api.web.DashboardLayout; 025import org.sonar.api.web.DashboardTemplate; 026 027/** 028 * Time Machine dashboard for Sonar 029 * 030 * @since 3.0 031 */ 032public final class TimeMachineDashboard extends DashboardTemplate { 033 034 private static final String METRIC1 = "metric1"; 035 private static final String METRIC2 = "metric2"; 036 private static final String METRIC3 = "metric3"; 037 private static final String METRIC4 = "metric4"; 038 private static final String METRIC5 = "metric5"; 039 private static final String METRIC6 = "metric6"; 040 private static final String METRIC7 = "metric7"; 041 042 @Override 043 public String getName() { 044 return "TimeMachine"; 045 } 046 047 @Override 048 public Dashboard createDashboard() { 049 Dashboard dashboard = Dashboard.create(); 050 dashboard.setLayout(DashboardLayout.TWO_COLUMNS); 051 addFirstColumn(dashboard); 052 addSecondColumn(dashboard); 053 return dashboard; 054 } 055 056 private void addFirstColumn(Dashboard dashboard) { 057 Widget timelineWidget = dashboard.addWidget("timeline", 1); 058 timelineWidget.setProperty(METRIC1, "complexity"); 059 timelineWidget.setProperty(METRIC2, "violations_density"); 060 timelineWidget.setProperty(METRIC3, "coverage"); 061 062 Widget sizeTimeMachineWidget = addTimeMachineWidgetOnFirstColumn(dashboard); 063 sizeTimeMachineWidget.setProperty(METRIC1, "ncloc"); 064 sizeTimeMachineWidget.setProperty(METRIC2, "lines"); 065 sizeTimeMachineWidget.setProperty(METRIC3, "statements"); 066 sizeTimeMachineWidget.setProperty(METRIC4, "files"); 067 sizeTimeMachineWidget.setProperty(METRIC5, "classes"); 068 sizeTimeMachineWidget.setProperty(METRIC6, "functions"); 069 sizeTimeMachineWidget.setProperty(METRIC7, "accessors"); 070 071 Widget commentsTimeMachineWidget = addTimeMachineWidgetOnFirstColumn(dashboard); 072 commentsTimeMachineWidget.setProperty(METRIC1, "comment_lines_density"); 073 commentsTimeMachineWidget.setProperty(METRIC2, "comment_lines"); 074 commentsTimeMachineWidget.setProperty(METRIC3, "public_documented_api_density"); 075 commentsTimeMachineWidget.setProperty(METRIC4, "public_undocumented_api"); 076 077 Widget duplicationTimeMachineWidget = addTimeMachineWidgetOnFirstColumn(dashboard); 078 duplicationTimeMachineWidget.setProperty(METRIC1, "duplicated_lines_density"); 079 duplicationTimeMachineWidget.setProperty(METRIC2, "duplicated_lines"); 080 duplicationTimeMachineWidget.setProperty(METRIC3, "duplicated_blocks"); 081 duplicationTimeMachineWidget.setProperty(METRIC4, "duplicated_files"); 082 } 083 084 private void addSecondColumn(Dashboard dashboard) { 085 Widget rulesTimeMachineWidget = addTimeMachineWidgetOnSecondColumn(dashboard); 086 rulesTimeMachineWidget.setProperty(METRIC1, "violations"); 087 rulesTimeMachineWidget.setProperty(METRIC2, "violation_density"); 088 rulesTimeMachineWidget.setProperty(METRIC3, "blocker_violations"); 089 rulesTimeMachineWidget.setProperty(METRIC4, "critical_violations"); 090 rulesTimeMachineWidget.setProperty(METRIC5, "major_violations"); 091 rulesTimeMachineWidget.setProperty(METRIC6, "minor_violations"); 092 rulesTimeMachineWidget.setProperty(METRIC7, "info_violations"); 093 rulesTimeMachineWidget.setProperty(METRIC7, "weighted_violations"); 094 095 Widget complexityTimeMachineWidget = addTimeMachineWidgetOnSecondColumn(dashboard); 096 complexityTimeMachineWidget.setProperty(METRIC1, "complexity"); 097 complexityTimeMachineWidget.setProperty(METRIC2, "function_complexity"); 098 complexityTimeMachineWidget.setProperty(METRIC3, "class_complexity"); 099 complexityTimeMachineWidget.setProperty(METRIC4, "file_complexity"); 100 101 Widget testsTimeMachineWidget = addTimeMachineWidgetOnSecondColumn(dashboard); 102 testsTimeMachineWidget.setProperty(METRIC1, "coverage"); 103 testsTimeMachineWidget.setProperty(METRIC2, "line_coverage"); 104 testsTimeMachineWidget.setProperty(METRIC3, "branch_coverage"); 105 testsTimeMachineWidget.setProperty(METRIC4, "test_success_density"); 106 testsTimeMachineWidget.setProperty(METRIC5, "test_failures"); 107 testsTimeMachineWidget.setProperty(METRIC6, "test_errors"); 108 testsTimeMachineWidget.setProperty(METRIC7, "tests"); 109 testsTimeMachineWidget.setProperty(METRIC7, "test_execution_time"); 110 } 111 112 private Widget addTimeMachineWidgetOnFirstColumn(Dashboard dashboard) { 113 return addTimeMachineWidget(dashboard, 1); 114 } 115 116 private Widget addTimeMachineWidgetOnSecondColumn(Dashboard dashboard) { 117 return addTimeMachineWidget(dashboard, 2); 118 } 119 120 private Widget addTimeMachineWidget(Dashboard dashboard, int columnIndex) { 121 Widget widget = dashboard.addWidget("time_machine", columnIndex); 122 widget.setProperty("displaySparkLine", "true"); 123 return widget; 124 } 125 126}