aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacek <jacek.poreda@sonarsource.com>2020-06-05 16:53:40 +0200
committersonartech <sonartech@sonarsource.com>2020-06-26 20:04:57 +0000
commit52dea5983fffca49138dec3f8b58ed3160c8d37c (patch)
tree178119c40b8cd53ffdc40a634be992bf6e89eadf
parent9cad39aca828793ec1da0525e92d37e583cce5f2 (diff)
downloadsonarqube-52dea5983fffca49138dec3f8b58ed3160c8d37c.tar.gz
sonarqube-52dea5983fffca49138dec3f8b58ed3160c8d37c.zip
SONAR-13398 clean api/issues/search WS from deprecated code
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/issue/SearchRequest.java44
-rw-r--r--server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndexSyncProgressChecker.java15
-rw-r--r--server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java20
-rw-r--r--server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java105
-rw-r--r--server/sonar-webserver-webapi/src/main/java/org/sonar/server/issue/ws/SearchAction.java28
-rw-r--r--server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsTest.java56
-rw-r--r--server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java2
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/issue/IssuesWsParameters.java2
8 files changed, 84 insertions, 188 deletions
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/SearchRequest.java b/server/sonar-server-common/src/main/java/org/sonar/server/issue/SearchRequest.java
index 8737403103b..cd3b8174d90 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/SearchRequest.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/issue/SearchRequest.java
@@ -33,9 +33,6 @@ public class SearchRequest {
private Boolean assigned;
private List<String> assigneesUuid;
private List<String> authors;
- private List<String> componentKeys;
- private List<String> componentRootUuids;
- private List<String> componentRoots;
private List<String> componentUuids;
private List<String> components;
private String createdAfter;
@@ -55,7 +52,6 @@ public class SearchRequest {
private String organization;
private int page;
private int pageSize;
- private List<String> projectKeys;
private List<String> projects;
private List<String> resolutions;
private Boolean resolved;
@@ -132,16 +128,6 @@ public class SearchRequest {
}
@CheckForNull
- public List<String> getComponentKeys() {
- return componentKeys;
- }
-
- public SearchRequest setComponentKeys(@Nullable List<String> componentKeys) {
- this.componentKeys = componentKeys;
- return this;
- }
-
- @CheckForNull
public List<String> getComponentUuids() {
return componentUuids;
}
@@ -300,16 +286,6 @@ public class SearchRequest {
}
@CheckForNull
- public List<String> getProjectKeys() {
- return projectKeys;
- }
-
- public SearchRequest setProjectKeys(@Nullable List<String> projectKeys) {
- this.projectKeys = projectKeys;
- return this;
- }
-
- @CheckForNull
public List<String> getResolutions() {
return resolutions;
}
@@ -440,26 +416,6 @@ public class SearchRequest {
}
@CheckForNull
- public List<String> getComponentRootUuids() {
- return componentRootUuids;
- }
-
- public SearchRequest setComponentRootUuids(@Nullable List<String> componentRootUuids) {
- this.componentRootUuids = componentRootUuids;
- return this;
- }
-
- @CheckForNull
- public List<String> getComponentRoots() {
- return componentRoots;
- }
-
- public SearchRequest setComponentRoots(@Nullable List<String> componentRoots) {
- this.componentRoots = componentRoots;
- return this;
- }
-
- @CheckForNull
public List<String> getComponents() {
return components;
}
diff --git a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndexSyncProgressChecker.java b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndexSyncProgressChecker.java
index d728139e487..24e85e69222 100644
--- a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndexSyncProgressChecker.java
+++ b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndexSyncProgressChecker.java
@@ -20,11 +20,10 @@
package org.sonar.server.issue.index;
import com.google.common.collect.Sets;
+import java.util.Collection;
import java.util.List;
-import java.util.Set;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
-import org.sonar.db.project.ProjectDto;
import org.sonar.server.es.EsIndexSyncInProgressException;
public class IssueIndexSyncProgressChecker {
@@ -52,8 +51,14 @@ public class IssueIndexSyncProgressChecker {
/**
* Checks if project issue index sync is in progress, if it is, method throws exception org.sonar.server.es.EsIndexSyncInProgressException
*/
- public void checkIfProjectIssueSyncInProgress(DbSession dbSession, ProjectDto projectDto) throws EsIndexSyncInProgressException {
- if (doProjectNeedIssueSync(dbSession, projectDto.getUuid())) {
+ public void checkIfProjectIssueSyncInProgress(DbSession dbSession, String projectUuid) throws EsIndexSyncInProgressException {
+ if (doProjectNeedIssueSync(dbSession, projectUuid)) {
+ throw new EsIndexSyncInProgressException(IssueIndexDefinition.TYPE_ISSUE.getMainType());
+ }
+ }
+
+ public void checkIfAnyProjectIssueSyncInProgress(DbSession dbSession, Collection<String> projectUuids) throws EsIndexSyncInProgressException {
+ if (!findProjectUuidsWithIssuesSyncNeed(dbSession, projectUuids).isEmpty()) {
throw new EsIndexSyncInProgressException(IssueIndexDefinition.TYPE_ISSUE.getMainType());
}
}
@@ -66,7 +71,7 @@ public class IssueIndexSyncProgressChecker {
return !findProjectUuidsWithIssuesSyncNeed(dbSession, Sets.newHashSet(projectUuid)).isEmpty();
}
- public List<String> findProjectUuidsWithIssuesSyncNeed(DbSession dbSession, Set<String> projectUuids) {
+ public List<String> findProjectUuidsWithIssuesSyncNeed(DbSession dbSession, Collection<String> projectUuids) {
return dbClient.branchDao().selectProjectUuidsWithIssuesNeedSync(dbSession, projectUuids);
}
}
diff --git a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java
index d6c7f69d8c3..1b5acb2ce62 100644
--- a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java
+++ b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java
@@ -195,30 +195,20 @@ public class IssueQueryFactory {
Boolean onComponentOnly = request.getOnComponentOnly();
Collection<String> components = request.getComponents();
Collection<String> componentUuids = request.getComponentUuids();
- Collection<String> componentKeys = request.getComponentKeys();
- Collection<String> componentRootUuids = request.getComponentRootUuids();
- Collection<String> componentRoots = request.getComponentRoots();
String branch = request.getBranch();
String pullRequest = request.getPullRequest();
boolean effectiveOnComponentOnly = false;
- checkArgument(atMostOneNonNullElement(components, componentUuids, componentKeys, componentRootUuids, componentRoots),
+ checkArgument(atMostOneNonNullElement(components, componentUuids),
"At most one of the following parameters can be provided: %s and %s", PARAM_COMPONENT_KEYS, PARAM_COMPONENT_UUIDS);
- if (componentRootUuids != null) {
- allComponents.addAll(getComponentsFromUuids(session, componentRootUuids));
- } else if (componentRoots != null) {
- allComponents.addAll(getComponentsFromKeys(session, componentRoots, branch, pullRequest));
- } else if (components != null) {
+ if (components != null) {
allComponents.addAll(getComponentsFromKeys(session, components, branch, pullRequest));
- effectiveOnComponentOnly = true;
+ effectiveOnComponentOnly = BooleanUtils.isTrue(onComponentOnly);
} else if (componentUuids != null) {
allComponents.addAll(getComponentsFromUuids(session, componentUuids));
effectiveOnComponentOnly = BooleanUtils.isTrue(onComponentOnly);
- } else if (componentKeys != null) {
- allComponents.addAll(getComponentsFromKeys(session, componentKeys, branch, pullRequest));
- effectiveOnComponentOnly = BooleanUtils.isTrue(onComponentOnly);
}
return effectiveOnComponentOnly;
@@ -238,7 +228,7 @@ public class IssueQueryFactory {
return;
}
- List<String> projectKeys = request.getProjectKeys();
+ List<String> projectKeys = request.getProjects();
if (projectKeys != null) {
List<ComponentDto> projects = getComponentsFromKeys(session, projectKeys, request.getBranch(), request.getPullRequest());
builder.projectUuids(projects.stream().map(IssueQueryFactory::toProjectUuid).collect(toList()));
@@ -293,7 +283,7 @@ public class IssueQueryFactory {
}
private void addProjectUuidsForApplication(IssueQuery.Builder builder, DbSession session, SearchRequest request) {
- List<String> projectKeys = request.getProjectKeys();
+ List<String> projectKeys = request.getProjects();
if (projectKeys != null) {
// On application, branch should only be applied on the application, not on projects
List<ComponentDto> projects = getComponentsFromKeys(session, projectKeys, null, null);
diff --git a/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java b/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java
index c86fb938571..61d324734cd 100644
--- a/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java
+++ b/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java
@@ -89,7 +89,7 @@ public class IssueQueryFactoryTest {
.setStatuses(asList("CLOSED"))
.setResolutions(asList("FALSE-POSITIVE"))
.setResolved(true)
- .setProjectKeys(asList(project.getDbKey()))
+ .setProjects(asList(project.getDbKey()))
.setModuleUuids(asList(module.uuid()))
.setDirectories(asList("aDirPath"))
.setFileUuids(asList(file.uuid()))
@@ -187,7 +187,7 @@ public class IssueQueryFactoryTest {
@Test
public void add_unknown_when_no_component_found() {
SearchRequest request = new SearchRequest()
- .setComponentKeys(asList("does_not_exist"));
+ .setComponents(asList("does_not_exist"));
IssueQuery query = underTest.create(request);
@@ -214,7 +214,7 @@ public class IssueQueryFactoryTest {
@Test
public void fail_if_components_and_components_uuid_params_are_set_at_the_same_time() {
SearchRequest request = new SearchRequest()
- .setComponentKeys(singletonList("foo"))
+ .setComponents(singletonList("foo"))
.setComponentUuids(singletonList("bar"));
expectedException.expect(IllegalArgumentException.class);
@@ -224,35 +224,10 @@ public class IssueQueryFactoryTest {
}
@Test
- public void fail_if_both_componentRoots_and_componentRootUuids_params_are_set() {
- SearchRequest request = new SearchRequest()
- .setComponentRoots(singletonList("foo"))
- .setComponentRootUuids(singletonList("bar"));
-
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("At most one of the following parameters can be provided: componentKeys and componentUuids");
-
- underTest.create(request);
- }
-
- @Test
- public void fail_if_componentRoots_references_components_with_different_qualifier() {
- ComponentDto project = db.components().insertPrivateProject();
- ComponentDto file = db.components().insertComponent(newFileDto(project));
- SearchRequest request = new SearchRequest()
- .setComponentRoots(asList(project.getDbKey(), file.getDbKey()));
-
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("All components must have the same qualifier, found FIL,TRK");
-
- underTest.create(request);
- }
-
- @Test
- public void param_componentRootUuids_enables_search_in_view_tree_if_user_has_permission_on_view() {
+ public void param_componentUuids_enables_search_in_view_tree_if_user_has_permission_on_view() {
ComponentDto view = db.components().insertView();
SearchRequest request = new SearchRequest()
- .setComponentRootUuids(asList(view.uuid()));
+ .setComponentUuids(asList(view.uuid()));
userSession.registerComponents(view);
IssueQuery query = underTest.create(request);
@@ -305,7 +280,7 @@ public class IssueQueryFactoryTest {
ComponentDto view = db.components().insertView();
ComponentDto subView = db.components().insertComponent(newSubView(view));
SearchRequest request = new SearchRequest()
- .setComponentRootUuids(asList(subView.uuid()));
+ .setComponentUuids(asList(subView.uuid()));
IssueQuery query = underTest.create(request);
@@ -327,7 +302,7 @@ public class IssueQueryFactoryTest {
public void onComponentOnly_restricts_search_to_specified_componentKeys() {
ComponentDto project = db.components().insertPrivateProject();
SearchRequest request = new SearchRequest()
- .setComponentKeys(asList(project.getDbKey()))
+ .setComponents(asList(project.getDbKey()))
.setOnComponentOnly(true);
IssueQuery query = underTest.create(request);
@@ -393,16 +368,16 @@ public class IssueQueryFactoryTest {
ComponentDto branch = db.components().insertProjectBranch(project);
assertThat(underTest.create(new SearchRequest()
- .setProjectKeys(singletonList(branch.getKey()))
+ .setProjects(singletonList(branch.getKey()))
.setBranch(branch.getBranch())))
- .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.projectUuids()), IssueQuery::isMainBranch)
- .containsOnly(branch.uuid(), singletonList(project.uuid()), false);
+ .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.projectUuids()), IssueQuery::isMainBranch)
+ .containsOnly(branch.uuid(), singletonList(project.uuid()), false);
assertThat(underTest.create(new SearchRequest()
- .setComponentKeys(singletonList(branch.getKey()))
+ .setComponents(singletonList(branch.getKey()))
.setBranch(branch.getBranch())))
- .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.projectUuids()), IssueQuery::isMainBranch)
- .containsOnly(branch.uuid(), singletonList(project.uuid()), false);
+ .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.projectUuids()), IssueQuery::isMainBranch)
+ .containsOnly(branch.uuid(), singletonList(project.uuid()), false);
}
@Test
@@ -412,24 +387,24 @@ public class IssueQueryFactoryTest {
ComponentDto file = db.components().insertComponent(newFileDto(branch));
assertThat(underTest.create(new SearchRequest()
- .setComponentKeys(singletonList(file.getKey()))
+ .setComponents(singletonList(file.getKey()))
.setBranch(branch.getBranch())))
- .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.fileUuids()), IssueQuery::isMainBranch)
- .containsOnly(branch.uuid(), singletonList(file.uuid()), false);
+ .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.fileUuids()), IssueQuery::isMainBranch)
+ .containsOnly(branch.uuid(), singletonList(file.uuid()), false);
assertThat(underTest.create(new SearchRequest()
- .setComponentKeys(singletonList(branch.getKey()))
+ .setComponents(singletonList(branch.getKey()))
.setFileUuids(singletonList(file.uuid()))
.setBranch(branch.getBranch())))
- .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.fileUuids()), IssueQuery::isMainBranch)
- .containsOnly(branch.uuid(), singletonList(file.uuid()), false);
+ .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.fileUuids()), IssueQuery::isMainBranch)
+ .containsOnly(branch.uuid(), singletonList(file.uuid()), false);
assertThat(underTest.create(new SearchRequest()
- .setProjectKeys(singletonList(branch.getKey()))
+ .setProjects(singletonList(branch.getKey()))
.setFileUuids(singletonList(file.uuid()))
.setBranch(branch.getBranch())))
- .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.fileUuids()), IssueQuery::isMainBranch)
- .containsOnly(branch.uuid(), singletonList(file.uuid()), false);
+ .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.fileUuids()), IssueQuery::isMainBranch)
+ .containsOnly(branch.uuid(), singletonList(file.uuid()), false);
}
@Test
@@ -439,11 +414,11 @@ public class IssueQueryFactoryTest {
ComponentDto file = db.components().insertComponent(newFileDto(branch));
assertThat(underTest.create(new SearchRequest()
- .setComponentKeys(singletonList(file.getKey()))
+ .setComponents(singletonList(file.getKey()))
.setBranch(branch.getBranch())
.setOnComponentOnly(true)))
- .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.componentUuids()), IssueQuery::isMainBranch)
- .containsOnly(branch.uuid(), singletonList(file.uuid()), false);
+ .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.componentUuids()), IssueQuery::isMainBranch)
+ .containsOnly(branch.uuid(), singletonList(file.uuid()), false);
}
@Test
@@ -452,15 +427,15 @@ public class IssueQueryFactoryTest {
ComponentDto branch = db.components().insertProjectBranch(project);
assertThat(underTest.create(new SearchRequest()
- .setProjectKeys(singletonList(project.getKey()))
+ .setProjects(singletonList(project.getKey()))
.setBranch("master")))
- .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.projectUuids()), IssueQuery::isMainBranch)
- .containsOnly(project.uuid(), singletonList(project.uuid()), true);
+ .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.projectUuids()), IssueQuery::isMainBranch)
+ .containsOnly(project.uuid(), singletonList(project.uuid()), true);
assertThat(underTest.create(new SearchRequest()
- .setComponentKeys(singletonList(project.getKey()))
+ .setComponents(singletonList(project.getKey()))
.setBranch("master")))
- .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.projectUuids()), IssueQuery::isMainBranch)
- .containsOnly(project.uuid(), singletonList(project.uuid()), true);
+ .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.projectUuids()), IssueQuery::isMainBranch)
+ .containsOnly(project.uuid(), singletonList(project.uuid()), true);
}
@Test
@@ -473,7 +448,7 @@ public class IssueQueryFactoryTest {
userSession.addProjectPermission(USER, application);
assertThat(underTest.create(new SearchRequest()
- .setComponentKeys(singletonList(application.getKey())))
+ .setComponents(singletonList(application.getKey())))
.viewUuids()).containsExactly(application.uuid());
}
@@ -493,18 +468,18 @@ public class IssueQueryFactoryTest {
// Search on applicationBranch1
assertThat(underTest.create(new SearchRequest()
- .setComponentKeys(singletonList(applicationBranch1.getKey()))
+ .setComponents(singletonList(applicationBranch1.getKey()))
.setBranch(applicationBranch1.getBranch())))
- .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.projectUuids()), IssueQuery::isMainBranch)
- .containsOnly(applicationBranch1.uuid(), Collections.emptyList(), false);
+ .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.projectUuids()), IssueQuery::isMainBranch)
+ .containsOnly(applicationBranch1.uuid(), Collections.emptyList(), false);
// Search on project1Branch1
assertThat(underTest.create(new SearchRequest()
- .setComponentKeys(singletonList(applicationBranch1.getKey()))
- .setProjectKeys(singletonList(project1.getKey()))
+ .setComponents(singletonList(applicationBranch1.getKey()))
+ .setProjects(singletonList(project1.getKey()))
.setBranch(applicationBranch1.getBranch())))
- .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.projectUuids()), IssueQuery::isMainBranch)
- .containsOnly(applicationBranch1.uuid(), singletonList(project1.uuid()), false);
+ .extracting(IssueQuery::branchUuid, query -> new ArrayList<>(query.projectUuids()), IssueQuery::isMainBranch)
+ .containsOnly(applicationBranch1.uuid(), singletonList(project1.uuid()), false);
}
@Test
@@ -561,7 +536,7 @@ public class IssueQueryFactoryTest {
underTest.create(new SearchRequest()
.setSinceLeakPeriod(true)
- .setComponentKeys(asList(project1.getKey(), project2.getKey())));
+ .setComponents(asList(project1.getKey(), project2.getKey())));
}
@Test
diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/issue/ws/SearchAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/issue/ws/SearchAction.java
index ad7fbc05556..8056f814ef2 100644
--- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/issue/ws/SearchAction.java
+++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/issue/ws/SearchAction.java
@@ -101,7 +101,6 @@ import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_ASSIGNEES;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_AUTHOR;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_BRANCH;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_COMPONENT_KEYS;
-import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_COMPONENT_UUIDS;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_CREATED_AFTER;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_CREATED_AT;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_CREATED_BEFORE;
@@ -116,7 +115,6 @@ import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_ON_COMPONEN
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_ORGANIZATION;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_OWASP_TOP_10;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_PROJECTS;
-import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_PROJECT_KEYS;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_PULL_REQUEST;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_RESOLUTIONS;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_RESOLVED;
@@ -167,8 +165,8 @@ public class SearchAction implements IssuesWsAction {
private final System2 system2;
private final DbClient dbClient;
- public SearchAction(UserSession userSession, IssueIndex issueIndex, IssueQueryFactory issueQueryFactory, SearchResponseLoader searchResponseLoader,
- SearchResponseFormat searchResponseFormat, System2 system2, DbClient dbClient) {
+ public SearchAction(UserSession userSession, IssueIndex issueIndex, IssueQueryFactory issueQueryFactory,
+ SearchResponseLoader searchResponseLoader, SearchResponseFormat searchResponseFormat, System2 system2, DbClient dbClient) {
this.userSession = userSession;
this.issueIndex = issueIndex;
this.issueQueryFactory = issueQueryFactory;
@@ -183,13 +181,10 @@ public class SearchAction implements IssuesWsAction {
WebService.NewAction action = controller
.createAction(ACTION_SEARCH)
.setHandler(this)
- .setDescription(
- "Search for issues.<br>" +
- "At most one of the following parameters can be provided at the same time: %s and %s.<br>" +
- "Requires the 'Browse' permission on the specified project(s).",
- PARAM_COMPONENT_KEYS, PARAM_COMPONENT_UUIDS)
+ .setDescription("Search for issues.<br>Requires the 'Browse' permission on the specified project(s).")
.setSince("3.6")
.setChangelog(
+ new Change("8.4", "parameters 'componentUuids', 'projectKeys' has been dropped."),
new Change("8.2", "'REVIEWED', 'TO_REVIEW' status param values are no longer supported"),
new Change("8.2", "Security hotspots are no longer returned as type 'SECURITY_HOTSPOT' is not supported anymore, use dedicated api/hotspots"),
new Change("8.2", "response field 'fromHotspot' has been deprecated and is no more populated"),
@@ -324,18 +319,10 @@ public class SearchAction implements IssuesWsAction {
"A component can be a portfolio, project, module, directory or file.")
.setExampleValue(KEY_PROJECT_EXAMPLE_001);
- action.createParam(PARAM_COMPONENT_UUIDS)
- .setDescription("To retrieve issues associated to a specific list of components their sub-components (comma-separated list of component IDs). " +
- INTERNAL_PARAMETER_DISCLAIMER +
- "A component can be a project, module, directory or file.")
- .setDeprecatedSince("6.5")
- .setExampleValue("584a89f2-8037-4f7b-b82c-8b45d2d63fb2");
-
action.createParam(PARAM_PROJECTS)
.setDescription("To retrieve issues associated to a specific list of projects (comma-separated list of project keys). " +
INTERNAL_PARAMETER_DISCLAIMER +
"If this parameter is set, projectUuids must not be set.")
- .setDeprecatedKey(PARAM_PROJECT_KEYS, "6.5")
.setInternal(true)
.setExampleValue(KEY_PROJECT_EXAMPLE_001);
@@ -448,7 +435,6 @@ public class SearchAction implements IssuesWsAction {
addMandatoryValuesToFacet(facets, FACET_PROJECTS, query.projectUuids());
addMandatoryValuesToFacet(facets, PARAM_MODULE_UUIDS, query.moduleUuids());
addMandatoryValuesToFacet(facets, PARAM_FILE_UUIDS, query.fileUuids());
- addMandatoryValuesToFacet(facets, PARAM_COMPONENT_UUIDS, request.getComponentUuids());
List<String> assignees = Lists.newArrayList("");
List<String> assigneesFromRequest = request.getAssigneeUuids();
@@ -499,7 +485,6 @@ public class SearchAction implements IssuesWsAction {
collector.addProjectUuids(facets.getBucketKeys(FACET_PROJECTS));
collector.addComponentUuids(facets.getBucketKeys(PARAM_MODULE_UUIDS));
collector.addComponentUuids(facets.getBucketKeys(PARAM_FILE_UUIDS));
- collector.addComponentUuids(facets.getBucketKeys(PARAM_COMPONENT_UUIDS));
collector.addRuleIds(facets.getBucketKeys(PARAM_RULES));
collector.addUserUuids(facets.getBucketKeys(PARAM_ASSIGNEES));
}
@@ -507,7 +492,6 @@ public class SearchAction implements IssuesWsAction {
private static void collectRequestParams(SearchResponseLoader.Collector collector, SearchRequest request) {
collector.addComponentUuids(request.getFileUuids());
collector.addComponentUuids(request.getModuleUuids());
- collector.addComponentUuids(request.getComponentRootUuids());
collector.addUserUuids(request.getAssigneeUuids());
}
@@ -518,8 +502,7 @@ public class SearchAction implements IssuesWsAction {
.setAssigned(request.paramAsBoolean(PARAM_ASSIGNED))
.setAssigneesUuid(getLogins(dbSession, request.paramAsStrings(PARAM_ASSIGNEES)))
.setAuthors(request.hasParam(PARAM_AUTHOR) ? request.multiParam(PARAM_AUTHOR) : request.paramAsStrings(DEPRECATED_PARAM_AUTHORS))
- .setComponentKeys(request.paramAsStrings(PARAM_COMPONENT_KEYS))
- .setComponentUuids(request.paramAsStrings(PARAM_COMPONENT_UUIDS))
+ .setComponents(request.paramAsStrings(PARAM_COMPONENT_KEYS))
.setCreatedAfter(request.param(PARAM_CREATED_AFTER))
.setCreatedAt(request.param(PARAM_CREATED_AT))
.setCreatedBefore(request.param(PARAM_CREATED_BEFORE))
@@ -537,7 +520,6 @@ public class SearchAction implements IssuesWsAction {
.setOrganization(request.param(PARAM_ORGANIZATION))
.setPage(request.mandatoryParamAsInt(Param.PAGE))
.setPageSize(request.mandatoryParamAsInt(Param.PAGE_SIZE))
- .setProjectKeys(request.paramAsStrings(PARAM_PROJECTS))
.setProjects(request.paramAsStrings(PARAM_PROJECTS))
.setResolutions(request.paramAsStrings(PARAM_RESOLUTIONS))
.setResolved(request.paramAsBoolean(PARAM_RESOLVED))
diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsTest.java
index 9092fbac4c8..17a6f09b360 100644
--- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsTest.java
+++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsTest.java
@@ -75,12 +75,10 @@ import static org.sonar.db.component.ComponentTesting.newSubView;
import static org.sonar.db.component.ComponentTesting.newView;
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_BRANCH;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_COMPONENT_KEYS;
-import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_COMPONENT_UUIDS;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_DIRECTORIES;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_FILE_UUIDS;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_MODULE_UUIDS;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_PROJECTS;
-import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_PROJECT_KEYS;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_PULL_REQUEST;
import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_SINCE_LEAK_PERIOD;
@@ -168,12 +166,12 @@ public class SearchActionComponentsTest {
assertThat(ws.newRequest()
.setParam(PARAM_COMPONENT_KEYS, module1.getKey())
.executeProtobuf(SearchWsResponse.class).getIssuesList()).extracting(Issue::getKey)
- .containsExactlyInAnyOrder(issue1.getKey());
+ .containsExactlyInAnyOrder(issue1.getKey());
assertThat(ws.newRequest()
.setParam(PARAM_MODULE_UUIDS, module1.uuid())
.executeProtobuf(SearchWsResponse.class).getIssuesList()).extracting(Issue::getKey)
- .containsExactlyInAnyOrder(issue1.getKey());
+ .containsExactlyInAnyOrder(issue1.getKey());
}
@Test
@@ -216,7 +214,7 @@ public class SearchActionComponentsTest {
indexIssues();
ws.newRequest()
- .setParam(PARAM_COMPONENT_UUIDS, project.uuid())
+ .setParam(PARAM_COMPONENT_KEYS, project.getDbKey())
.setParam(PARAM_SINCE_LEAK_PERIOD, "true")
.execute()
.assertJson(this.getClass(), "search_since_leak_period.json");
@@ -239,7 +237,7 @@ public class SearchActionComponentsTest {
indexIssues();
ws.newRequest()
- .setParam(PARAM_COMPONENT_UUIDS, project.uuid())
+ .setParam(PARAM_COMPONENT_KEYS, project.getDbKey())
.setParam(PARAM_FILE_UUIDS, file.uuid())
.setParam(PARAM_SINCE_LEAK_PERIOD, "true")
.execute()
@@ -264,16 +262,6 @@ public class SearchActionComponentsTest {
.setParam(PARAM_FILE_UUIDS, "unknown")
.execute()
.assertJson(this.getClass(), "no_issue.json");
-
- ws.newRequest()
- .setParam(PARAM_COMPONENT_UUIDS, file.uuid())
- .execute()
- .assertJson(this.getClass(), "search_by_file_uuid.json");
-
- ws.newRequest()
- .setParam(PARAM_COMPONENT_UUIDS, "unknown")
- .execute()
- .assertJson(this.getClass(), "no_issue.json");
}
@Test
@@ -484,11 +472,11 @@ public class SearchActionComponentsTest {
.setParam(PARAM_COMPONENT_KEYS, applicationBranch1.getKey())
.setParam(PARAM_BRANCH, applicationBranch1.getBranch())
.executeProtobuf(SearchWsResponse.class).getIssuesList())
- .extracting(Issue::getKey, Issue::getComponent, Issue::getProject, Issue::getBranch, Issue::hasBranch)
- .containsExactlyInAnyOrder(
- tuple(issueOnProject1Branch1.getKey(), project1Branch1.getKey(), project1Branch1.getKey(), project1Branch1.getBranch(), true),
- tuple(issueOnFileOnProject1Branch1.getKey(), fileOnProject1Branch1.getKey(), project1Branch1.getKey(), project1Branch1.getBranch(), true),
- tuple(issueOnProject2.getKey(), project2.getKey(), project2.getKey(), "", false));
+ .extracting(Issue::getKey, Issue::getComponent, Issue::getProject, Issue::getBranch, Issue::hasBranch)
+ .containsExactlyInAnyOrder(
+ tuple(issueOnProject1Branch1.getKey(), project1Branch1.getKey(), project1Branch1.getKey(), project1Branch1.getBranch(), true),
+ tuple(issueOnFileOnProject1Branch1.getKey(), fileOnProject1Branch1.getKey(), project1Branch1.getKey(), project1Branch1.getBranch(), true),
+ tuple(issueOnProject2.getKey(), project2.getKey(), project2.getKey(), "", false));
// Issues on project1Branch1
assertThat(ws.newRequest()
@@ -496,10 +484,10 @@ public class SearchActionComponentsTest {
.setParam(PARAM_PROJECTS, project1.getKey())
.setParam(PARAM_BRANCH, applicationBranch1.getBranch())
.executeProtobuf(SearchWsResponse.class).getIssuesList())
- .extracting(Issue::getKey, Issue::getComponent, Issue::getBranch)
- .containsExactlyInAnyOrder(
- tuple(issueOnProject1Branch1.getKey(), project1Branch1.getKey(), project1Branch1.getBranch()),
- tuple(issueOnFileOnProject1Branch1.getKey(), fileOnProject1Branch1.getKey(), project1Branch1.getBranch()));
+ .extracting(Issue::getKey, Issue::getComponent, Issue::getBranch)
+ .containsExactlyInAnyOrder(
+ tuple(issueOnProject1Branch1.getKey(), project1Branch1.getKey(), project1Branch1.getBranch()),
+ tuple(issueOnFileOnProject1Branch1.getKey(), fileOnProject1Branch1.getKey(), project1Branch1.getBranch()));
}
@Test
@@ -581,7 +569,7 @@ public class SearchActionComponentsTest {
SearchWsResponse result = ws.newRequest()
.setParam(PARAM_COMPONENT_KEYS, application.getDbKey())
- .setParam(PARAM_PROJECT_KEYS, project1.getDbKey())
+ .setParam(PARAM_PROJECTS, project1.getDbKey())
.executeProtobuf(SearchWsResponse.class);
assertThat(result.getIssuesList()).extracting(Issue::getKey)
@@ -612,7 +600,7 @@ public class SearchActionComponentsTest {
SearchWsResponse result = ws.newRequest()
.setParam(PARAM_COMPONENT_KEYS, application.getDbKey())
- .setParam(PARAM_PROJECT_KEYS, project1.getDbKey())
+ .setParam(PARAM_PROJECTS, project1.getDbKey())
.setParam(PARAM_SINCE_LEAK_PERIOD, "true")
.executeProtobuf(SearchWsResponse.class);
@@ -670,24 +658,24 @@ public class SearchActionComponentsTest {
.setParam(PARAM_COMPONENT_KEYS, project.getKey())
.setParam(PARAM_BRANCH, branch.getBranch())
.executeProtobuf(SearchWsResponse.class).getIssuesList())
- .extracting(Issue::getKey, Issue::getComponent, Issue::getBranch)
- .containsExactlyInAnyOrder(tuple(branchIssue.getKey(), branchFile.getKey(), branchFile.getBranch()));
+ .extracting(Issue::getKey, Issue::getComponent, Issue::getBranch)
+ .containsExactlyInAnyOrder(tuple(branchIssue.getKey(), branchFile.getKey(), branchFile.getBranch()));
// On project key + branch
assertThat(ws.newRequest()
- .setParam(PARAM_PROJECT_KEYS, project.getKey())
+ .setParam(PARAM_PROJECTS, project.getKey())
.setParam(PARAM_BRANCH, branch.getBranch())
.executeProtobuf(SearchWsResponse.class).getIssuesList())
- .extracting(Issue::getKey, Issue::getComponent, Issue::getBranch)
- .containsExactlyInAnyOrder(tuple(branchIssue.getKey(), branchFile.getKey(), branchFile.getBranch()));
+ .extracting(Issue::getKey, Issue::getComponent, Issue::getBranch)
+ .containsExactlyInAnyOrder(tuple(branchIssue.getKey(), branchFile.getKey(), branchFile.getBranch()));
// On file key + branch
assertThat(ws.newRequest()
.setParam(PARAM_COMPONENT_KEYS, branchFile.getKey())
.setParam(PARAM_BRANCH, branch.getBranch())
.executeProtobuf(SearchWsResponse.class).getIssuesList())
- .extracting(Issue::getKey, Issue::getComponent, Issue::getBranch)
- .containsExactlyInAnyOrder(tuple(branchIssue.getKey(), branchFile.getKey(), branchFile.getBranch()));
+ .extracting(Issue::getKey, Issue::getComponent, Issue::getBranch)
+ .containsExactlyInAnyOrder(tuple(branchIssue.getKey(), branchFile.getKey(), branchFile.getBranch()));
}
@Test
diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java
index 2d739cf8853..70f59774dd9 100644
--- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java
+++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java
@@ -1105,7 +1105,7 @@ public class SearchActionTest {
assertThat(def.responseExampleAsString()).isNotEmpty();
assertThat(def.params()).extracting("key").containsExactlyInAnyOrder(
- "additionalFields", "asc", "assigned", "assignees", "authors", "author", "componentKeys", "componentUuids", "branch",
+ "additionalFields", "asc", "assigned", "assignees", "authors", "author", "componentKeys", "branch",
"pullRequest", "organization",
"createdAfter", "createdAt", "createdBefore", "createdInLast", "directories", "facetMode", "facets", "fileUuids", "issues", "languages", "moduleUuids", "onComponentOnly",
"p", "projects", "ps", "resolutions", "resolved", "rules", "s", "severities", "sinceLeakPeriod",
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/issue/IssuesWsParameters.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/issue/IssuesWsParameters.java
index 30014ecb462..a0e290e7446 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/issue/IssuesWsParameters.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/issue/IssuesWsParameters.java
@@ -45,6 +45,7 @@ public class IssuesWsParameters {
public static final String PARAM_ASSIGNEE = "assignee";
public static final String PARAM_TRANSITION = "transition";
public static final String PARAM_SEVERITY = "severity";
+ public static final String PARAM_COMPONENT = "component";
public static final String PARAM_COMPONENT_UUID = "componentUuid";
public static final String PARAM_TYPE = "type";
public static final String PARAM_ISSUES = "issues";
@@ -56,7 +57,6 @@ public class IssuesWsParameters {
public static final String PARAM_COMPONENT_UUIDS = "componentUuids";
public static final String PARAM_MODULE_UUIDS = "moduleUuids";
public static final String PARAM_PROJECTS = "projects";
- public static final String PARAM_PROJECT_KEYS = "projectKeys";
public static final String PARAM_DIRECTORIES = "directories";
public static final String PARAM_FILE_UUIDS = "fileUuids";
public static final String PARAM_ON_COMPONENT_ONLY = "onComponentOnly";