aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2015-11-13 15:06:10 +0100
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2015-11-17 13:41:04 +0100
commit0444203efdb03f630a7912bc62bab892cbd9bbdc (patch)
treee2caa558a23b2bf62d87f051af459ea54421df91
parent40cf347e9aa2ded35a8798b8aec0abbf2e993183 (diff)
downloadsonarqube-0444203efdb03f630a7912bc62bab892cbd9bbdc.tar.gz
sonarqube-0444203efdb03f630a7912bc62bab892cbd9bbdc.zip
SONAR-6947 api/qualityprofiles/search use SearchWsRequest
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/SearchAction.java26
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/SearchDataLoader.java42
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizer.java2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/cache/ProjectCacheSynchronizer.java2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/repository/DefaultQualityProfileLoader.java8
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/repository/QualityProfileLoader.java2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/repository/QualityProfileProvider.java2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/rule/ModuleQProfiles.java2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizerTest.java2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/cache/ProjectCacheSynchronizerTest.java2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/mediumtest/BatchMediumTester.java2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/repository/DefaultQualityProfileLoaderTest.java6
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/repository/QualityProfileProviderTest.java4
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/rule/ActiveRulesProviderTest.java2
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofile/QualityProfilesWsClient.java44
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofile/SearchWsRequest.java70
-rw-r--r--sonar-ws/src/main/protobuf/ws-qualityprofiles.proto2
17 files changed, 171 insertions, 49 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/SearchAction.java
index beedca2c6cf..6e55813f892 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/SearchAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/SearchAction.java
@@ -29,8 +29,10 @@ import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.server.ws.WebService.NewAction;
import org.sonar.server.qualityprofile.QProfile;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
+import org.sonarqube.ws.client.qualityprofile.SearchWsRequest;
import static com.google.common.collect.Maps.uniqueIndex;
import static java.lang.String.format;
@@ -86,16 +88,28 @@ public class SearchAction implements QProfileWsAction {
@Override
public void handle(Request request, Response response) throws Exception {
+ SearchWsResponse searchWsResponse = doHandle(toSearchWsRequest(request));
+ writeProtobuf(searchWsResponse, request, response);
+ }
+
+ private SearchWsResponse doHandle(SearchWsRequest request) {
SearchData data = dataLoader.load(request);
- WsSearchResponse protobufResponse = buildResponse(data);
- writeProtobuf(protobufResponse, request, response);
+ return buildResponse(data);
+ }
+
+ private static SearchWsRequest toSearchWsRequest(Request request) {
+ return new SearchWsRequest()
+ .setProjectKey(request.param(PARAM_PROJECT_KEY))
+ .setProfileName(request.param(PARAM_PROFILE_NAME))
+ .setDefaults(request.paramAsBoolean(PARAM_DEFAULTS))
+ .setLanguage(request.param(PARAM_LANGUAGE));
}
- private WsSearchResponse buildResponse(SearchData data) {
+ private SearchWsResponse buildResponse(SearchData data) {
List<QProfile> profiles = data.getProfiles();
Map<String, QProfile> profilesByKey = uniqueIndex(profiles, new QProfileToKey());
- WsSearchResponse.Builder response = WsSearchResponse.newBuilder();
+ QualityProfiles.SearchWsResponse.Builder response = QualityProfiles.SearchWsResponse.newBuilder();
QualityProfile.Builder profileBuilder = QualityProfile.newBuilder();
for (QProfile profile : profiles) {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/SearchDataLoader.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/SearchDataLoader.java
index 0814a84e21e..d39178a3468 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/SearchDataLoader.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/SearchDataLoader.java
@@ -28,7 +28,6 @@ import javax.annotation.Nullable;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.sonar.api.resources.Language;
import org.sonar.api.resources.Languages;
-import org.sonar.api.server.ws.Request;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.component.ComponentDto;
@@ -38,14 +37,11 @@ import org.sonar.server.qualityprofile.QProfile;
import org.sonar.server.qualityprofile.QProfileFactory;
import org.sonar.server.qualityprofile.QProfileLoader;
import org.sonar.server.qualityprofile.QProfileLookup;
+import org.sonarqube.ws.client.qualityprofile.SearchWsRequest;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.FluentIterable.from;
import static java.lang.String.format;
-import static org.sonar.server.qualityprofile.ws.SearchAction.PARAM_DEFAULTS;
-import static org.sonar.server.qualityprofile.ws.SearchAction.PARAM_LANGUAGE;
-import static org.sonar.server.qualityprofile.ws.SearchAction.PARAM_PROFILE_NAME;
-import static org.sonar.server.qualityprofile.ws.SearchAction.PARAM_PROJECT_KEY;
import static org.sonar.server.ws.WsUtils.checkRequest;
public class SearchDataLoader {
@@ -66,7 +62,7 @@ public class SearchDataLoader {
this.componentFinder = componentFinder;
}
- SearchData load(Request request) {
+ SearchData load(SearchWsRequest request) {
validateRequest(request);
return new SearchData()
@@ -75,7 +71,7 @@ public class SearchDataLoader {
.setProjectCountByProfileKey(dbClient.qualityProfileDao().countProjectsByProfileKey());
}
- private List<QProfile> findProfiles(Request request) {
+ private List<QProfile> findProfiles(SearchWsRequest request) {
List<QProfile> profiles;
if (askDefaultProfiles(request)) {
profiles = findDefaultProfiles(request);
@@ -93,8 +89,8 @@ public class SearchDataLoader {
.toSortedList(QProfileComparator.INSTANCE);
}
- private List<QProfile> findAllProfiles(Request request) {
- String language = request.param(PARAM_LANGUAGE);
+ private List<QProfile> findAllProfiles(SearchWsRequest request) {
+ String language = request.getLanguage();
List<QProfile> profiles = language != null ? profileLookup.profiles(language)
: profileLookup.allProfiles();
@@ -104,9 +100,9 @@ public class SearchDataLoader {
.toList();
}
- private List<QProfile> findProjectProfiles(Request request) {
- String moduleKey = request.param(PARAM_PROJECT_KEY);
- String profileName = request.param(PARAM_PROFILE_NAME);
+ private List<QProfile> findProjectProfiles(SearchWsRequest request) {
+ String moduleKey = request.getProjectKey();
+ String profileName = request.getProfileName();
List<QProfile> profiles = new ArrayList<>();
@@ -133,8 +129,8 @@ public class SearchDataLoader {
}
}
- private List<QProfile> findDefaultProfiles(Request request) {
- String profileName = request.param(PARAM_PROFILE_NAME);
+ private List<QProfile> findDefaultProfiles(SearchWsRequest request) {
+ String profileName = request.getProfileName();
List<QProfile> profiles = new ArrayList<>();
DbSession dbSession = dbClient.openSession(false);
@@ -186,7 +182,7 @@ public class SearchDataLoader {
return profileDtoToQProfile(profile);
}
- private static void validateRequest(Request request) {
+ private static void validateRequest(SearchWsRequest request) {
boolean hasLanguage = hasLanguage(request);
boolean isDefault = askDefaultProfiles(request);
boolean hasComponentKey = hasComponentKey(request);
@@ -197,20 +193,20 @@ public class SearchDataLoader {
checkRequest(!isDefault || !hasComponentKey, "The default parameter cannot be provided at the same time than the component key");
}
- private static boolean hasProfileName(Request request) {
- return request.hasParam(PARAM_PROFILE_NAME);
+ private static boolean hasProfileName(SearchWsRequest request) {
+ return request.getProfileName() != null;
}
- private static boolean hasComponentKey(Request request) {
- return request.hasParam(PARAM_PROJECT_KEY);
+ private static boolean hasComponentKey(SearchWsRequest request) {
+ return request.getProjectKey() != null;
}
- private static Boolean askDefaultProfiles(Request request) {
- return request.paramAsBoolean(PARAM_DEFAULTS);
+ private static Boolean askDefaultProfiles(SearchWsRequest request) {
+ return request.getDefaults();
}
- private static boolean hasLanguage(Request request) {
- return request.hasParam(PARAM_LANGUAGE);
+ private static boolean hasLanguage(SearchWsRequest request) {
+ return request.getLanguage() != null;
}
private enum QProfileComparator implements Comparator<QProfile> {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizer.java b/sonar-batch/src/main/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizer.java
index b9ec4f0b503..f5cc9a540e6 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizer.java
@@ -30,7 +30,7 @@ import org.sonar.api.utils.log.Profiler;
import org.sonar.batch.repository.QualityProfileLoader;
import org.sonar.batch.rule.ActiveRulesLoader;
import org.sonar.batch.rule.RulesLoader;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
public class NonAssociatedCacheSynchronizer {
private static final Logger LOG = LoggerFactory.getLogger(NonAssociatedCacheSynchronizer.class);
diff --git a/sonar-batch/src/main/java/org/sonar/batch/cache/ProjectCacheSynchronizer.java b/sonar-batch/src/main/java/org/sonar/batch/cache/ProjectCacheSynchronizer.java
index 9ff8b6bb4ed..b29acea469a 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/cache/ProjectCacheSynchronizer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/cache/ProjectCacheSynchronizer.java
@@ -40,7 +40,7 @@ import org.sonar.batch.repository.ServerIssuesLoader;
import org.sonar.batch.repository.user.UserRepositoryLoader;
import org.sonar.batch.rule.ActiveRulesLoader;
import org.sonar.batch.rule.RulesLoader;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
public class ProjectCacheSynchronizer {
private static final Logger LOG = LoggerFactory.getLogger(ProjectCacheSynchronizer.class);
diff --git a/sonar-batch/src/main/java/org/sonar/batch/repository/DefaultQualityProfileLoader.java b/sonar-batch/src/main/java/org/sonar/batch/repository/DefaultQualityProfileLoader.java
index c8cc3f391cf..bd382543e52 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/repository/DefaultQualityProfileLoader.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/repository/DefaultQualityProfileLoader.java
@@ -19,11 +19,11 @@
*/
package org.sonar.batch.repository;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse;
import org.sonar.batch.util.BatchUtils;
import org.apache.commons.io.IOUtils;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
import org.apache.commons.lang.mutable.MutableBoolean;
import org.sonar.batch.cache.WSLoaderResult;
import org.sonar.batch.cache.WSLoader;
@@ -74,10 +74,10 @@ public class DefaultQualityProfileLoader implements QualityProfileLoader {
fromCache.setValue(result.isFromCache());
}
InputStream is = result.get();
- WsSearchResponse profiles = null;
+ SearchWsResponse profiles = null;
try {
- profiles = WsSearchResponse.parseFrom(is);
+ profiles = SearchWsResponse.parseFrom(is);
} catch (IOException e) {
throw new IllegalStateException("Failed to load quality profiles", e);
} finally {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/repository/QualityProfileLoader.java b/sonar-batch/src/main/java/org/sonar/batch/repository/QualityProfileLoader.java
index 266d24a3d7a..8ca2f6b5020 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/repository/QualityProfileLoader.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/repository/QualityProfileLoader.java
@@ -20,7 +20,7 @@
package org.sonar.batch.repository;
import org.apache.commons.lang.mutable.MutableBoolean;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
import javax.annotation.Nullable;
diff --git a/sonar-batch/src/main/java/org/sonar/batch/repository/QualityProfileProvider.java b/sonar-batch/src/main/java/org/sonar/batch/repository/QualityProfileProvider.java
index b53635e7bd5..e3de47efb81 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/repository/QualityProfileProvider.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/repository/QualityProfileProvider.java
@@ -25,7 +25,7 @@ import org.sonar.api.utils.log.Profiler;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.apache.commons.lang.mutable.MutableBoolean;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
import org.sonar.batch.analysis.DefaultAnalysisMode;
import org.sonar.api.batch.bootstrap.ProjectKey;
diff --git a/sonar-batch/src/main/java/org/sonar/batch/rule/ModuleQProfiles.java b/sonar-batch/src/main/java/org/sonar/batch/rule/ModuleQProfiles.java
index 3f8d5cdd8ae..9321ddd357e 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/rule/ModuleQProfiles.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/rule/ModuleQProfiles.java
@@ -21,7 +21,7 @@ package org.sonar.batch.rule;
import org.sonar.api.utils.DateUtils;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
import com.google.common.collect.ImmutableMap;
import org.sonar.api.batch.BatchSide;
diff --git a/sonar-batch/src/test/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizerTest.java b/sonar-batch/src/test/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizerTest.java
index 6bbde374460..dd3ce4f5598 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizerTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizerTest.java
@@ -29,7 +29,7 @@ import org.sonar.batch.repository.QualityProfileLoader;
import org.sonar.batch.rule.ActiveRulesLoader;
import org.sonar.batch.rule.LoadedActiveRule;
import org.sonar.batch.rule.RulesLoader;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
diff --git a/sonar-batch/src/test/java/org/sonar/batch/cache/ProjectCacheSynchronizerTest.java b/sonar-batch/src/test/java/org/sonar/batch/cache/ProjectCacheSynchronizerTest.java
index fabfe251eee..e2de472f795 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/cache/ProjectCacheSynchronizerTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/cache/ProjectCacheSynchronizerTest.java
@@ -46,7 +46,7 @@ import org.sonar.batch.rule.ActiveRulesLoader;
import org.sonar.batch.rule.DefaultActiveRulesLoader;
import org.sonar.batch.rule.LoadedActiveRule;
import org.sonar.batch.rule.RulesLoader;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/BatchMediumTester.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/BatchMediumTester.java
index c330d304a8e..8245af78c82 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/BatchMediumTester.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/BatchMediumTester.java
@@ -28,7 +28,7 @@ import com.google.common.collect.Table;
import com.google.common.collect.HashBasedTable;
import org.sonar.batch.repository.ProjectRepositories;
import org.sonar.batch.rule.ActiveRulesLoader;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
import org.sonar.batch.repository.QualityProfileLoader;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.mutable.MutableBoolean;
diff --git a/sonar-batch/src/test/java/org/sonar/batch/repository/DefaultQualityProfileLoaderTest.java b/sonar-batch/src/test/java/org/sonar/batch/repository/DefaultQualityProfileLoaderTest.java
index f0215aa18e2..b3c2b79dcb3 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/repository/DefaultQualityProfileLoaderTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/repository/DefaultQualityProfileLoaderTest.java
@@ -19,10 +19,10 @@
*/
package org.sonar.batch.repository;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse;
+import org.sonarqube.ws.QualityProfiles;
import com.google.common.io.Resources;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
import org.sonar.batch.cache.WSLoaderResult;
import org.sonar.batch.cache.WSLoader;
import org.junit.Rule;
@@ -102,7 +102,7 @@ public class DefaultQualityProfileLoaderTest {
private static InputStream createEncodedQP(String... names) throws IOException {
ByteArrayOutputStream os = new ByteArrayOutputStream();
- WsSearchResponse.Builder responseBuilder = WsSearchResponse.newBuilder();
+ QualityProfiles.SearchWsResponse.Builder responseBuilder = QualityProfiles.SearchWsResponse.newBuilder();
for (String n : names) {
QualityProfile qp = QualityProfile.newBuilder().setKey(n).setName(n).setLanguage("lang").build();
diff --git a/sonar-batch/src/test/java/org/sonar/batch/repository/QualityProfileProviderTest.java b/sonar-batch/src/test/java/org/sonar/batch/repository/QualityProfileProviderTest.java
index 799022ecbe3..567dcd1380d 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/repository/QualityProfileProviderTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/repository/QualityProfileProviderTest.java
@@ -21,12 +21,10 @@ package org.sonar.batch.repository;
import static org.mockito.Mockito.when;
-import org.mockito.Matchers;
-
import org.apache.commons.lang.mutable.MutableBoolean;
import org.sonar.api.batch.bootstrap.ProjectKey;
import org.sonar.batch.analysis.DefaultAnalysisMode;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
import java.util.ArrayList;
import java.util.List;
diff --git a/sonar-batch/src/test/java/org/sonar/batch/rule/ActiveRulesProviderTest.java b/sonar-batch/src/test/java/org/sonar/batch/rule/ActiveRulesProviderTest.java
index 8a18f87a51d..3df796e805b 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/rule/ActiveRulesProviderTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/rule/ActiveRulesProviderTest.java
@@ -29,7 +29,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.rule.RuleKey;
-import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse.QualityProfile;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofile/QualityProfilesWsClient.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofile/QualityProfilesWsClient.java
new file mode 100644
index 00000000000..2adb7528af2
--- /dev/null
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofile/QualityProfilesWsClient.java
@@ -0,0 +1,44 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonarqube.ws.client.qualityprofile;
+
+import org.sonarqube.ws.QualityProfiles.SearchWsResponse;
+import org.sonarqube.ws.client.WsClient;
+
+import static org.sonarqube.ws.client.WsRequest.newGetRequest;
+
+public class QualityProfilesWsClient {
+ private final WsClient wsClient;
+
+ public QualityProfilesWsClient(WsClient wsClient) {
+ this.wsClient = wsClient;
+ }
+
+ public SearchWsResponse search(SearchWsRequest request) {
+ return wsClient.execute(
+ newGetRequest("search")
+ .setParam("defaults", request.getDefaults())
+ .setParam("language", request.getLanguage())
+ .setParam("profileName", request.getProfileName())
+ .setParam("projectKey", request.getProjectKey()),
+ SearchWsResponse.parser());
+ }
+}
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofile/SearchWsRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofile/SearchWsRequest.java
new file mode 100644
index 00000000000..60df4b4eff2
--- /dev/null
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofile/SearchWsRequest.java
@@ -0,0 +1,70 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonarqube.ws.client.qualityprofile;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+
+public class SearchWsRequest {
+ private boolean defaults;
+ private String language;
+ private String profileName;
+ private String projectKey;
+
+ public boolean getDefaults() {
+ return defaults;
+ }
+
+ public SearchWsRequest setDefaults(boolean defaults) {
+ this.defaults = defaults;
+ return this;
+ }
+
+ @CheckForNull
+ public String getLanguage() {
+ return language;
+ }
+
+ public SearchWsRequest setLanguage(@Nullable String language) {
+ this.language = language;
+ return this;
+ }
+
+ @CheckForNull
+ public String getProfileName() {
+ return profileName;
+ }
+
+ public SearchWsRequest setProfileName(@Nullable String profileName) {
+ this.profileName = profileName;
+ return this;
+ }
+
+ @CheckForNull
+ public String getProjectKey() {
+ return projectKey;
+ }
+
+ public SearchWsRequest setProjectKey(@Nullable String projectKey) {
+ this.projectKey = projectKey;
+ return this;
+ }
+}
diff --git a/sonar-ws/src/main/protobuf/ws-qualityprofiles.proto b/sonar-ws/src/main/protobuf/ws-qualityprofiles.proto
index 25dd11c94fe..7ec0752759a 100644
--- a/sonar-ws/src/main/protobuf/ws-qualityprofiles.proto
+++ b/sonar-ws/src/main/protobuf/ws-qualityprofiles.proto
@@ -25,7 +25,7 @@ option java_outer_classname = "QualityProfiles";
option optimize_for = SPEED;
// WS api/qualityprofiles/search
-message WsSearchResponse {
+message SearchWsResponse {
repeated QualityProfile profiles = 1;
message QualityProfile {