@@ -80,9 +80,6 @@ public class ChangelogActionIT { | |||
.getInput(); | |||
assertJson(response).isSimilarTo("{\n" + | |||
" \"total\": 1,\n" + | |||
" \"p\": 1,\n" + | |||
" \"ps\": 50,\n" + | |||
" \"paging\": {\n" + | |||
" \"pageIndex\": 1,\n" + | |||
" \"pageSize\": 50,\n" + | |||
@@ -179,7 +176,7 @@ public class ChangelogActionIT { | |||
.execute() | |||
.getInput(); | |||
assertJson(response).isSimilarTo("{\"total\":0,\"p\":1,\"ps\":50,\"paging\":{\"pageIndex\":1,\"pageSize\":50,\"total\":0},\"events\":[]}"); | |||
assertJson(response).isSimilarTo("{\"paging\":{\"pageIndex\":1,\"pageSize\":50,\"total\":0},\"events\":[]}"); | |||
} | |||
@Test | |||
@@ -347,13 +344,14 @@ public class ChangelogActionIT { | |||
.setChangeType(ActiveRuleChange.Type.ACTIVATED.name()) | |||
.setData(ImmutableMap.of("severity", "MAJOR", "param_format", "^[A-Z][a-zA-Z0-9]*$", "ruleUuid", rule3.getUuid()))); | |||
ws.newRequest() | |||
String result = ws.newRequest() | |||
.setMethod("GET") | |||
.setParam(PARAM_LANGUAGE, profile.getLanguage()) | |||
.setParam(PARAM_QUALITY_PROFILE, profile.getName()) | |||
.setParam("ps", "10") | |||
.execute() | |||
.assertJson(this.getClass(), "changelog_example.json"); | |||
.getInput(); | |||
assertJson(result).isSimilarTo(ws.getDef().responseExampleAsString()); | |||
} | |||
@Test |
@@ -163,8 +163,6 @@ public class SearchActionIT { | |||
.setParam(WebService.Param.FIELDS, "actives") | |||
.executeProtobuf(Rules.SearchResponse.class); | |||
assertThat(response.getTotal()).isZero(); | |||
assertThat(response.getP()).isOne(); | |||
assertThat(response.getPaging().getTotal()).isZero(); | |||
assertThat(response.getPaging().getPageIndex()).isOne(); | |||
assertThat(response.getPaging().getPageSize()).isNotZero(); | |||
@@ -558,7 +556,6 @@ public class SearchActionIT { | |||
SearchResponse result = ws.newRequest() | |||
.setParam("f", "langName") | |||
.executeProtobuf(SearchResponse.class); | |||
assertThat(result.getTotal()).isOne(); | |||
assertThat(result.getPaging().getTotal()).isOne(); | |||
assertThat(result.getPaging().getPageIndex()).isOne(); | |||
assertThat(result.getRulesCount()).isOne(); | |||
@@ -583,7 +580,6 @@ public class SearchActionIT { | |||
SearchResponse result = ws.newRequest() | |||
.setParam("f", "debtRemFn,remFnOverloaded,defaultDebtRemFn") | |||
.executeProtobuf(SearchResponse.class); | |||
assertThat(result.getTotal()).isOne(); | |||
assertThat(result.getPaging().getTotal()).isOne(); | |||
assertThat(result.getPaging().getPageIndex()).isOne(); | |||
assertThat(result.getRulesCount()).isOne(); | |||
@@ -617,7 +613,6 @@ public class SearchActionIT { | |||
SearchResponse result = ws.newRequest() | |||
.setParam("f", "debtRemFn,remFnOverloaded,defaultDebtRemFn") | |||
.executeProtobuf(SearchResponse.class); | |||
assertThat(result.getTotal()).isOne(); | |||
assertThat(result.getPaging().getTotal()).isOne(); | |||
assertThat(result.getPaging().getPageIndex()).isOne(); | |||
assertThat(result.getRulesCount()).isOne(); | |||
@@ -651,7 +646,6 @@ public class SearchActionIT { | |||
SearchResponse result = ws.newRequest() | |||
.setParam("f", "debtRemFn,remFnOverloaded,defaultDebtRemFn") | |||
.executeProtobuf(SearchResponse.class); | |||
assertThat(result.getTotal()).isOne(); | |||
assertThat(result.getPaging().getTotal()).isOne(); | |||
assertThat(result.getPaging().getPageIndex()).isOne(); | |||
assertThat(result.getRulesCount()).isOne(); | |||
@@ -683,7 +677,6 @@ public class SearchActionIT { | |||
.setParam("f", "isTemplate") | |||
.setParam("is_template", "true") | |||
.executeProtobuf(SearchResponse.class); | |||
assertThat(result.getTotal()).isOne(); | |||
assertThat(result.getPaging().getTotal()).isOne(); | |||
assertThat(result.getPaging().getPageIndex()).isOne(); | |||
assertThat(result.getRulesCount()).isOne(); | |||
@@ -707,7 +700,6 @@ public class SearchActionIT { | |||
.setParam("f", "templateKey") | |||
.setParam("template_key", templateRule.getRepositoryKey() + ":" + templateRule.getRuleKey()) | |||
.executeProtobuf(SearchResponse.class); | |||
assertThat(result.getTotal()).isOne(); | |||
assertThat(result.getPaging().getTotal()).isOne(); | |||
assertThat(result.getPaging().getPageIndex()).isOne(); | |||
assertThat(result.getRulesCount()).isOne(); | |||
@@ -725,7 +717,6 @@ public class SearchActionIT { | |||
SearchResponse result = ws.newRequest().executeProtobuf(SearchResponse.class); | |||
assertThat(result.getTotal()).isZero(); | |||
assertThat(result.getPaging().getTotal()).isZero(); | |||
assertThat(result.getPaging().getPageIndex()).isOne(); | |||
assertThat(result.getRulesCount()).isZero(); | |||
@@ -744,7 +735,6 @@ public class SearchActionIT { | |||
.setParam("q", rule.getName()) | |||
.setParam("activation", "true") | |||
.executeProtobuf(SearchResponse.class); | |||
assertThat(result.getTotal()).isOne(); | |||
assertThat(result.getPaging().getTotal()).isOne(); | |||
assertThat(result.getPaging().getPageIndex()).isOne(); | |||
assertThat(result.getRulesCount()).isOne(); | |||
@@ -789,7 +779,6 @@ public class SearchActionIT { | |||
.setParam("activation", "true") | |||
.setParam("qprofile", profile.getKee()) | |||
.executeProtobuf(SearchResponse.class); | |||
assertThat(result.getTotal()).isOne(); | |||
assertThat(result.getPaging().getTotal()).isOne(); | |||
assertThat(result.getPaging().getPageIndex()).isOne(); | |||
assertThat(result.getRulesCount()).isOne(); | |||
@@ -846,7 +835,6 @@ public class SearchActionIT { | |||
.setParam("qprofile", profile.getKee()) | |||
.executeProtobuf(SearchResponse.class); | |||
assertThat(result.getTotal()).isOne(); | |||
assertThat(result.getPaging().getTotal()).isOne(); | |||
assertThat(result.getPaging().getPageIndex()).isOne(); | |||
assertThat(result.getRulesCount()).isOne(); | |||
@@ -1060,14 +1048,12 @@ public class SearchActionIT { | |||
requestPopulator.accept(request); | |||
Rules.SearchResponse response = request.executeProtobuf(Rules.SearchResponse.class); | |||
assertThat(response.getP()).isOne(); | |||
assertThat(response.getPaging().getPageIndex()).isOne(); | |||
assertThat(response.getPaging().getPageSize()).isNotZero(); | |||
RuleKey[] expectedRuleKeys = stream(expectedRules).map(RuleDto::getKey).toList().toArray(new RuleKey[0]); | |||
assertThat(response.getRulesList()) | |||
.extracting(r -> RuleKey.parse(r.getKey())) | |||
.containsExactlyInAnyOrder(expectedRuleKeys); | |||
assertThat(response.getTotal()).isEqualTo(expectedRules.length); | |||
assertThat(response.getPaging().getTotal()).isEqualTo(expectedRules.length); | |||
assertThat(response.getRulesCount()).isEqualTo(expectedRules.length); | |||
} |
@@ -71,6 +71,7 @@ public class UsersActionIT { | |||
assertThat(wsDef.since()).isEqualTo("5.2"); | |||
assertThat(wsDef.isPost()).isFalse(); | |||
assertThat(wsDef.changelog()).extracting(Change::getVersion, Change::getDescription).containsOnly( | |||
tuple("10.2", "Response fields 'total', 's', 'ps' dropped"), | |||
tuple("10.0", "Field 'managed' added to the payload."), | |||
tuple("10.0", "Parameter 'id' is removed. Use 'name' instead."), | |||
tuple("9.8", "response fields 'total', 's', 'ps' have been deprecated, please use 'paging' object instead."), | |||
@@ -115,8 +116,6 @@ public class UsersActionIT { | |||
assertJson(result).isSimilarTo(""" | |||
{ | |||
"p": 1, | |||
"total": 0, | |||
"paging": { | |||
"pageIndex": 1, | |||
"pageSize": 25, | |||
@@ -255,9 +254,6 @@ public class UsersActionIT { | |||
.execute() | |||
.getInput()).isSimilarTo(""" | |||
{ | |||
"p": 1, | |||
"ps": 1, | |||
"total": 2, | |||
"paging": { | |||
"pageIndex": 1, | |||
"pageSize": 1, | |||
@@ -275,9 +271,6 @@ public class UsersActionIT { | |||
.execute() | |||
.getInput()).isSimilarTo(""" | |||
{ | |||
"p": 2, | |||
"ps": 1, | |||
"total": 2, | |||
"paging": { | |||
"pageIndex": 2, | |||
"pageSize": 1, |
@@ -1,4 +1,6 @@ | |||
{ | |||
"total": 0, | |||
"paging": { | |||
"total": 0 | |||
}, | |||
"issues": [] | |||
} |
@@ -1,7 +1,4 @@ | |||
{ | |||
"total": 501, | |||
"p": 1, | |||
"ps": 100, | |||
"paging": { | |||
"pageIndex": 1, | |||
"pageSize": 100, |
@@ -1,7 +1,4 @@ | |||
{ | |||
"total": 0, | |||
"p": 1, | |||
"ps": 100, | |||
"paging": { | |||
"pageIndex": 1, | |||
"pageSize": 100, |
@@ -1,7 +1,4 @@ | |||
{ | |||
"total": 0, | |||
"p": 1, | |||
"ps": 100, | |||
"paging": { | |||
"pageIndex": 1, | |||
"pageSize": 100, |
@@ -1,7 +1,4 @@ | |||
{ | |||
"total": 1, | |||
"p": 1, | |||
"ps": 100, | |||
"paging": { | |||
"pageIndex": 1, | |||
"pageSize": 100, |
@@ -1,7 +1,4 @@ | |||
{ | |||
"total": 2, | |||
"p": 1, | |||
"ps": 100, | |||
"paging": { | |||
"pageIndex": 1, | |||
"pageSize": 100, |
@@ -1,7 +1,4 @@ | |||
{ | |||
"total": 2, | |||
"p": 1, | |||
"ps": 100, | |||
"paging": { | |||
"pageIndex": 1, | |||
"pageSize": 100, |
@@ -1,7 +1,4 @@ | |||
{ | |||
"total": 2, | |||
"p": 1, | |||
"ps": 100, | |||
"paging": { | |||
"pageIndex": 1, | |||
"pageSize": 100, |
@@ -1,7 +1,4 @@ | |||
{ | |||
"total": 1, | |||
"p": 1, | |||
"ps": 100, | |||
"paging": { | |||
"pageIndex": 1, | |||
"pageSize": 100, |
@@ -1,5 +1,4 @@ | |||
{ | |||
"total": 0, | |||
"issues": [], | |||
"paging": { | |||
"pageIndex": 1, |
@@ -1,7 +1,4 @@ | |||
{ | |||
"total": 12, | |||
"p": 2, | |||
"ps": 9, | |||
"paging": { | |||
"pageIndex": 2, | |||
"pageSize": 9, |
@@ -1,7 +1,4 @@ | |||
{ | |||
"total": 1, | |||
"p": 1, | |||
"ps": 100, | |||
"paging": { | |||
"pageIndex": 1, | |||
"pageSize": 100, |
@@ -1,7 +1,4 @@ | |||
{ | |||
"total": 3, | |||
"p": 1, | |||
"ps": 100, | |||
"paging": { | |||
"pageIndex": 1, | |||
"pageSize": 100, |
@@ -1,43 +0,0 @@ | |||
{ | |||
"total": 3, | |||
"ps": 10, | |||
"p": 1, | |||
"paging": { | |||
"pageSize": 10, | |||
"total": 3, | |||
"pageIndex": 1 | |||
}, | |||
"events": [ | |||
{ | |||
"date" : "2015-02-23T17:58:39+0100", | |||
"action" : "ACTIVATED", | |||
"authorLogin" : "anakin.skywalker", | |||
"authorName" : "Anakin Skywalker", | |||
"ruleKey" : "java:S2438", | |||
"ruleName" : "\"Threads\" should not be used where \"Runnables\" are expected", | |||
"params" : { | |||
"severity" : "CRITICAL" | |||
} | |||
}, | |||
{ | |||
"date" : "2015-02-23T17:58:18+0100", | |||
"action" : "DEACTIVATED", | |||
"authorLogin" : "padme.amidala", | |||
"authorName" : "Padme Amidala", | |||
"ruleKey" : "java:S2162", | |||
"ruleName" : "\"equals\" methods should be symmetric and work for subclasses" | |||
}, | |||
{ | |||
"action" : "ACTIVATED", | |||
"authorLogin" : "obiwan.kenobi", | |||
"authorName" : "Obiwan Kenobi", | |||
"ruleKey" : "java:S00101", | |||
"ruleName" : "Class names should comply with a naming convention", | |||
"date" : "2014-09-12T15:20:46+0200", | |||
"params" : { | |||
"severity" : "MAJOR", | |||
"format" : "^[A-Z][a-zA-Z0-9]*$" | |||
} | |||
} | |||
] | |||
} |
@@ -1,7 +1,4 @@ | |||
{ | |||
"total": 12, | |||
"p": 2, | |||
"ps": 9, | |||
"paging": { | |||
"pageIndex": 2, | |||
"pageSize": 9, |
@@ -194,6 +194,7 @@ public class SearchAction implements IssuesWsAction { | |||
+ "<br/>When issue indexation is in progress returns 503 service unavailable HTTP code.") | |||
.setSince("3.6") | |||
.setChangelog( | |||
new Change("10.2", "Response fields 'total', 's', 'ps' dropped"), | |||
new Change("10.2", format("Parameter '%s' renamed to '%s'", PARAM_COMPONENT_KEYS, PARAM_COMPONENTS)), | |||
new Change("10.1", "Add the 'codeVariants' parameter, facet and response field"), | |||
new Change("10.0", "Parameter 'sansTop25' is deprecated"), |
@@ -101,7 +101,7 @@ public class SearchResponseFormat { | |||
SearchWsResponse formatSearch(Set<SearchAdditionalField> fields, SearchResponseData data, Paging paging, Facets facets) { | |||
SearchWsResponse.Builder response = SearchWsResponse.newBuilder(); | |||
formatPaging(paging, response); | |||
response.setPaging(formatPaging(paging)); | |||
ofNullable(data.getEffortTotal()).ifPresent(response::setEffortTotal); | |||
response.addAllIssues(createIssues(fields, data)); | |||
response.addAllComponents(formatComponents(data)); | |||
@@ -142,13 +142,6 @@ public class SearchResponseFormat { | |||
return response.build(); | |||
} | |||
private static void formatPaging(Paging paging, SearchWsResponse.Builder response) { | |||
response.setP(paging.pageIndex()); | |||
response.setPs(paging.pageSize()); | |||
response.setTotal(paging.total()); | |||
response.setPaging(formatPaging(paging)); | |||
} | |||
private static Common.Paging.Builder formatPaging(Paging paging) { | |||
return Common.Paging.newBuilder() | |||
.setPageIndex(paging.pageIndex()) |
@@ -70,6 +70,7 @@ public class ChangelogAction implements QProfileWsAction { | |||
.setDescription("Get the history of changes on a quality profile: rule activation/deactivation, change in parameters/severity. " + | |||
"Events are ordered by date in descending order (most recent first).") | |||
.setChangelog( | |||
new org.sonar.api.server.ws.Change("10.2", "Response fields 'total', 's', 'ps' dropped"), | |||
new org.sonar.api.server.ws.Change("9.8", "response fields 'total', 's', 'ps' have been deprecated, please use 'paging' object instead"), | |||
new org.sonar.api.server.ws.Change("9.8", "The field 'paging' has been added to the response")) | |||
.setHandler(this) | |||
@@ -144,11 +145,6 @@ public class ChangelogAction implements QProfileWsAction { | |||
Map<String, UserDto> usersByUuid, Map<String, RuleDto> rulesByRuleUuids) { | |||
json.beginObject(); | |||
writePaging(json, total, page, pageSize); | |||
json.name("paging").beginObject() | |||
.prop("pageIndex", page) | |||
.prop("pageSize", pageSize) | |||
.prop("total", total) | |||
.endObject(); | |||
json.name("events").beginArray(); | |||
changelogs.forEach(change -> { | |||
JsonWriter changeWriter = json.beginObject(); | |||
@@ -183,14 +179,12 @@ public class ChangelogAction implements QProfileWsAction { | |||
json.endObject(); | |||
} | |||
/** | |||
* @deprecated since 9.8 - replaced by 'paging' object structure. | |||
*/ | |||
@Deprecated(since = "9.8") | |||
private static void writePaging(JsonWriter json, int total, int page, int pageSize) { | |||
json.prop("total", total); | |||
json.prop(Param.PAGE, page); | |||
json.prop(Param.PAGE_SIZE, pageSize); | |||
json.name("paging").beginObject() | |||
.prop("pageIndex", page) | |||
.prop("pageSize", pageSize) | |||
.prop("total", total) | |||
.endObject(); | |||
} | |||
/** |
@@ -165,7 +165,8 @@ public class SearchAction implements RulesWsAction { | |||
new Change("10.0", "The value 'debtRemFn' for the 'f' parameter has been deprecated, use 'remFn' instead"), | |||
new Change("10.0", "The value 'defaultDebtRemFn' for the 'f' parameter has been deprecated, use 'defaultRemFn' instead"), | |||
new Change("10.0", "The value 'sansTop25' for the parameter 'facets' has been deprecated"), | |||
new Change("10.0", "Parameter 'sansTop25' is deprecated") | |||
new Change("10.0", "Parameter 'sansTop25' is deprecated"), | |||
new Change("10.2", "Response fields 'total', 's', 'ps' dropped") | |||
); | |||
action.createParam(FACETS) | |||
@@ -203,7 +204,7 @@ public class SearchAction implements RulesWsAction { | |||
private SearchResponse buildResponse(DbSession dbSession, SearchRequest request, SearchOptions context, SearchResult result, RuleQuery query) { | |||
SearchResponse.Builder responseBuilder = SearchResponse.newBuilder(); | |||
writeStatistics(responseBuilder, result, context); | |||
writePaging(responseBuilder, result, context); | |||
doContextResponse(dbSession, request, result, responseBuilder, query); | |||
if (!context.getFacets().isEmpty()) { | |||
writeFacets(responseBuilder, request, context, result); | |||
@@ -211,10 +212,7 @@ public class SearchAction implements RulesWsAction { | |||
return responseBuilder.build(); | |||
} | |||
private static void writeStatistics(SearchResponse.Builder response, SearchResult searchResult, SearchOptions context) { | |||
response.setTotal(searchResult.total); | |||
response.setP(context.getPage()); | |||
response.setPs(context.getLimit()); | |||
private static void writePaging(SearchResponse.Builder response, SearchResult searchResult, SearchOptions context) { | |||
response.setPaging(formatPaging(searchResult.total, context.getPage(), context.getLimit())); | |||
} | |||
@@ -76,6 +76,7 @@ public class UsersAction implements UserGroupsWsAction { | |||
.addSearchQuery("freddy", "names", "logins") | |||
.addPagingParams(25) | |||
.setChangelog( | |||
new Change("10.2", "Response fields 'total', 's', 'ps' dropped"), | |||
new Change("10.0", "Field 'managed' added to the payload."), | |||
new Change("10.0", "Parameter 'id' is removed. Use 'name' instead."), | |||
new Change("9.8", "response fields 'total', 's', 'ps' have been deprecated, please use 'paging' object instead."), | |||
@@ -111,11 +112,6 @@ public class UsersAction implements UserGroupsWsAction { | |||
json.beginObject(); | |||
writeMembers(json, users, userUuidToIsManaged); | |||
writePaging(json, paging); | |||
json.name("paging").beginObject() | |||
.prop("pageIndex", page) | |||
.prop("pageSize", pageSize) | |||
.prop("total", total) | |||
.endObject(); | |||
json.endObject(); | |||
} | |||
} | |||
@@ -138,14 +134,12 @@ public class UsersAction implements UserGroupsWsAction { | |||
json.endArray(); | |||
} | |||
/** | |||
* @deprecated since 9.8 - replaced by 'paging' object structure. | |||
*/ | |||
@Deprecated(since = "9.8") | |||
private static void writePaging(JsonWriter json, Paging paging) { | |||
json.prop(Param.PAGE, paging.pageIndex()) | |||
.prop(Param.PAGE_SIZE, paging.pageSize()) | |||
.prop("total", paging.total()); | |||
json.name("paging").beginObject() | |||
.prop("pageIndex", paging.pageIndex()) | |||
.prop("pageSize", paging.pageSize()) | |||
.prop("total", paging.total()) | |||
.endObject(); | |||
} | |||
private static String getMembership(String selected) { |
@@ -63,9 +63,9 @@ public class DefaultActiveRulesLoader implements ActiveRulesLoader { | |||
SearchResponse response = loadFromStream(wsClient.call(getRequest).contentStream()); | |||
List<LoadedActiveRule> pageRules = readPage(response); | |||
ruleList.addAll(pageRules); | |||
loaded += response.getPs(); | |||
loaded += response.getPaging().getPageSize(); | |||
if (response.getTotal() <= loaded) { | |||
if (response.getPaging().getTotal() <= loaded) { | |||
break; | |||
} | |||
page++; |
@@ -33,6 +33,7 @@ import org.sonar.api.utils.MessageException; | |||
import org.sonar.scanner.WsTestUtil; | |||
import org.sonar.scanner.bootstrap.DefaultScannerWsClient; | |||
import org.sonar.scanner.scan.branch.BranchConfiguration; | |||
import org.sonarqube.ws.Common; | |||
import org.sonarqube.ws.Rules; | |||
import org.sonarqube.ws.Rules.Active; | |||
import org.sonarqube.ws.Rules.ActiveList; | |||
@@ -137,8 +138,7 @@ public class DefaultActiveRulesLoaderTest { | |||
}); | |||
rules.setActives(actives); | |||
rules.setPs(numberOfRules); | |||
rules.setTotal(total); | |||
rules.setPaging(Common.Paging.newBuilder().setPageSize(numberOfRules).setTotal(total)); | |||
return new ByteArrayInputStream(rules.build().toByteArray()); | |||
} | |||
@@ -156,8 +156,7 @@ public class DefaultActiveRulesLoaderTest { | |||
}); | |||
rules.setActives(actives); | |||
rules.setPs(3); | |||
rules.setTotal(3); | |||
rules.setPaging(Common.Paging.newBuilder().setPageSize(3).setTotal(3)); | |||
return new ByteArrayInputStream(rules.build().toByteArray()); | |||
} | |||
} |
@@ -29,9 +29,9 @@ option optimize_for = SPEED; | |||
// Response of GET api/issues/search | |||
message SearchWsResponse { | |||
reserved 5; | |||
optional int64 total = 1 [deprecated=true]; | |||
optional int64 p = 2 [deprecated=true]; | |||
optional int32 ps = 3 [deprecated=true]; | |||
reserved 1; | |||
reserved 2; | |||
reserved 3; | |||
optional sonarqube.ws.commons.Paging paging = 4; | |||
// Total amount of effort, only when the facet "total" is enabled |
@@ -41,10 +41,9 @@ message ListResponse { | |||
// WS api/rules/search | |||
message SearchResponse { | |||
optional int64 total = 1 [deprecated=true]; | |||
optional int32 p = 2 [deprecated=true]; | |||
optional int64 ps = 3 [deprecated=true]; | |||
reserved 1; | |||
reserved 2; | |||
reserved 3; | |||
repeated Rule rules = 4; | |||
optional Actives actives = 5; | |||
optional QProfiles qProfiles = 6; |