From 9f10a00a15426a6a1b2eebc8bd68aa02f8c83f73 Mon Sep 17 00:00:00 2001 From: Daniel Schwarz Date: Fri, 7 Apr 2017 17:15:54 +0200 Subject: [PATCH] SONAR-9073 rename attributes of api/components/suggestions --- .../component/ws/SuggestionCategory.java | 55 +++++++++++++++++++ .../component/ws/SuggestionsAction.java | 31 ++++------- .../ws/components-example-suggestions.json | 6 +- .../component/ws/SuggestionsActionTest.java | 28 +++++----- .../src/main/protobuf/ws-components.proto | 6 +- 5 files changed, 86 insertions(+), 40 deletions(-) create mode 100644 server/sonar-server/src/main/java/org/sonar/server/component/ws/SuggestionCategory.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/ws/SuggestionCategory.java b/server/sonar-server/src/main/java/org/sonar/server/component/ws/SuggestionCategory.java new file mode 100644 index 00000000000..510aee9aa43 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/component/ws/SuggestionCategory.java @@ -0,0 +1,55 @@ +/* + * 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.sonar.server.component.ws; + +import org.sonar.api.resources.Qualifiers; + +import static java.util.Arrays.stream; + +public enum SuggestionCategory { + VIEW("views", Qualifiers.VIEW), + SUBVIEW("sub-views", Qualifiers.SUBVIEW), + PROJECT("projects", Qualifiers.PROJECT), + MODULE("modules", Qualifiers.MODULE), + FILE("files", Qualifiers.FILE), + UNIT_TEST_FILE("unit-test-files", Qualifiers.UNIT_TEST_FILE),; + + private final String name; + private final String qualifier; + + SuggestionCategory(String name, String qualifier) { + this.name = name; + this.qualifier = qualifier; + } + + public String getName() { + return name; + } + + public String getQualifier() { + return qualifier; + } + + public static SuggestionCategory getByName(String name) { + return stream(values()).filter(c -> c.getName().equals(name)).findAny() + .orElseThrow(() -> new IllegalStateException(String.format("Cannot find category for name '%s'.", name))); + } +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/ws/SuggestionsAction.java b/server/sonar-server/src/main/java/org/sonar/server/component/ws/SuggestionsAction.java index d24611ae113..0fabd024cd2 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/component/ws/SuggestionsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/ws/SuggestionsAction.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; import javax.annotation.Nullable; -import org.sonar.api.resources.Qualifiers; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; @@ -42,10 +41,11 @@ import org.sonar.server.component.index.ComponentsPerQualifier; import org.sonar.server.es.textsearch.ComponentTextSearchFeature; import org.sonarqube.ws.WsComponents.Component; import org.sonarqube.ws.WsComponents.SuggestionsWsResponse; -import org.sonarqube.ws.WsComponents.SuggestionsWsResponse.Qualifier; +import org.sonarqube.ws.WsComponents.SuggestionsWsResponse.Category; import static com.google.common.base.Preconditions.checkState; -import static java.util.Arrays.asList; +import static java.util.Arrays.stream; +import static java.util.Collections.singletonList; import static java.util.Optional.ofNullable; import static org.sonar.core.util.stream.MoreCollectors.toList; import static org.sonar.server.es.DefaultIndexSettings.MINIMUM_NGRAM_LENGTH; @@ -58,15 +58,6 @@ public class SuggestionsAction implements ComponentsWsAction { static final String PARAM_MORE = "more"; static final String SHORT_INPUT_WARNING = "short_input"; - private static final String[] QUALIFIERS = { - Qualifiers.VIEW, - Qualifiers.SUBVIEW, - Qualifiers.PROJECT, - Qualifiers.MODULE, - Qualifiers.FILE, - Qualifiers.UNIT_TEST_FILE - }; - static final int DEFAULT_LIMIT = 6; static final int EXTENDED_LIMIT = 20; @@ -95,8 +86,8 @@ public class SuggestionsAction implements ComponentsWsAction { .setExampleValue("sonar"); action.createParam(PARAM_MORE) - .setDescription("Qualifier, for which to display " + EXTENDED_LIMIT + " instead of " + DEFAULT_LIMIT + " results") - .setPossibleValues(QUALIFIERS) + .setDescription("Category, for which to display " + EXTENDED_LIMIT + " instead of " + DEFAULT_LIMIT + " results") + .setPossibleValues(stream(SuggestionCategory.values()).map(SuggestionCategory::getName).toArray(String[]::new)) .setSince("6.4"); } @@ -125,10 +116,10 @@ public class SuggestionsAction implements ComponentsWsAction { private List getComponentsPerQualifiers(String more, ComponentIndexQuery.Builder queryBuilder) { List componentsPerQualifiers; if (more == null) { - queryBuilder.setQualifiers(asList(QUALIFIERS)) + queryBuilder.setQualifiers(stream(SuggestionCategory.values()).map(SuggestionCategory::getQualifier).collect(Collectors.toList())) .setLimit(DEFAULT_LIMIT); } else { - queryBuilder.setQualifiers(Collections.singletonList(more)) + queryBuilder.setQualifiers(singletonList(SuggestionCategory.getByName(more).getQualifier())) .setLimit(EXTENDED_LIMIT); } componentsPerQualifiers = searchInIndex(queryBuilder.build()); @@ -141,12 +132,12 @@ public class SuggestionsAction implements ComponentsWsAction { private SuggestionsWsResponse toResponse(List componentsPerQualifiers, @Nullable String warning) { SuggestionsWsResponse.Builder builder = SuggestionsWsResponse.newBuilder() - .addAllResults(getResultsOfAllQualifiers(componentsPerQualifiers)); + .addAllSuggestions(getResultsOfAllQualifiers(componentsPerQualifiers)); ofNullable(warning).ifPresent(builder::setWarning); return builder.build(); } - private List getResultsOfAllQualifiers(List componentsPerQualifiers) { + private List getResultsOfAllQualifiers(List componentsPerQualifiers) { if (componentsPerQualifiers.isEmpty()) { return Collections.emptyList(); } @@ -167,8 +158,8 @@ public class SuggestionsAction implements ComponentsWsAction { .map(dto -> dtoToComponent(dto, organizationKeyByUuids)) .collect(toList()); - return Qualifier.newBuilder() - .setQ(qualifier.getQualifier()) + return Category.newBuilder() + .setCategory(qualifier.getQualifier()) .setMore(qualifier.getNumberOfFurtherResults()) .addAllItems(results) .build(); diff --git a/server/sonar-server/src/main/resources/org/sonar/server/component/ws/components-example-suggestions.json b/server/sonar-server/src/main/resources/org/sonar/server/component/ws/components-example-suggestions.json index 3548c4123f6..21923cd063e 100644 --- a/server/sonar-server/src/main/resources/org/sonar/server/component/ws/components-example-suggestions.json +++ b/server/sonar-server/src/main/resources/org/sonar/server/component/ws/components-example-suggestions.json @@ -1,7 +1,7 @@ { - "results": [ + "suggestions": [ { - "q": "TRK", + "category": "projects", "items": [ { "organization": "default-organization", @@ -17,7 +17,7 @@ "more": 74 }, { - "q": "FIL", + "category": "files", "items": [ ] } diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ws/SuggestionsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ws/SuggestionsActionTest.java index eefe65f4c5f..5611a799d1b 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/ws/SuggestionsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/ws/SuggestionsActionTest.java @@ -102,14 +102,14 @@ public class SuggestionsActionTest { .executeProtobuf(SuggestionsWsResponse.class); // assert match in qualifier "TRK" - assertThat(response.getResultsList()) + assertThat(response.getSuggestionsList()) .filteredOn(q -> q.getItemsCount() > 0) - .extracting(SuggestionsWsResponse.Qualifier::getQ) + .extracting(SuggestionsWsResponse.Category::getCategory) .containsExactly(Qualifiers.PROJECT); // assert correct id to be found - assertThat(response.getResultsList()) - .flatExtracting(SuggestionsWsResponse.Qualifier::getItemsList) + assertThat(response.getSuggestionsList()) + .flatExtracting(SuggestionsWsResponse.Category::getItemsList) .extracting(WsComponents.Component::getKey, WsComponents.Component::getOrganization) .containsExactly(tuple(project.getKey(), organization.getKey())); } @@ -126,7 +126,7 @@ public class SuggestionsActionTest { .setParam(PARAM_QUERY, "S o") .executeProtobuf(SuggestionsWsResponse.class); - assertThat(response.getResultsList()).filteredOn(q -> q.getItemsCount() > 0).isEmpty(); + assertThat(response.getSuggestionsList()).filteredOn(q -> q.getItemsCount() > 0).isEmpty(); assertThat(response.getWarning()).contains(SHORT_INPUT_WARNING); } @@ -157,10 +157,10 @@ public class SuggestionsActionTest { @Test public void show_show_more_results_if_requested() throws Exception { - check_proposal_to_show_more_results(21, EXTENDED_LIMIT, 1L, Qualifiers.PROJECT); + check_proposal_to_show_more_results(21, EXTENDED_LIMIT, 1L, SuggestionCategory.PROJECT); } - private void check_proposal_to_show_more_results(int numberOfProjects, int results, long numberOfMoreResults, @Nullable String moreQualifier) throws Exception { + private void check_proposal_to_show_more_results(int numberOfProjects, int results, long numberOfMoreResults, @Nullable SuggestionCategory more) throws Exception { String namePrefix = "MyProject"; List projects = range(0, numberOfProjects) @@ -173,25 +173,25 @@ public class SuggestionsActionTest { TestRequest request = actionTester.newRequest() .setMethod("POST") .setParam(PARAM_QUERY, namePrefix); - ofNullable(moreQualifier).ifPresent(q -> request.setParam(PARAM_MORE, q)); + ofNullable(more).ifPresent(c -> request.setParam(PARAM_MORE, c.getName())); SuggestionsWsResponse response = request .executeProtobuf(SuggestionsWsResponse.class); // assert match in qualifier "TRK" - assertThat(response.getResultsList()) + assertThat(response.getSuggestionsList()) .filteredOn(q -> q.getItemsCount() > 0) - .extracting(SuggestionsWsResponse.Qualifier::getQ) + .extracting(SuggestionsWsResponse.Category::getCategory) .containsExactly(Qualifiers.PROJECT); // include limited number of results in the response - assertThat(response.getResultsList()) - .flatExtracting(SuggestionsWsResponse.Qualifier::getItemsList) + assertThat(response.getSuggestionsList()) + .flatExtracting(SuggestionsWsResponse.Category::getItemsList) .hasSize(Math.min(results, numberOfProjects)); // indicate, that there are more results - assertThat(response.getResultsList()) + assertThat(response.getSuggestionsList()) .filteredOn(q -> q.getItemsCount() > 0) - .extracting(SuggestionsWsResponse.Qualifier::getMore) + .extracting(SuggestionsWsResponse.Category::getMore) .containsExactly(numberOfMoreResults); } } diff --git a/sonar-ws/src/main/protobuf/ws-components.proto b/sonar-ws/src/main/protobuf/ws-components.proto index 70eee9bbda0..56d9a2237de 100644 --- a/sonar-ws/src/main/protobuf/ws-components.proto +++ b/sonar-ws/src/main/protobuf/ws-components.proto @@ -48,11 +48,11 @@ message ShowWsResponse { // WS api/components/suggestions message SuggestionsWsResponse { - repeated Qualifier results = 1; + repeated Category suggestions = 1; optional string warning = 2; - message Qualifier { - optional string q = 1; + message Category { + optional string category = 1; repeated Component items = 2; optional int64 more = 3; } -- 2.39.5