diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2017-02-17 16:19:57 +0100 |
---|---|---|
committer | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2017-02-17 16:23:24 +0100 |
commit | fa327b38613d18ec445831242f84d500bf284ac3 (patch) | |
tree | 940811204fae4b23fd53a067a72b64d1cfd902c3 /sonar-ws/src/main | |
parent | f4039bbb34726f62ee61e45503c2bfa6c87dc3fb (diff) | |
parent | 3b673b37f88fc38b84244bd541d20ee9ac510486 (diff) | |
download | sonarqube-fa327b38613d18ec445831242f84d500bf284ac3.tar.gz sonarqube-fa327b38613d18ec445831242f84d500bf284ac3.zip |
Merge branch 'branch-6.3'
Diffstat (limited to 'sonar-ws/src/main')
4 files changed, 150 insertions, 1 deletions
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsService.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsService.java index e3142f248bd..b2646fa7ccc 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsService.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsService.java @@ -19,16 +19,23 @@ */ package org.sonarqube.ws.client.project; +import com.google.common.base.Joiner; +import org.sonarqube.ws.WsProjects; import org.sonarqube.ws.WsProjects.CreateWsResponse; import org.sonarqube.ws.client.BaseService; +import org.sonarqube.ws.client.GetRequest; import org.sonarqube.ws.client.PostRequest; import org.sonarqube.ws.client.WsConnector; +import static org.sonar.api.server.ws.WebService.Param.*; import static org.sonarqube.ws.client.project.ProjectsWsParameters.ACTION_CREATE; +import static org.sonarqube.ws.client.project.ProjectsWsParameters.ACTION_SEARCH; import static org.sonarqube.ws.client.project.ProjectsWsParameters.CONTROLLER; import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_BRANCH; import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_NAME; +import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_PROJECT; +import static org.sonarqube.ws.client.project.ProjectsWsParameters.PARAM_QUALIFIERS; /** * Maps web service {@code api/projects}. @@ -47,7 +54,7 @@ public class ProjectsService extends BaseService { */ public CreateWsResponse create(CreateRequest project) { PostRequest request = new PostRequest(path(ACTION_CREATE)) - .setParam("organization", project.getOrganization()) + .setParam(PARAM_ORGANIZATION, project.getOrganization()) .setParam(PARAM_PROJECT, project.getKey()) .setParam(PARAM_NAME, project.getName()) .setParam(PARAM_BRANCH, project.getBranch()); @@ -62,4 +69,14 @@ public class ProjectsService extends BaseService { .setParam("id", request.getId()) .setParam("key", request.getKey())); } + + public WsProjects.SearchWsResponse search(SearchWsRequest request) { + GetRequest get = new GetRequest(path(ACTION_SEARCH)) + .setParam(PARAM_ORGANIZATION, request.getOrganization()) + .setParam(PARAM_QUALIFIERS, Joiner.on(",").join(request.getQualifiers())) + .setParam(TEXT_QUERY, request.getQuery()) + .setParam(PAGE, request.getPage()) + .setParam(PAGE_SIZE, request.getPageSize()); + return call(get, WsProjects.SearchWsResponse.parser()); + } } diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsWsParameters.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsWsParameters.java index 713618cbdba..b735334df8f 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsWsParameters.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsWsParameters.java @@ -21,15 +21,20 @@ package org.sonarqube.ws.client.project; public class ProjectsWsParameters { + public static final int MAX_PAGE_SIZE = 500; + public static final String CONTROLLER = "api/projects"; public static final String ACTION_CREATE = "create"; public static final String ACTION_INDEX = "index"; + public static final String ACTION_SEARCH = "search"; public static final String PARAM_PROJECT = "project"; public static final String PARAM_PROJECT_ID = "projectId"; public static final String PARAM_NAME = "name"; public static final String PARAM_BRANCH = "branch"; + public static final String PARAM_ORGANIZATION = "organization"; + public static final String PARAM_QUALIFIERS = "qualifiers"; private ProjectsWsParameters() { // static utils only diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/project/SearchWsRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/SearchWsRequest.java new file mode 100644 index 00000000000..0bb627a9c61 --- /dev/null +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/project/SearchWsRequest.java @@ -0,0 +1,113 @@ +/* + * SonarQube + * Copyright (C) 2009-2017 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program 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. + * + * This program 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.project; + +import java.util.ArrayList; +import java.util.List; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; + +import static com.google.common.base.Preconditions.checkArgument; +import static java.util.Objects.requireNonNull; +import static org.sonarqube.ws.client.project.ProjectsWsParameters.MAX_PAGE_SIZE; + +public class SearchWsRequest { + + private final String organization; + private final String query; + private final List<String> qualifiers; + private final Integer page; + private final Integer pageSize; + + public SearchWsRequest(Builder builder) { + this.organization = builder.organization; + this.query = builder.query; + this.qualifiers = builder.qualifiers; + this.page = builder.page; + this.pageSize = builder.pageSize; + } + + @CheckForNull + public String getOrganization() { + return organization; + } + + public List<String> getQualifiers() { + return qualifiers; + } + + @CheckForNull + public Integer getPage() { + return page; + } + + @CheckForNull + public Integer getPageSize() { + return pageSize; + } + + @CheckForNull + public String getQuery() { + return query; + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder { + private String organization; + private List<String> qualifiers = new ArrayList<>(); + private Integer page; + private Integer pageSize; + private String query; + + public Builder setOrganization(@Nullable String organization) { + this.organization = organization; + return this; + } + + public Builder setQualifiers(List<String> qualifiers) { + this.qualifiers = requireNonNull(qualifiers, "Qualifiers cannot be null"); + return this; + } + + public Builder setPage(@Nullable Integer page) { + this.page = page; + return this; + } + + public Builder setPageSize(@Nullable Integer pageSize) { + this.pageSize = pageSize; + return this; + } + + public Builder setQuery(@Nullable String query) { + this.query = query; + return this; + } + + public SearchWsRequest build() { + checkArgument(pageSize == null || pageSize <= MAX_PAGE_SIZE, "Page size must not be greater than %s", MAX_PAGE_SIZE); + return new SearchWsRequest(this); + } + } + +} diff --git a/sonar-ws/src/main/protobuf/ws-projects.proto b/sonar-ws/src/main/protobuf/ws-projects.proto index 64fb78379ac..7dcb6260857 100644 --- a/sonar-ws/src/main/protobuf/ws-projects.proto +++ b/sonar-ws/src/main/protobuf/ws-projects.proto @@ -57,3 +57,17 @@ message CreateWsResponse { } } +// WS api/projects/search +message SearchWsResponse { + optional sonarqube.ws.commons.Paging paging = 1; + repeated Component components = 2; + + message Component { + optional string organization = 1; + optional string id = 2; + optional string key = 3; + optional string name = 4; + optional string qualifier = 5; + } +} + |