]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-9073 rename attributes of api/components/suggestions
authorDaniel Schwarz <daniel.schwarz@sonarsource.com>
Fri, 7 Apr 2017 15:15:54 +0000 (17:15 +0200)
committerDaniel Schwarz <bartfastiel@users.noreply.github.com>
Thu, 20 Apr 2017 07:48:52 +0000 (09:48 +0200)
server/sonar-server/src/main/java/org/sonar/server/component/ws/SuggestionCategory.java [new file with mode: 0644]
server/sonar-server/src/main/java/org/sonar/server/component/ws/SuggestionsAction.java
server/sonar-server/src/main/resources/org/sonar/server/component/ws/components-example-suggestions.json
server/sonar-server/src/test/java/org/sonar/server/component/ws/SuggestionsActionTest.java
sonar-ws/src/main/protobuf/ws-components.proto

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 (file)
index 0000000..510aee9
--- /dev/null
@@ -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)));
+  }
+}
index d24611ae113c5cb8edce205fffdf0da7e7e1af9e..0fabd024cd27f2bf750873e048abe1ada8a13c7e 100644 (file)
@@ -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<ComponentsPerQualifier> getComponentsPerQualifiers(String more, ComponentIndexQuery.Builder queryBuilder) {
     List<ComponentsPerQualifier> 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<ComponentsPerQualifier> 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<Qualifier> getResultsOfAllQualifiers(List<ComponentsPerQualifier> componentsPerQualifiers) {
+  private List<Category> getResultsOfAllQualifiers(List<ComponentsPerQualifier> 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();
index 3548c4123f66ab42a28827483a81f687e791ee4f..21923cd063efe473dbcabb62a5cde685707ed4fe 100644 (file)
@@ -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": [
       ]
     }
index eefe65f4c5fb9a63d4d87155a94c68e98ac3dc03..5611a799d1bda7f08eb60e0a1e030cccbfc646c2 100644 (file)
@@ -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<ComponentDto> 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);
   }
 }
index 70eee9bbda03fb5c7aa6045e3cc1238582ab4ce9..56d9a2237ded3bdfd701be97c3f5d7f1a4c56754 100644 (file)
@@ -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;
   }