From 3c3a6b9412f6f6886322e76fb00996a5a5354b84 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Fri, 3 Oct 2014 12:35:38 +0200 Subject: [PATCH] SONAR-5531 Return component id in each issues of /api/issues/search to fix Eclipse ITs --- .../org/sonar/server/issue/ws/SearchAction.java | 13 ++++++++++--- .../server/issue/ws/SearchActionMediumTest.java | 10 ++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java index c808234d7a5..c8cce9fdd06 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java @@ -238,6 +238,7 @@ public class SearchAction extends SearchRequestHandler { Set actionPlanKeys = newHashSet(); List userLogins = newArrayList(); Map usersByLogin = newHashMap(); + Map componentsByKey = newHashMap(); Multimap commentsByIssues = ArrayListMultimap.create(); for (Issue issue : result.getHits()) { @@ -266,9 +267,12 @@ public class SearchAction extends SearchRequestHandler { List componentDtos = dbClient.componentDao().getByKeys(session, componentKeys); List subProjectDtos = dbClient.componentDao().findSubProjectsByComponentKeys(session, componentKeys); List projectDtos = dbClient.componentDao().getByKeys(session, projectKeys); - componentDtos.addAll(subProjectDtos); componentDtos.addAll(projectDtos); + + for (ComponentDto componentDto : componentDtos) { + componentsByKey.put(componentDto.key(), componentDto); + } writeProjects(json, projectDtos); writeComponents(json, componentDtos); } finally { @@ -277,7 +281,7 @@ public class SearchAction extends SearchRequestHandler { Map actionPlanByKeys = getActionPlanByKeys(actionPlanKeys); - writeIssues(result, commentsByIssues, usersByLogin, actionPlanByKeys, request.paramAsStrings(EXTRA_FIELDS_PARAM), json); + writeIssues(result, commentsByIssues, usersByLogin, actionPlanByKeys, componentsByKey, request.paramAsStrings(EXTRA_FIELDS_PARAM), json); writeRules(json, !request.mandatoryParamAsBoolean(IssueFilterParameters.HIDE_RULES) ? ruleService.getByKeys(ruleKeys) : Collections.emptyList()); writeUsers(json, usersByLogin); writeActionPlans(json, actionPlanByKeys.values()); @@ -323,19 +327,22 @@ public class SearchAction extends SearchRequestHandler { } private void writeIssues(Result result, Multimap commentsByIssues, Map usersByLogin, Map actionPlanByKeys, - @Nullable List extraFields, JsonWriter json) { + Map componentsByKey, @Nullable List extraFields, JsonWriter json) { json.name("issues").beginArray(); for (Issue issue : result.getHits()) { json.beginObject(); String actionPlanKey = issue.actionPlanKey(); + ComponentDto componentDto = componentsByKey.get(issue.componentKey()); Duration debt = issue.debt(); Date updateDate = issue.updateDate(); json .prop("key", issue.key()) .prop("component", issue.componentKey()) + // Only used for the compatibility with the Issues Java WS Client <= 4.4 used by Eclipse + .prop("componentId", componentDto.getId()) .prop("project", issue.projectKey()) .prop("rule", issue.ruleKey().toString()) .prop("status", issue.status()) diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java index 2416470c478..84362740bd9 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java @@ -248,6 +248,16 @@ public class SearchActionMediumTest { result.assertJson(this.getClass(), "issue_with_extra_fields.json", false); } + @Test + public void issue_contains_component_id_for_eclipse() throws Exception { + IssueDto issue = IssueTesting.newDto(rule, file, project); + db.issueDao().insert(session, issue); + session.commit(); + + WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION).execute(); + assertThat(result.outputAsString()).contains("\"componentId\":" + file.getId() + ","); + } + @Test public void return_full_number_of_issues_when_only_one_component_is_set() throws Exception { for (int i = 0; i < QueryContext.MAX_LIMIT + 1; i++) { -- 2.39.5