Browse Source

SONAR-8231 Rename facet and filter 'language' to 'languages'

tags/6.4-RC1
Julien Lancelot 7 years ago
parent
commit
3698a09035

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/component/ws/ProjectMeasuresQueryFactory.java View File

@@ -41,7 +41,7 @@ import static org.sonar.api.measures.CoreMetrics.ALERT_STATUS_KEY;
import static org.sonar.server.component.ws.FilterParser.Operator.EQ;
import static org.sonar.server.component.ws.FilterParser.Operator.IN;
import static org.sonar.server.measure.index.ProjectMeasuresQuery.MetricCriterion;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_LANGUAGE;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_LANGUAGES;

class ProjectMeasuresQueryFactory {

@@ -51,7 +51,7 @@ class ProjectMeasuresQueryFactory {

private static final Map<String, BiConsumer<Criterion, ProjectMeasuresQuery>> CRITERION_PROCESSORS = ImmutableMap.<String, BiConsumer<Criterion, ProjectMeasuresQuery>>builder()
.put(IS_FAVORITE_CRITERION.toLowerCase(ENGLISH), (criterion, query) -> processIsFavorite(criterion))
.put(FILTER_LANGUAGE, ProjectMeasuresQueryFactory::processLanguages)
.put(FILTER_LANGUAGES, ProjectMeasuresQueryFactory::processLanguages)
.put(CRITERION_TAG, ProjectMeasuresQueryFactory::processTags)
.put(QUERY_KEY, ProjectMeasuresQueryFactory::processQuery)
.put(ALERT_STATUS_KEY, ProjectMeasuresQueryFactory::processQualityGateStatus)
@@ -90,7 +90,7 @@ class ProjectMeasuresQueryFactory {
query.setLanguages(new HashSet<>(values));
return;
}
throw new IllegalArgumentException("Language should be set either by using 'language = java' or 'language IN (java, js)'");
throw new IllegalArgumentException("Languages should be set either by using 'languages = java' or 'languages IN (java, js)'");
}

private static void processTags(Criterion criterion, ProjectMeasuresQuery query) {

+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/component/ws/SearchProjectsAction.java View File

@@ -78,7 +78,7 @@ import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_FIL
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_ORGANIZATION;
import static org.sonarqube.ws.client.component.SearchProjectsRequest.DEFAULT_PAGE_SIZE;
import static org.sonarqube.ws.client.component.SearchProjectsRequest.MAX_PAGE_SIZE;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_LANGUAGE;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_LANGUAGES;

public class SearchProjectsAction implements ComponentsWsAction {

@@ -105,7 +105,7 @@ public class SearchProjectsAction implements ComponentsWsAction {
.addPagingParams(DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE)
.setInternal(true)
.setResponseExample(getClass().getResource("search_projects-example.json"))
.setChangelog(new Change("6.4", format("The '%s' parameter accepts '%s' to filter by language", FILTER_LANGUAGE, PARAM_FILTER)))
.setChangelog(new Change("6.4", format("The '%s' parameter accepts '%s' to filter by language", FILTER_LANGUAGES, PARAM_FILTER)))
.setHandler(this);

action.createFieldsParam(POSSIBLE_FIELDS)

+ 5
- 5
server/sonar-server/src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndex.java View File

@@ -81,7 +81,7 @@ import static org.sonar.server.measure.index.ProjectMeasuresIndexDefinition.FIEL
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;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_LANGUAGES;

public class ProjectMeasuresIndex extends BaseIndex {

@@ -93,7 +93,7 @@ public class ProjectMeasuresIndex extends BaseIndex {
RELIABILITY_RATING_KEY,
SECURITY_RATING_KEY,
ALERT_STATUS_KEY,
FILTER_LANGUAGE,
FILTER_LANGUAGES,
FIELD_TAGS);

private static final String FIELD_MEASURES_KEY = FIELD_MEASURES + "." + ProjectMeasuresIndexDefinition.FIELD_MEASURES_KEY;
@@ -107,7 +107,7 @@ public class ProjectMeasuresIndex extends BaseIndex {
.put(RELIABILITY_RATING_KEY, (esSearch, filters) -> addRatingFacet(esSearch, RELIABILITY_RATING_KEY, filters))
.put(SECURITY_RATING_KEY, (esSearch, filters) -> addRatingFacet(esSearch, SECURITY_RATING_KEY, filters))
.put(ALERT_STATUS_KEY, (esSearch, filters) -> esSearch.addAggregation(createStickyFacet(ALERT_STATUS_KEY, filters, createQualityGateFacet())))
.put(FILTER_LANGUAGE, (esSearch, filters) -> esSearch.addAggregation(createStickyFacet(FILTER_LANGUAGE, filters, createLanguagesFacet())))
.put(FILTER_LANGUAGES, (esSearch, filters) -> esSearch.addAggregation(createStickyFacet(FILTER_LANGUAGES, filters, createLanguagesFacet())))
.put(FIELD_TAGS, (esSearch, filters) -> esSearch.addAggregation(createStickyFacet(FIELD_TAGS, filters, createTagsFacet())))
.build();

@@ -228,7 +228,7 @@ public class ProjectMeasuresIndex extends BaseIndex {
}

private static AbstractAggregationBuilder createLanguagesFacet() {
return AggregationBuilders.terms(FILTER_LANGUAGE).field(FIELD_LANGUAGES);
return AggregationBuilders.terms(FILTER_LANGUAGES).field(FIELD_LANGUAGES);
}

private static AbstractAggregationBuilder createTagsFacet() {
@@ -258,7 +258,7 @@ public class ProjectMeasuresIndex extends BaseIndex {
.ifPresent(projectUuids -> filters.put("ids", termsQuery("_id", projectUuids)));

query.getLanguages()
.ifPresent(languages -> filters.put(FILTER_LANGUAGE, termsQuery(FIELD_LANGUAGES, languages)));
.ifPresent(languages -> filters.put(FILTER_LANGUAGES, termsQuery(FIELD_LANGUAGES, languages)));

query.getOrganizationUuid()
.ifPresent(organizationUuid -> filters.put(FIELD_ORGANIZATION_UUID, termQuery(FIELD_ORGANIZATION_UUID, organizationUuid)));

+ 6
- 7
server/sonar-server/src/test/java/org/sonar/server/component/ws/ProjectMeasuresQueryFactoryTest.java View File

@@ -120,7 +120,7 @@ public class ProjectMeasuresQueryFactoryTest {
@Test
public void create_query_on_language_using_in_operator() throws Exception {
ProjectMeasuresQuery query = newProjectMeasuresQuery(
singletonList(Criterion.builder().setKey("language").setOperator(IN).setValues(asList("java", "js")).build()),
singletonList(Criterion.builder().setKey("languages").setOperator(IN).setValues(asList("java", "js")).build()),
emptySet());

assertThat(query.getLanguages().get()).containsOnly("java", "js");
@@ -129,7 +129,7 @@ public class ProjectMeasuresQueryFactoryTest {
@Test
public void create_query_on_language_using_equals_operator() throws Exception {
ProjectMeasuresQuery query = newProjectMeasuresQuery(
singletonList(Criterion.builder().setKey("language").setOperator(EQ).setValue("java").build()),
singletonList(Criterion.builder().setKey("languages").setOperator(EQ).setValue("java").build()),
emptySet());

assertThat(query.getLanguages().get()).containsOnly("java");
@@ -138,20 +138,19 @@ public class ProjectMeasuresQueryFactoryTest {
@Test
public void fail_to_create_query_on_language_using_in_operator_and_value() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Language should be set either by using 'language = java' or 'language IN (java, js)");
expectedException.expectMessage("Languages should be set either by using 'languages = java' or 'languages IN (java, js)");

newProjectMeasuresQuery(singletonList(Criterion.builder().setKey("language").setOperator(IN).setValue("java").build()), emptySet());
newProjectMeasuresQuery(singletonList(Criterion.builder().setKey("languages").setOperator(IN).setValue("java").build()), emptySet());
}

@Test
public void fail_to_create_query_on_language_using_eq_operator_and_values() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Language should be set either by using 'language = java' or 'language IN (java, js)");
expectedException.expectMessage("Languages should be set either by using 'languages = java' or 'languages IN (java, js)");

newProjectMeasuresQuery(singletonList(Criterion.builder().setKey("language").setOperator(EQ).setValues(asList("java")).build()), emptySet());
newProjectMeasuresQuery(singletonList(Criterion.builder().setKey("languages").setOperator(EQ).setValues(asList("java")).build()), emptySet());
}


@Test
public void create_query_on_tag_using_in_operator() throws Exception {
ProjectMeasuresQuery query = newProjectMeasuresQuery(

+ 11
- 6
server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchProjectsActionTest.java View File

@@ -91,7 +91,7 @@ import static org.sonar.server.measure.index.ProjectMeasuresIndexDefinition.INDE
import static org.sonar.test.JsonAssert.assertJson;
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_FILTER;
import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_ORGANIZATION;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_LANGUAGE;
import static org.sonarqube.ws.client.project.ProjectsWsParameters.FILTER_LANGUAGES;

public class SearchProjectsActionTest {

@@ -150,6 +150,11 @@ public class SearchProjectsActionTest {
Param additionalFields = def.param("f");
assertThat(additionalFields.defaultValue()).isNull();
assertThat(additionalFields.possibleValues()).containsOnly("analysisDate");

Param facets = def.param("facets");
assertThat(facets.defaultValue()).isNull();
assertThat(facets.possibleValues()).containsOnly("ncloc", "duplicated_lines_density", "coverage", "sqale_rating", "reliability_rating", "security_rating", "alert_status",
"languages", "tags");
}

@Test
@@ -284,11 +289,11 @@ public class SearchProjectsActionTest {
public void filter_projects_by_languages() {
OrganizationDto organizationDto = db.organizations().insertForKey("my-org-key-1");
insertProjectInDbAndEs(newProjectDto(organizationDto).setName("Sonar Java"), newArrayList(newMeasure(COVERAGE, 81d)), null, asList("<null>", "java", "xoo"));
insertProjectInDbAndEs(newProjectDto(organizationDto).setName("Sonar Groovy"), newArrayList(newMeasure(COVERAGE, 81)), null,asList("java", "xoo"));
insertProjectInDbAndEs(newProjectDto(organizationDto).setName("Sonar Groovy"), newArrayList(newMeasure(COVERAGE, 81)), null, asList("java", "xoo"));
insertProjectInDbAndEs(newProjectDto(organizationDto).setName("Sonar Markdown"), newArrayList(newMeasure(COVERAGE, 80d)), null, asList("xoo"));
insertProjectInDbAndEs(newProjectDto(organizationDto).setName("Sonar Qube"), newArrayList(newMeasure(COVERAGE, 80d)), null, asList("<null>", "java", "xoo"));
insertMetrics(COVERAGE, NCLOC_LANGUAGE_DISTRIBUTION_KEY);
request.setFilter("language IN (java, js, <null>)");
request.setFilter("languages IN (java, js, <null>)");

SearchProjectsWsResponse result = call(request);

@@ -465,12 +470,12 @@ public class SearchProjectsActionTest {
insertProjectInDbAndEs(newProjectDto(organization).setName("Sonar Qube"), newArrayList(newMeasure(COVERAGE, 80d)), null, asList("<null>", "java", "xoo"));
insertMetrics(COVERAGE, NCLOC_LANGUAGE_DISTRIBUTION_KEY);

SearchProjectsWsResponse result = call(request.setFacets(singletonList(FILTER_LANGUAGE)));
SearchProjectsWsResponse result = call(request.setFacets(singletonList(FILTER_LANGUAGES)));

Common.Facet facet = result.getFacets().getFacetsList().stream()
.filter(oneFacet -> FILTER_LANGUAGE.equals(oneFacet.getProperty()))
.filter(oneFacet -> FILTER_LANGUAGES.equals(oneFacet.getProperty()))
.findFirst().orElseThrow(IllegalStateException::new);
assertThat(facet.getProperty()).isEqualTo(FILTER_LANGUAGE);
assertThat(facet.getProperty()).isEqualTo(FILTER_LANGUAGES);
assertThat(facet.getValuesList())
.extracting(Common.FacetValue::getVal, Common.FacetValue::getCount)
.containsExactly(

+ 11
- 11
server/sonar-server/src/test/java/org/sonar/server/measure/index/ProjectMeasuresIndexTest.java View File

@@ -72,7 +72,7 @@ public class ProjectMeasuresIndexTest {
private static final String COVERAGE = "coverage";
private static final String DUPLICATION = "duplicated_lines_density";
private static final String NCLOC = "ncloc";
private static final String LANGUAGE = "language";
private static final String LANGUAGES = "languages";

private static final OrganizationDto ORG = OrganizationTesting.newOrganizationDto();
private static final ComponentDto PROJECT1 = newProjectDto(ORG).setUuid("Project-1").setName("Project 1").setKey("key-1");
@@ -993,7 +993,7 @@ public class ProjectMeasuresIndexTest {
}

@Test
public void facet_language() {
public void facet_languages() {
index(
newDoc().setLanguages(singletonList("java")),
newDoc().setLanguages(singletonList("java")),
@@ -1002,9 +1002,9 @@ public class ProjectMeasuresIndexTest {
newDoc().setLanguages(asList("<null>", "java")),
newDoc().setLanguages(asList("<null>", "java", "xoo")));

Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(LANGUAGE)).getFacets();
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(LANGUAGES)).getFacets();

assertThat(facets.get(LANGUAGE)).containsOnly(
assertThat(facets.get(LANGUAGES)).containsOnly(
entry("<null>", 2L),
entry("java", 4L),
entry("xoo", 2L),
@@ -1012,19 +1012,19 @@ public class ProjectMeasuresIndexTest {
}

@Test
public void facet_language_is_limited_to_10_languages() {
public void facet_languages_is_limited_to_10_languages() {
index(
newDoc().setLanguages(asList("<null>", "java", "xoo", "css", "cpp")),
newDoc().setLanguages(asList("xml", "php", "python", "perl", "ruby")),
newDoc().setLanguages(asList("js", "scala")));

Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(LANGUAGE)).getFacets();
Facets facets = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(LANGUAGES)).getFacets();

assertThat(facets.get(LANGUAGE)).hasSize(10);
assertThat(facets.get(LANGUAGES)).hasSize(10);
}

@Test
public void facet_language_is_sticky() {
public void facet_languages_is_sticky() {
index(
newDoc(NCLOC, 10d).setLanguages(singletonList("java")),
newDoc(NCLOC, 10d).setLanguages(singletonList("java")),
@@ -1035,10 +1035,10 @@ public class ProjectMeasuresIndexTest {

Facets facets = underTest.search(
new ProjectMeasuresQuery().setLanguages(ImmutableSet.of("java")),
new SearchOptions().addFacets(LANGUAGE, NCLOC)).getFacets();
new SearchOptions().addFacets(LANGUAGES, NCLOC)).getFacets();

// Sticky facet on language does not take into account language filter
assertThat(facets.get(LANGUAGE)).containsOnly(
assertThat(facets.get(LANGUAGES)).containsOnly(
entry("<null>", 2L),
entry("java", 4L),
entry("xoo", 2L),
@@ -1065,7 +1065,7 @@ public class ProjectMeasuresIndexTest {
newDoc().setLanguages(asList("java", "xoo")));

userSession.logIn(USER1);
LinkedHashMap<String, Long> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(LANGUAGE)).getFacets().get(LANGUAGE);
LinkedHashMap<String, Long> result = underTest.search(new ProjectMeasuresQuery(), new SearchOptions().addFacets(LANGUAGES)).getFacets().get(LANGUAGES);

assertThat(result).containsOnly(
entry("java", 2L),

+ 1
- 2
sonar-ws/src/main/java/org/sonarqube/ws/client/project/ProjectsWsParameters.java View File

@@ -41,8 +41,7 @@ public class ProjectsWsParameters {
public static final String PARAM_TO = "to";
public static final String PARAM_DRY_RUN = "dryRun";


public static final String FILTER_LANGUAGE = "language";
public static final String FILTER_LANGUAGES = "languages";

private ProjectsWsParameters() {
// static utils only

Loading…
Cancel
Save