]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8845 Filter project measures ES index by tags
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 2 Mar 2017 11:18:25 +0000 (12:18 +0100)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Fri, 3 Mar 2017 10:07:45 +0000 (11:07 +0100)
server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java
server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresQuery.java
server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java

index 52c7aeaf571068c78ab1571dc7cccb27aa7c95f5..df6914a1bbc85aecd9f607266d201e69ce8d231b 100644 (file)
@@ -70,6 +70,7 @@ import static org.sonar.server.measure.index.ProjectMeasuresIndexDefinition.FIEL
 import static org.sonar.server.measure.index.ProjectMeasuresIndexDefinition.FIELD_NAME;
 import static org.sonar.server.measure.index.ProjectMeasuresIndexDefinition.FIELD_ORGANIZATION_UUID;
 import static org.sonar.server.measure.index.ProjectMeasuresIndexDefinition.FIELD_QUALITY_GATE_STATUS;
+import static org.sonar.server.measure.index.ProjectMeasuresIndexDefinition.FIELD_TAGS;
 import static org.sonar.server.measure.index.ProjectMeasuresIndexDefinition.INDEX_TYPE_PROJECT_MEASURES;
 import static org.sonar.server.measure.index.ProjectMeasuresQuery.SORT_BY_NAME;
 import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_LANGUAGE;
@@ -258,6 +259,9 @@ public class ProjectMeasuresIndex extends BaseIndex {
     query.getOrganizationUuid()
       .ifPresent(organizationUuid -> filters.put(FIELD_ORGANIZATION_UUID, termQuery(FIELD_ORGANIZATION_UUID, organizationUuid)));
 
+    query.getTags()
+      .ifPresent(tags -> filters.put(FIELD_TAGS, termsQuery(FIELD_TAGS, tags)));
+
     createTextQueryFilter(query).ifPresent(queryBuilder -> filters.put("textQuery", queryBuilder));
     return filters;
   }
index 0b484c78ce20418d950aa6ccbf4a4f0b0aae02f7..f0847e8d061dc6088a630047ec710b0865f435e3 100644 (file)
@@ -38,6 +38,7 @@ public class ProjectMeasuresQuery {
   private String organizationUuid;
   private Set<String> projectUuids;
   private Set<String> languages;
+  private Set<String> tags;
   private String sort = SORT_BY_NAME;
   private boolean asc = true;
   private String queryText;
@@ -87,6 +88,15 @@ public class ProjectMeasuresQuery {
     return Optional.ofNullable(languages);
   }
 
+  public ProjectMeasuresQuery setTags(@Nullable Set<String> tags) {
+    this.tags = tags;
+    return this;
+  }
+
+  public Optional<Set<String>> getTags() {
+    return Optional.ofNullable(tags);
+  }
+
   public Optional<String> getQueryText() {
     return Optional.ofNullable(queryText);
   }
index caa7ec3a3268c2ecd528447661e1bb497404db62..9ab2994e9310f274472a502d32785f2cb46bc002 100644 (file)
@@ -284,7 +284,7 @@ public class ProjectMeasuresIndexTest {
       newDoc(project4).setLanguages(ImmutableMap.of("<null>", 10, "java", 2, "xoo", 12)));
 
     assertResults(new ProjectMeasuresQuery().setLanguages(newHashSet("java", "xoo")), PROJECT1, PROJECT2, PROJECT3, project4);
-    assertResults(new ProjectMeasuresQuery().setLanguages(newHashSet("java")), PROJECT1,project4);
+    assertResults(new ProjectMeasuresQuery().setLanguages(newHashSet("java")), PROJECT1, project4);
     assertResults(new ProjectMeasuresQuery().setLanguages(newHashSet("unknown")));
   }
 
@@ -312,6 +312,20 @@ public class ProjectMeasuresIndexTest {
     assertResults(query, PROJECT1, PROJECT3);
   }
 
+  @Test
+  public void filter_on_tags() {
+    index(
+      newDoc(PROJECT1).setTags(newArrayList("finance", "platform")),
+      newDoc(PROJECT2).setTags(newArrayList("marketing", "platform")),
+      newDoc(PROJECT3).setTags(newArrayList("finance", "language")));
+
+    assertResults(new ProjectMeasuresQuery().setTags(newHashSet("finance")), PROJECT1, PROJECT3);
+    assertResults(new ProjectMeasuresQuery().setTags(newHashSet("finance", "language")), PROJECT1, PROJECT3);
+    assertResults(new ProjectMeasuresQuery().setTags(newHashSet("finance", "marketing")), PROJECT1, PROJECT2, PROJECT3);
+    assertResults(new ProjectMeasuresQuery().setTags(newHashSet("marketing")), PROJECT2);
+    assertNoResults(new ProjectMeasuresQuery().setTags(newHashSet("tag 42")));
+  }
+
   @Test
   public void filter_on_organization() {
     OrganizationDto org1 = OrganizationTesting.newOrganizationDto();