aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-server
diff options
context:
space:
mode:
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>2015-06-22 17:32:16 +0200
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>2015-06-25 10:20:19 +0200
commit7ff83ed88a1240c637127e58f7df7511d6bf10df (patch)
tree733a0c99a561e94654e0174a17a86d00d7189b9c /server/sonar-server
parent2cc9785d0a5409588d746c1e9e07525833ef09e0 (diff)
downloadsonarqube-7ff83ed88a1240c637127e58f7df7511d6bf10df.tar.gz
sonarqube-7ff83ed88a1240c637127e58f7df7511d6bf10df.zip
SONAR-6618 Enforce paging on issues search
Diffstat (limited to 'server/sonar-server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/IssueQuery.java13
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/IssueQueryService.java25
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/filter/IssueFilterParameters.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java18
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java44
5 files changed, 12 insertions, 94 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQuery.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQuery.java
index 26c35fe6d8c..bcb2c9654af 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQuery.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQuery.java
@@ -83,7 +83,6 @@ public class IssueQuery {
private final Date createdBefore;
private final String sort;
private final Boolean asc;
- private final Boolean ignorePaging;
private final String userLogin;
private final Set<String> userGroups;
@@ -119,7 +118,6 @@ public class IssueQuery {
this.createdBefore = builder.createdBefore;
this.sort = builder.sort;
this.asc = builder.asc;
- this.ignorePaging = builder.ignorePaging;
this.userLogin = builder.userLogin;
this.userGroups = builder.userGroups;
this.checkAuthorization = builder.checkAuthorization;
@@ -259,11 +257,6 @@ public class IssueQuery {
}
@CheckForNull
- public Boolean ignorePaging() {
- return ignorePaging;
- }
-
- @CheckForNull
public String userLogin() {
return userLogin;
}
@@ -315,7 +308,6 @@ public class IssueQuery {
private Date createdBefore;
private String sort;
private Boolean asc = false;
- private Boolean ignorePaging = false;
private String userLogin;
private Set<String> userGroups;
private boolean checkAuthorization = true;
@@ -511,11 +503,6 @@ public class IssueQuery {
return new IssueQuery(this);
}
- public Builder ignorePaging(@Nullable Boolean ignorePaging) {
- this.ignorePaging = ignorePaging;
- return this;
- }
-
public Builder userLogin(@Nullable String userLogin) {
this.userLogin = userLogin;
return this;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQueryService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQueryService.java
index 6396e61a71d..38f40ab43db 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQueryService.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQueryService.java
@@ -30,13 +30,20 @@ import com.google.common.collect.Collections2;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.ObjectUtils;
import org.joda.time.DateTime;
import org.joda.time.format.ISOPeriodFormat;
-import org.sonar.api.server.ServerSide;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.server.ServerSide;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.System2;
@@ -49,15 +56,6 @@ import org.sonar.server.issue.filter.IssueFilterParameters;
import org.sonar.server.user.UserSession;
import org.sonar.server.util.RubyUtils;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import static com.google.common.collect.Lists.newArrayList;
/**
@@ -134,10 +132,6 @@ public class IssueQueryService {
builder.sort(sort);
builder.asc(RubyUtils.toBoolean(params.get(IssueFilterParameters.ASC)));
}
- String ignorePaging = (String) params.get(IssueFilterParameters.IGNORE_PAGING);
- if (!Strings.isNullOrEmpty(ignorePaging)) {
- builder.ignorePaging(RubyUtils.toBoolean(ignorePaging));
- }
return builder.build();
} finally {
@@ -174,8 +168,7 @@ public class IssueQueryService {
.planned(request.paramAsBoolean(IssueFilterParameters.PLANNED))
.createdAt(request.paramAsDateTime(IssueFilterParameters.CREATED_AT))
.createdAfter(buildCreatedAfter(request.paramAsDateTime(IssueFilterParameters.CREATED_AFTER), request.param(IssueFilterParameters.CREATED_IN_LAST)))
- .createdBefore(request.paramAsDateTime(IssueFilterParameters.CREATED_BEFORE))
- .ignorePaging(request.paramAsBoolean(IssueFilterParameters.IGNORE_PAGING));
+ .createdBefore(request.paramAsDateTime(IssueFilterParameters.CREATED_BEFORE));
Set<String> allComponentUuids = Sets.newHashSet();
boolean effectiveOnComponentOnly = mergeDeprecatedComponentParameters(session,
diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/IssueFilterParameters.java b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/IssueFilterParameters.java
index d8fb99c16dc..96b5589eb16 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/IssueFilterParameters.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/IssueFilterParameters.java
@@ -23,7 +23,6 @@ package org.sonar.server.issue.filter;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
-
import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
@@ -69,18 +68,17 @@ public class IssueFilterParameters {
public static final String PAGE_INDEX = "pageIndex";
public static final String SORT = "sort";
public static final String ASC = "asc";
- public static final String IGNORE_PAGING = "ignorePaging";
public static final String FACET_ASSIGNED_TO_ME = "assigned_to_me";
public static final List<String> ALL = ImmutableList.of(ISSUES, SEVERITIES, STATUSES, RESOLUTIONS, RESOLVED, COMPONENTS, COMPONENT_ROOTS, RULES, ACTION_PLANS, REPORTERS, TAGS,
ASSIGNEES, LANGUAGES, ASSIGNED, PLANNED, HIDE_RULES, CREATED_AT, CREATED_AFTER, CREATED_BEFORE, CREATED_IN_LAST, COMPONENT_UUIDS, COMPONENT_ROOT_UUIDS,
- PROJECTS, PROJECT_UUIDS, IGNORE_PAGING, PROJECT_KEYS, COMPONENT_KEYS, MODULE_UUIDS, DIRECTORIES, FILE_UUIDS, AUTHORS, HIDE_COMMENTS, PAGE_SIZE, PAGE_INDEX, SORT, ASC);
+ PROJECTS, PROJECT_UUIDS, PROJECT_KEYS, COMPONENT_KEYS, MODULE_UUIDS, DIRECTORIES, FILE_UUIDS, AUTHORS, HIDE_COMMENTS, PAGE_SIZE, PAGE_INDEX, SORT, ASC);
public static final List<String> ALL_WITHOUT_PAGINATION = newArrayList(Iterables.filter(ALL, new Predicate<String>() {
@Override
public boolean apply(String input) {
- return !PAGE_INDEX.equals(input) && !PAGE_SIZE.equals(input) && !IGNORE_PAGING.equals(input);
+ return !PAGE_INDEX.equals(input) && !PAGE_SIZE.equals(input);
}
}));
diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java
index 103fa37e612..e3253cc3e79 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java
@@ -201,10 +201,6 @@ public class SearchAction implements IssuesWsAction {
"Accepted units are 'y' for year, 'm' for month, 'w' for week and 'd' for day. " +
"If this parameter is set, createdAfter must not be set")
.setExampleValue("1m2w (1 month 2 weeks)");
- action.createParam(IssueFilterParameters.IGNORE_PAGING)
- .setDescription("Return the full list of issues, regardless of paging. For internal use only")
- .setBooleanPossibleValues()
- .setDefaultValue("false");
action.createParam("format")
.setDescription("Only json format is available. This parameter is kept only for backward compatibility and shouldn't be used anymore");
}
@@ -273,9 +269,6 @@ public class SearchAction implements IssuesWsAction {
public final void handle(Request request, Response response) throws Exception {
SearchOptions options = new SearchOptions();
options.setPage(request.mandatoryParamAsInt(WebService.Param.PAGE), request.mandatoryParamAsInt(WebService.Param.PAGE_SIZE));
- if (shouldIgnorePaging(request)) {
- options.disableLimit();
- }
options.addFacets(request.paramAsStrings(WebService.Param.FACETS));
IssueQuery query = issueQueryService.createFromRequest(request);
@@ -292,18 +285,7 @@ public class SearchAction implements IssuesWsAction {
json.endObject().close();
}
- private static boolean shouldIgnorePaging(Request request) {
- List<String> componentUuids = request.paramAsStrings(IssueFilterParameters.COMPONENT_UUIDS);
- // Paging can be ignored only when querying issues for a single component (e.g in component viewer)
- return componentUuids != null && componentUuids.size() == 1
- && BooleanUtils.isTrue(request.paramAsBoolean(IssueFilterParameters.IGNORE_PAGING));
- }
-
private SearchResult<IssueDoc> execute(IssueQuery query, SearchOptions options) {
- Collection<String> components = query.componentUuids();
- if (components != null && components.size() == 1 && BooleanUtils.isTrue(query.ignorePaging())) {
- options.disableLimit();
- }
return service.search(query, options);
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java
index bd6763106e2..48c1a3aa2f8 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java
@@ -95,7 +95,7 @@ public class SearchActionMediumTest {
assertThat(show.isPost()).isFalse();
assertThat(show.isInternal()).isFalse();
assertThat(show.responseExampleAsString()).isNotEmpty();
- assertThat(show.params()).hasSize(40);
+ assertThat(show.params()).hasSize(39);
}
@Test
@@ -316,48 +316,6 @@ public class SearchActionMediumTest {
}
@Test
- public void ignore_paging_with_one_component() throws Exception {
- RuleDto rule = newRule();
- ComponentDto project = insertComponent(ComponentTesting.newProjectDto("ABCD").setKey("MyProject"));
- setDefaultProjectPermission(project);
- ComponentDto file = insertComponent(ComponentTesting.newFileDto(project, "BCDE").setKey("MyComponent"));
- for (int i = 0; i < QueryContext.MAX_LIMIT + 1; i++) {
- IssueDto issue = IssueTesting.newDto(rule, file, project);
- tester.get(IssueDao.class).insert(session, issue);
- }
- session.commit();
- tester.get(IssueIndexer.class).indexAll();
-
- WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
- .setParam(IssueFilterParameters.COMPONENTS, file.getKey())
- .setParam(IssueFilterParameters.IGNORE_PAGING, "true")
- .execute();
- result.assertJson(this.getClass(), "ignore_paging_with_one_component.json");
- }
-
- @Test
- public void apply_paging_with_multiple_components() throws Exception {
- RuleDto rule = newRule();
- ComponentDto project = insertComponent(ComponentTesting.newProjectDto("ABCD").setKey("MyProject"));
- setDefaultProjectPermission(project);
- ComponentDto file = insertComponent(ComponentTesting.newFileDto(project, "BCDE").setKey("MyComponent"));
- for (int i = 0; i < QueryContext.MAX_LIMIT + 1; i++) {
- IssueDto issue = IssueTesting.newDto(rule, file, project);
- tester.get(IssueDao.class).insert(session, issue);
- }
- session.commit();
- tester.get(IssueIndexer.class).indexAll();
-
- ComponentDto otherFile = insertComponent(ComponentTesting.newFileDto(project).setUuid("FEDC").setKey("OtherComponent"));
-
- WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION)
- .setParam(IssueFilterParameters.COMPONENTS, file.getKey() + "," + otherFile.getKey())
- .setParam(IssueFilterParameters.IGNORE_PAGING, "true")
- .execute();
- result.assertJson(this.getClass(), "apply_paging_with_multiple_components.json");
- }
-
- @Test
public void apply_paging_with_one_component() throws Exception {
RuleDto rule = newRule();
ComponentDto project = insertComponent(ComponentTesting.newProjectDto("ABCD").setKey("MyProject"));