Skip to content

Commit

Permalink
SONAR-8899 Move list issues tags code from IssueService to TagsAction
Browse files Browse the repository at this point in the history
  • Loading branch information
julienlancelot committed Mar 21, 2017
1 parent 992d2c4 commit 369ca60
Show file tree
Hide file tree
Showing 8 changed files with 546 additions and 414 deletions.
Expand Up @@ -19,8 +19,11 @@
*/ */
package org.sonar.db.rule; package org.sonar.db.rule;


import java.util.function.Consumer;
import org.sonar.db.DbTester; import org.sonar.db.DbTester;


import static org.sonar.db.rule.RuleTesting.newRuleDto;

public class RuleDbTester { public class RuleDbTester {


private final DbTester db; private final DbTester db;
Expand All @@ -34,4 +37,17 @@ public RuleDto insertRule(RuleDto ruleDto) {
db.commit(); db.commit();
return ruleDto; return ruleDto;
} }

public RuleDto insertRule() {
return insertRule(rule -> {
});
}

public RuleDto insertRule(Consumer<RuleDto> populateRuleDto) {
RuleDto ruleDto = newRuleDto();
populateRuleDto.accept(ruleDto);
db.getDbClient().ruleDao().insert(db.getSession(), ruleDto);
db.commit();
return ruleDto;
}
} }
Expand Up @@ -54,16 +54,6 @@ public IssueService(DbClient dbClient, IssueIndex issueIndex, IssueFinder issueF
this.userSession = userSession; this.userSession = userSession;
} }


/**
* Search for all tags, whatever issue resolution or user access rights
*/
public List<String> listTags(@Nullable String textQuery, int pageSize) {
IssueQuery query = IssueQuery.builder()
.checkAuthorization(false)
.build();
return issueIndex.listTags(query, textQuery, pageSize);
}

public List<String> listAuthors(@Nullable String textQuery, int pageSize) { public List<String> listAuthors(@Nullable String textQuery, int pageSize) {
IssueQuery query = IssueQuery.builder() IssueQuery query = IssueQuery.builder()
.checkAuthorization(false) .checkAuthorization(false)
Expand Down
Expand Up @@ -587,11 +587,12 @@ private static QueryBuilder createTermsFilter(String field, Collection<?> values
return values.isEmpty() ? null : termsQuery(field, values); return values.isEmpty() ? null : termsQuery(field, values);
} }


public List<String> listTags(IssueQuery query, @Nullable String textQuery, int maxNumberOfTags) { public List<String> listTags(@Nullable String textQuery, int maxNumberOfTags) {
SearchRequestBuilder requestBuilder = getClient() SearchRequestBuilder requestBuilder = getClient()
.prepareSearch(IssueIndexDefinition.INDEX_TYPE_ISSUE, RuleIndexDefinition.INDEX_TYPE_RULE); .prepareSearch(IssueIndexDefinition.INDEX_TYPE_ISSUE, RuleIndexDefinition.INDEX_TYPE_RULE);


requestBuilder.setQuery(boolQuery().must(matchAllQuery()).filter(createBoolFilter(query))); requestBuilder.setQuery(boolQuery().must(matchAllQuery()).filter(createBoolFilter(
IssueQuery.builder().checkAuthorization(false).build())));


GlobalBuilder topAggreg = AggregationBuilders.global("tags"); GlobalBuilder topAggreg = AggregationBuilders.global("tags");
String tagsOnIssuesSubAggregation = "tags__issues"; String tagsOnIssuesSubAggregation = "tags__issues";
Expand Down
Expand Up @@ -20,24 +20,28 @@
package org.sonar.server.issue.ws; package org.sonar.server.issue.ws;


import com.google.common.io.Resources; import com.google.common.io.Resources;
import java.util.List;
import javax.annotation.Nullable;
import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService;
import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.api.server.ws.WebService.NewAction;
import org.sonar.api.server.ws.WebService.Param; import org.sonar.api.server.ws.WebService.Param;
import org.sonar.api.utils.text.JsonWriter; import org.sonar.api.utils.text.JsonWriter;
import org.sonar.server.issue.IssueService; import org.sonar.server.issue.index.IssueIndex;

import static org.sonar.api.server.ws.WebService.Param.PAGE_SIZE;


/** /**
* List issue tags matching a given query. * List issue tags matching a given query.
* @since 5.1 * @since 5.1
*/ */
public class TagsAction implements IssuesWsAction { public class TagsAction implements IssuesWsAction {


private final IssueService service; private final IssueIndex issueIndex;


public TagsAction(IssueService service) { public TagsAction(IssueIndex issueIndex) {
this.service = service; this.issueIndex = issueIndex;
} }


@Override @Override
Expand All @@ -50,7 +54,7 @@ public void define(WebService.NewController controller) {
action.createParam(Param.TEXT_QUERY) action.createParam(Param.TEXT_QUERY)
.setDescription("A pattern to match tags against") .setDescription("A pattern to match tags against")
.setExampleValue("misra"); .setExampleValue("misra");
action.createParam("ps") action.createParam(PAGE_SIZE)
.setDescription("The size of the list to return") .setDescription("The size of the list to return")
.setExampleValue("25") .setExampleValue("25")
.setDefaultValue("10"); .setDefaultValue("10");
Expand All @@ -60,11 +64,20 @@ public void define(WebService.NewController controller) {
public void handle(Request request, Response response) throws Exception { public void handle(Request request, Response response) throws Exception {
String query = request.param(Param.TEXT_QUERY); String query = request.param(Param.TEXT_QUERY);
int pageSize = request.mandatoryParamAsInt("ps"); int pageSize = request.mandatoryParamAsInt("ps");
JsonWriter json = response.newJsonWriter().beginObject().name("tags").beginArray(); List<String> tags = listTags(query, pageSize);
for (String tag: service.listTags(query, pageSize)) { writeTags(response, tags);
json.value(tag); }

private List<String> listTags(@Nullable String textQuery, int pageSize) {
return issueIndex.listTags(textQuery, pageSize);
}

private static void writeTags(Response response, List<String> tags) {
try (JsonWriter json = response.newJsonWriter()) {
json.beginObject().name("tags").beginArray();
tags.forEach(json::value);
json.endArray().endObject();
} }
json.endArray().endObject().close();
} }


} }
Expand Up @@ -88,25 +88,6 @@ public void after() {
session.close(); session.close();
} }


@Test
public void list_tags() {
RuleDto rule = newRule();
ComponentDto project = newProject();
ComponentDto file = newFile(project);
saveIssue(IssueTesting.newDto(rule, file, project).setTags(ImmutableSet.of("convention", "java8", "bug")));
saveIssue(IssueTesting.newDto(rule, file, project).setTags(ImmutableSet.of("convention", "bug")));
saveIssue(IssueTesting.newDto(rule, file, project));
saveIssue(IssueTesting.newDto(rule, file, project).setTags(ImmutableSet.of("convention")));

assertThat(service.listTags(null, 5)).containsOnly("convention", "java8", "bug" /* from issues */, "systag1", "systag2" /* from rules */);
assertThat(service.listTags(null, 2)).containsOnly("bug", "convention");
assertThat(service.listTags("vent", 5)).containsOnly("convention");
assertThat(service.listTags("sys", 5)).containsOnly("systag1", "systag2");
assertThat(service.listTags(null, 1)).containsOnly("bug");
assertThat(service.listTags(null, Integer.MAX_VALUE)).containsOnly("convention", "java8", "bug", "systag1", "systag2", "tag1", "tag2");
assertThat(service.listTags("invalidRegexp[", 5)).isEmpty();
}

@Test @Test
public void set_tags() { public void set_tags() {
RuleDto rule = newRule(); RuleDto rule = newRule();
Expand Down

0 comments on commit 369ca60

Please sign in to comment.