diff options
author | Fabrice Bellingard <bellingard@gmail.com> | 2012-03-21 10:43:28 +0100 |
---|---|---|
committer | Fabrice Bellingard <bellingard@gmail.com> | 2012-03-21 13:55:24 +0100 |
commit | 06a9f756793c6403b4bf67d5b61e86a7b57e404e (patch) | |
tree | 666021553de9138b9bb66b3959fb0d067809b0e7 | |
parent | cafd2f8ff7f99ed218bc263f7a942828c5949454 (diff) | |
download | sonarqube-06a9f756793c6403b4bf67d5b61e86a7b57e404e.tar.gz sonarqube-06a9f756793c6403b4bf67d5b61e86a7b57e404e.zip |
SONAR-2977 Stop Sonar if more than 1 default profile for a language
-rw-r--r-- | sonar-server/src/main/java/org/sonar/server/startup/ActivateDefaultProfiles.java | 4 | ||||
-rw-r--r-- | sonar-server/src/main/java/org/sonar/server/startup/RegisterProvidedProfiles.java | 40 |
2 files changed, 35 insertions, 9 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/startup/ActivateDefaultProfiles.java b/sonar-server/src/main/java/org/sonar/server/startup/ActivateDefaultProfiles.java index f597ee3214b..29d76befbdf 100644 --- a/sonar-server/src/main/java/org/sonar/server/startup/ActivateDefaultProfiles.java +++ b/sonar-server/src/main/java/org/sonar/server/startup/ActivateDefaultProfiles.java @@ -70,6 +70,10 @@ public final class ActivateDefaultProfiles { profileToActivate = profiles.get(0); } } + activateProfileIfNeeded(session, profileToActivate, oneProfileIsActivated); + } + + private void activateProfileIfNeeded(DatabaseSession session, RulesProfile profileToActivate, boolean oneProfileIsActivated) { if (!oneProfileIsActivated && profileToActivate != null) { profileToActivate.setDefaultProfile(true); session.saveWithoutFlush(profileToActivate); diff --git a/sonar-server/src/main/java/org/sonar/server/startup/RegisterProvidedProfiles.java b/sonar-server/src/main/java/org/sonar/server/startup/RegisterProvidedProfiles.java index b9a803b49d8..d8d504a0f2c 100644 --- a/sonar-server/src/main/java/org/sonar/server/startup/RegisterProvidedProfiles.java +++ b/sonar-server/src/main/java/org/sonar/server/startup/RegisterProvidedProfiles.java @@ -19,8 +19,12 @@ */ package org.sonar.server.startup; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -28,16 +32,19 @@ import org.slf4j.LoggerFactory; import org.sonar.api.database.DatabaseSession; import org.sonar.api.profiles.ProfileDefinition; import org.sonar.api.profiles.RulesProfile; -import org.sonar.api.rules.*; +import org.sonar.api.rules.ActiveRule; +import org.sonar.api.rules.Rule; +import org.sonar.api.rules.RuleFinder; +import org.sonar.api.rules.RuleParam; +import org.sonar.api.rules.RuleQuery; +import org.sonar.api.utils.SonarException; import org.sonar.api.utils.TimeProfiler; import org.sonar.api.utils.ValidationMessages; import org.sonar.jpa.session.DatabaseSessionFactory; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Set; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; public final class RegisterProvidedProfiles { @@ -72,19 +79,34 @@ public final class RegisterProvidedProfiles { profiler.stop(); } - List<RulesProfile> createProfiles() { + private List<RulesProfile> createProfiles() { List<RulesProfile> result = Lists.newArrayList(); + Map<String, RulesProfile> defaultProfilesByLanguage = Maps.newHashMap(); for (ProfileDefinition definition : definitions) { ValidationMessages validation = ValidationMessages.create(); RulesProfile profile = definition.createProfile(validation); validation.log(LOGGER); if (profile != null && !validation.hasErrors()) { result.add(profile); + checkIfNoMoreThanOneDefaultProfile(defaultProfilesByLanguage, profile); } } return result; } + private void checkIfNoMoreThanOneDefaultProfile(Map<String, RulesProfile> defaultProfilesByLanguage, RulesProfile profile) { + if (profile.getDefaultProfile()) { + RulesProfile defaultProfileForLanguage = defaultProfilesByLanguage.get(profile.getLanguage()); + if (defaultProfileForLanguage == null) { + defaultProfilesByLanguage.put(profile.getLanguage(), profile); + } else { + throw new SonarException("Language " + profile.getLanguage() + " can't have 2 default provided profiles: " + + profile.getName() + " and " + + defaultProfileForLanguage.getName()); + } + } + } + private void cleanProvidedProfiles(List<RulesProfile> profiles, DatabaseSession session) { TimeProfiler profiler = new TimeProfiler().start("Clean provided profiles"); List<RulesProfile> existingProfiles = session.getResults(RulesProfile.class, "provided", true); |