001 /* 002 * Sonar, open source software quality management tool. 003 * Copyright (C) 2008-2011 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 */ 020 package org.sonar.plugins.core; 021 022 import com.google.common.collect.Lists; 023 import org.sonar.api.CoreProperties; 024 import org.sonar.api.Properties; 025 import org.sonar.api.Property; 026 import org.sonar.api.SonarPlugin; 027 import org.sonar.api.checks.NoSonarFilter; 028 import org.sonar.api.resources.Java; 029 import org.sonar.plugins.core.batch.ExcludedResourceFilter; 030 import org.sonar.plugins.core.batch.MavenInitializer; 031 import org.sonar.plugins.core.batch.ProjectFileSystemLogger; 032 import org.sonar.plugins.core.charts.DistributionAreaChart; 033 import org.sonar.plugins.core.charts.DistributionBarChart; 034 import org.sonar.plugins.core.charts.XradarChart; 035 import org.sonar.plugins.core.colorizers.JavaColorizerFormat; 036 import org.sonar.plugins.core.hotspots.Hotspots; 037 import org.sonar.plugins.core.metrics.UserManagedMetrics; 038 import org.sonar.plugins.core.security.ApplyProjectRolesDecorator; 039 import org.sonar.plugins.core.sensors.*; 040 import org.sonar.plugins.core.testdetailsviewer.TestsViewerDefinition; 041 import org.sonar.plugins.core.timemachine.*; 042 import org.sonar.plugins.core.widgets.*; 043 044 import java.util.List; 045 046 @Properties({ 047 @Property( 048 key = CoreProperties.SERVER_BASE_URL, 049 defaultValue = CoreProperties.SERVER_BASE_URL_DEFAULT_VALUE, 050 name = "Server base URL", 051 description = "HTTP URL of this Sonar server, such as <i>http://yourhost.yourdomain/sonar</i>. This value is used i.e. to create links in emails.", 052 project = false, 053 global = true, 054 category = CoreProperties.CATEGORY_GENERAL), 055 @Property( 056 key = CoreProperties.CORE_COVERAGE_PLUGIN_PROPERTY, 057 defaultValue = "cobertura", 058 name = "Code coverage plugin", 059 description = "Key of the code coverage plugin to use.", 060 project = true, 061 global = true, 062 category = CoreProperties.CATEGORY_CODE_COVERAGE), 063 @Property( 064 key = CoreProperties.CORE_IMPORT_SOURCES_PROPERTY, 065 defaultValue = "" + CoreProperties.CORE_IMPORT_SOURCES_DEFAULT_VALUE, 066 name = "Import sources", 067 description = "Set to false if sources should not be displayed, e.g. for security reasons.", 068 project = true, 069 module = true, 070 global = true, 071 category = CoreProperties.CATEGORY_SECURITY), 072 @Property( 073 key = CoreProperties.CORE_TENDENCY_DEPTH_PROPERTY, 074 defaultValue = "" + CoreProperties.CORE_TENDENCY_DEPTH_DEFAULT_VALUE, 075 name = "Tendency period", 076 description = TendencyDecorator.PROP_DAYS_DESCRIPTION, 077 project = false, 078 global = true, 079 category = CoreProperties.CATEGORY_DIFFERENTIAL_VIEWS), 080 @Property( 081 key = CoreProperties.SKIP_TENDENCIES_PROPERTY, 082 defaultValue = "" + CoreProperties.SKIP_TENDENCIES_DEFAULT_VALUE, 083 name = "Skip tendencies", 084 description = "Skip calculation of measure tendencies", 085 project = true, 086 module = false, 087 global = true, 088 category = CoreProperties.CATEGORY_DIFFERENTIAL_VIEWS), 089 @Property( 090 key = CoreProperties.CORE_SKIPPED_MODULES_PROPERTY, 091 name = "Exclude modules", 092 description = "Maven artifact ids of modules to exclude (comma-separated).", 093 project = true, 094 global = false, 095 category = CoreProperties.CATEGORY_GENERAL), 096 @Property( 097 key = CoreProperties.CORE_RULE_WEIGHTS_PROPERTY, 098 defaultValue = CoreProperties.CORE_RULE_WEIGHTS_DEFAULT_VALUE, 099 name = "Rules weight", 100 description = "A weight is associated to each priority to calculate the Rules Compliance Index.", 101 project = false, 102 global = true, 103 category = CoreProperties.CATEGORY_GENERAL), 104 @Property( 105 key = CoreProperties.CORE_FORCE_AUTHENTICATION_PROPERTY, 106 defaultValue = "" + CoreProperties.CORE_FORCE_AUTHENTICATION_DEFAULT_VALUE, 107 name = "Force user authentication", 108 description = "Forcing user authentication stops un-logged users to access Sonar.", 109 project = false, 110 global = true, 111 category = CoreProperties.CATEGORY_SECURITY), 112 @Property( 113 key = CoreProperties.CORE_ALLOW_USERS_TO_SIGNUP_PROPERTY, 114 defaultValue = "" + CoreProperties.CORE_ALLOW_USERS_TO_SIGNUP_DEAULT_VALUE, 115 name = "Allow users to sign up online", 116 description = "Users can sign up online.", 117 project = false, 118 global = true, 119 category = CoreProperties.CATEGORY_SECURITY), 120 @Property( 121 key = CoreProperties.CORE_DEFAULT_GROUP, 122 defaultValue = CoreProperties.CORE_DEFAULT_GROUP_DEFAULT_VALUE, 123 name = "Default user group", 124 description = "Any new users will automatically join this group.", 125 project = false, 126 global = true, 127 category = CoreProperties.CATEGORY_SECURITY), 128 @Property( 129 key = CoreProperties.CORE_VIOLATION_LOCALE_PROPERTY, 130 defaultValue = "en", 131 name = "Locale used for violation messages", 132 description = "Locale to be used when generating violation messages. It's up to each rule engine to support this global internationalization property", 133 project = true, 134 global = true, 135 category = CoreProperties.CATEGORY_L10N), 136 @Property( 137 key = "sonar.timemachine.period1", 138 name = "Period 1", 139 description = "Period used to compare measures and track new violations. Values are : <ul class='bullet'><li>Number of days before " + 140 "analysis, for example 5.</li><li>A custom date. Format is yyyy-MM-dd, for example 2010-12-25</li><li>'previous_analysis' to " + 141 "compare to previous analysis</li><li>A version, for example 1.2</li></ul>", 142 project = false, 143 global = true, 144 defaultValue = CoreProperties.TIMEMACHINE_DEFAULT_PERIOD_1, 145 category = CoreProperties.CATEGORY_DIFFERENTIAL_VIEWS), 146 @Property( 147 key = "sonar.timemachine.period2", 148 name = "Period 2", 149 description = "See the property 'Period 1'", 150 project = false, 151 global = true, 152 defaultValue = CoreProperties.TIMEMACHINE_DEFAULT_PERIOD_2, 153 category = CoreProperties.CATEGORY_DIFFERENTIAL_VIEWS), 154 @Property( 155 key = "sonar.timemachine.period3", 156 name = "Period 3", 157 description = "See the property 'Period 1'", 158 project = false, 159 global = true, 160 defaultValue = CoreProperties.TIMEMACHINE_DEFAULT_PERIOD_3, 161 category = CoreProperties.CATEGORY_DIFFERENTIAL_VIEWS), 162 @Property( 163 key = "sonar.timemachine.period4", 164 name = "Period 4", 165 description = "Period used to compare measures and track new violations. This property is specific to the project. Values are : " + 166 "<ul class='bullet'><li>Number of days before analysis, for example 5.</li><li>A custom date. Format is yyyy-MM-dd, " + 167 "for example 2010-12-25</li><li>'previous_analysis' to compare to previous analysis</li><li>A version, for example 1.2</li></ul>", 168 project = true, 169 global = false, 170 defaultValue = CoreProperties.TIMEMACHINE_DEFAULT_PERIOD_4, 171 category = CoreProperties.CATEGORY_DIFFERENTIAL_VIEWS), 172 @Property( 173 key = "sonar.timemachine.period5", 174 name = "Period 5", 175 description = "See the property 'Period 4'", 176 project = true, 177 global = false, 178 defaultValue = CoreProperties.TIMEMACHINE_DEFAULT_PERIOD_5, 179 category = CoreProperties.CATEGORY_DIFFERENTIAL_VIEWS), 180 181 182 // SERVER-SIDE TECHNICAL PROPERTIES 183 184 @Property( 185 key = "sonar.useStructureDump", 186 name = "Use Structure Dump", 187 description = "Used when creating database schema", 188 project = false, 189 global = false, 190 defaultValue = "true"), 191 @Property( 192 key = "sonar.authenticator.downcase", 193 name = "Downcase login", 194 description = "Downcase login during user authentication, typically for Active Directory", 195 project = false, 196 global = false, 197 defaultValue = "false"), 198 @Property( 199 key = CoreProperties.CORE_AUTHENTICATOR_CREATE_USERS, 200 name = "Create user accounts", 201 description = "Create accounts when authenticating users via an external system", 202 project = false, 203 global = false, 204 defaultValue = "false"), 205 @Property( 206 key = CoreProperties.CORE_AUTHENTICATOR_IGNORE_STARTUP_FAILURE, 207 name = "Ignore failures during authenticator startup", 208 defaultValue = "false", 209 project = false, 210 global = false) 211 }) 212 public class CorePlugin extends SonarPlugin { 213 214 @SuppressWarnings({ "rawtypes", "unchecked" }) 215 public List getExtensions() { 216 List extensions = Lists.newLinkedList(); 217 218 extensions.add(ProjectFileSystemLogger.class); 219 220 // maven 221 extensions.add(MavenInitializer.class); 222 223 // languages 224 extensions.add(Java.class); 225 226 // metrics 227 extensions.add(UserManagedMetrics.class); 228 229 // pages 230 extensions.add(TestsViewerDefinition.class); 231 extensions.add(Hotspots.class); 232 233 // widgets 234 extensions.add(AlertsWidget.class); 235 extensions.add(CoverageWidget.class); 236 extensions.add(ItCoverageWidget.class); 237 extensions.add(CommentsDuplicationsWidget.class); 238 extensions.add(DescriptionWidget.class); 239 extensions.add(ComplexityWidget.class); 240 extensions.add(RulesWidget.class); 241 extensions.add(SizeWidget.class); 242 extensions.add(EventsWidget.class); 243 extensions.add(CustomMeasuresWidget.class); 244 extensions.add(TimelineWidget.class); 245 extensions.add(TimeMachineWidget.class); 246 extensions.add(HotspotMetricWidget.class); 247 extensions.add(HotspotMostViolatedResourcesWidget.class); 248 extensions.add(HotspotMostViolatedRulesWidget.class); 249 250 // chart 251 extensions.add(XradarChart.class); 252 extensions.add(DistributionBarChart.class); 253 extensions.add(DistributionAreaChart.class); 254 255 // colorizers 256 extensions.add(JavaColorizerFormat.class); 257 258 // batch 259 extensions.add(ProfileSensor.class); 260 extensions.add(ProfileEventsSensor.class); 261 extensions.add(ProjectLinksSensor.class); 262 extensions.add(UnitTestDecorator.class); 263 extensions.add(VersionEventsSensor.class); 264 extensions.add(CheckAlertThresholds.class); 265 extensions.add(GenerateAlertEvents.class); 266 extensions.add(ViolationsDecorator.class); 267 extensions.add(WeightedViolationsDecorator.class); 268 extensions.add(ViolationsDensityDecorator.class); 269 extensions.add(LineCoverageDecorator.class); 270 extensions.add(CoverageDecorator.class); 271 extensions.add(BranchCoverageDecorator.class); 272 extensions.add(ItLineCoverageDecorator.class); 273 extensions.add(ItCoverageDecorator.class); 274 extensions.add(ItBranchCoverageDecorator.class); 275 extensions.add(ApplyProjectRolesDecorator.class); 276 extensions.add(ExcludedResourceFilter.class); 277 extensions.add(CommentDensityDecorator.class); 278 extensions.add(NoSonarFilter.class); 279 extensions.add(DirectoriesDecorator.class); 280 extensions.add(FilesDecorator.class); 281 extensions.add(CloseReviewsDecorator.class); 282 extensions.add(ReferenceAnalysis.class); 283 extensions.add(ManualMeasureDecorator.class); 284 285 // time machine 286 extensions.add(TendencyDecorator.class); 287 extensions.add(VariationDecorator.class); 288 extensions.add(ViolationTrackingDecorator.class); 289 extensions.add(ViolationPersisterDecorator.class); 290 extensions.add(NewViolationsDecorator.class); 291 extensions.add(TimeMachineConfigurationPersister.class); 292 extensions.add(NewCoverageFileAnalyzer.class); 293 extensions.add(NewItCoverageFileAnalyzer.class); 294 extensions.add(NewCoverageAggregator.class); 295 296 return extensions; 297 } 298 }