From 845746eaf1d1f2d20f3a05a0e528ac696c65586a Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Thu, 2 Mar 2017 12:18:25 +0100 Subject: [PATCH] SONAR-8845 Filter project measures ES index by tags --- .../measure/index/ProjectMeasuresIndex.java | 4 ++++ .../measure/index/ProjectMeasuresQuery.java | 10 ++++++++++ .../measure/index/ProjectMeasuresIndexTest.java | 16 +++++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java b/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java index 52c7aeaf571..df6914a1bbc 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java @@ -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; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresQuery.java b/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresQuery.java index 0b484c78ce2..f0847e8d061 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresQuery.java +++ b/server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresQuery.java @@ -38,6 +38,7 @@ public class ProjectMeasuresQuery { private String organizationUuid; private Set projectUuids; private Set languages; + private Set 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 tags) { + this.tags = tags; + return this; + } + + public Optional> getTags() { + return Optional.ofNullable(tags); + } + public Optional getQueryText() { return Optional.ofNullable(queryText); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java index caa7ec3a326..9ab2994e931 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java @@ -284,7 +284,7 @@ public class ProjectMeasuresIndexTest { newDoc(project4).setLanguages(ImmutableMap.of("", 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(); -- 2.39.5