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;
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;
return asc;
}
- @CheckForNull
- public Boolean ignorePaging() {
- return ignorePaging;
- }
-
@CheckForNull
public String userLogin() {
return userLogin;
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;
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;
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;
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;
/**
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 {
.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,
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;
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);
}
}));
"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");
}
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);
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);
}
assertThat(show.isPost()).isFalse();
assertThat(show.isInternal()).isFalse();
assertThat(show.responseExampleAsString()).isNotEmpty();
- assertThat(show.params()).hasSize(40);
+ assertThat(show.params()).hasSize(39);
}
@Test
assertThat(result.outputAsString()).contains("\"componentId\":" + file.getId() + ",");
}
- @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();