]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6821 WS qualityprofiles/search handle profile name when asking for default...
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 1 Oct 2015 08:44:48 +0000 (10:44 +0200)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 1 Oct 2015 08:46:19 +0000 (10:46 +0200)
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/SearchAction.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/SearchDataLoader.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/SearchActionTest.java

index 552f6b07971f31be2cffd6f30f9d0cfb0bcd52a6..beedca2c6cfc63cd48653eb5644fd191c5e1b0f5 100644 (file)
@@ -74,13 +74,13 @@ public class SearchAction implements QProfileWsAction {
     action
       .createParam(PARAM_DEFAULTS)
       .setDescription(format("Return the quality profile marked as default for each language. " +
-        "If provided, then the parameters '%s', '%s' and '%s' must not be set.",
-        PARAM_LANGUAGE, PARAM_PROJECT_KEY, PARAM_PROFILE_NAME))
+        "If provided, then the parameters '%s', '%s' must not be set.",
+        PARAM_LANGUAGE, PARAM_PROJECT_KEY))
       .setDefaultValue(false)
       .setBooleanPossibleValues();
 
     action.createParam(PARAM_PROFILE_NAME)
-      .setDescription(format("Profile name. It should be always used with the '%s' parameter.", PARAM_PROJECT_KEY))
+      .setDescription(format("Profile name. It should be always used with the '%s' or '%s' parameter.", PARAM_PROJECT_KEY, PARAM_DEFAULTS))
       .setExampleValue("SonarQube Way");
   }
 
index 844c2b3108444eeaf64731920eb91b7e24d18537..0814a84e21e9fb2cba22bc13fb5a7b00abf1bc84 100644 (file)
@@ -56,7 +56,8 @@ public class SearchDataLoader {
   private final DbClient dbClient;
   private final ComponentFinder componentFinder;
 
-  public SearchDataLoader(Languages languages, QProfileLookup profileLookup, QProfileLoader profileLoader, QProfileFactory profileFactory, DbClient dbClient, ComponentFinder componentFinder) {
+  public SearchDataLoader(Languages languages, QProfileLookup profileLookup, QProfileLoader profileLoader, QProfileFactory profileFactory, DbClient dbClient,
+    ComponentFinder componentFinder) {
     this.languages = languages;
     this.profileLookup = profileLookup;
     this.profileLoader = profileLoader;
@@ -77,7 +78,7 @@ public class SearchDataLoader {
   private List<QProfile> findProfiles(Request request) {
     List<QProfile> profiles;
     if (askDefaultProfiles(request)) {
-      profiles = findDefaultProfiles();
+      profiles = findDefaultProfiles(request);
     } else if (hasComponentKey(request)) {
       profiles = findProjectProfiles(request);
     } else {
@@ -95,8 +96,7 @@ public class SearchDataLoader {
   private List<QProfile> findAllProfiles(Request request) {
     String language = request.param(PARAM_LANGUAGE);
 
-    List<QProfile> profiles = language != null ?
-      profileLookup.profiles(language)
+    List<QProfile> profiles = language != null ? profileLookup.profiles(language)
       : profileLookup.allProfiles();
 
     return from(profiles)
@@ -133,13 +133,14 @@ public class SearchDataLoader {
     }
   }
 
-  private List<QProfile> findDefaultProfiles() {
+  private List<QProfile> findDefaultProfiles(Request request) {
+    String profileName = request.param(PARAM_PROFILE_NAME);
     List<QProfile> profiles = new ArrayList<>();
 
     DbSession dbSession = dbClient.openSession(false);
     try {
       for (Language language : languages.all()) {
-        profiles.add(getDefaultProfile(dbSession, language.getKey()));
+        profiles.add(getDefaultProfile(dbSession, language.getKey(), profileName));
       }
     } finally {
       dbClient.closeSession(dbSession);
@@ -175,8 +176,11 @@ public class SearchDataLoader {
     return profileDtoToQProfile(profileDto);
   }
 
-  private QProfile getDefaultProfile(DbSession dbSession, String languageKey) {
-    QualityProfileDto profile = profileFactory.getDefault(dbSession, languageKey);
+  private QProfile getDefaultProfile(DbSession dbSession, String languageKey, @Nullable String profileName) {
+    QualityProfileDto profile = profileName != null ? profileFactory.getByNameAndLanguage(dbSession, profileName, languageKey) : null;
+    if (profile == null) {
+      profile = profileFactory.getDefault(dbSession, languageKey);
+    }
     checkState(profile != null, format("No quality profile can been found on language '%s'", languageKey));
 
     return profileDtoToQProfile(profile);
@@ -190,7 +194,7 @@ public class SearchDataLoader {
 
     checkRequest(!hasLanguage || (!hasComponentKey && !hasProfileName && !isDefault),
       "The language parameter cannot be provided at the same time than the component key or profile name.");
-    checkRequest(!isDefault || (!hasComponentKey && !hasProfileName), "The default parameter cannot be provided at the same time than the component key or profile name");
+    checkRequest(!isDefault || !hasComponentKey, "The default parameter cannot be provided at the same time than the component key");
   }
 
   private static boolean hasProfileName(Request request) {
index 18ec96c500602cab4c2e3d11e2c7d2399ff31e9e..a0ae237b1bd5997cb119a249529a315aa2148825 100644 (file)
@@ -170,24 +170,25 @@ public class SearchActionTest {
   }
 
   @Test
-  public void search_for_default_qp() {
+  public void search_for_default_qp_with_profile_name() {
     QualityProfileDto qualityProfileOnXoo1 = QualityProfileDto.createFor("sonar-way-xoo1-12345")
       .setLanguage(xoo1.getKey())
       .setName("Sonar way")
-      .setDefault(true);
+      .setDefault(false);
     QualityProfileDto qualityProfileOnXoo2 = QualityProfileDto.createFor("sonar-way-xoo2-12345")
       .setLanguage(xoo2.getKey())
       .setName("Sonar way")
       .setDefault(true);
     QualityProfileDto anotherQualityProfileOnXoo1 = QualityProfileDto.createFor("sonar-way-xoo1-45678")
       .setLanguage(xoo1.getKey())
-      .setName("Sonar way")
-      .setDefault(false);
+      .setName("Another way")
+      .setDefault(true);
     qualityProfileDb.insertQualityProfiles(qualityProfileOnXoo1, qualityProfileOnXoo2, anotherQualityProfileOnXoo1);
     commit();
 
     String result = ws.newRequest()
       .setParam(PARAM_DEFAULTS, Boolean.TRUE.toString())
+      .setParam(PARAM_PROFILE_NAME, "Sonar way")
       .execute().getInput();
 
     assertThat(result)