]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5531 Return component id in each issues of /api/issues/search to fix Eclipse ITs
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 3 Oct 2014 10:35:38 +0000 (12:35 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 3 Oct 2014 10:35:38 +0000 (12:35 +0200)
server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java
server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java

index c808234d7a56e7d88d02095131912069042fad52..c8cce9fdd06339abf04a867a73ec88fb107529c9 100644 (file)
@@ -238,6 +238,7 @@ public class SearchAction extends SearchRequestHandler<IssueQuery, Issue> {
     Set<String> actionPlanKeys = newHashSet();
     List<String> userLogins = newArrayList();
     Map<String, User> usersByLogin = newHashMap();
+    Map<String, ComponentDto> componentsByKey = newHashMap();
     Multimap<String, DefaultIssueComment> commentsByIssues = ArrayListMultimap.create();
 
     for (Issue issue : result.getHits()) {
@@ -266,9 +267,12 @@ public class SearchAction extends SearchRequestHandler<IssueQuery, Issue> {
       List<ComponentDto> componentDtos = dbClient.componentDao().getByKeys(session, componentKeys);
       List<ComponentDto> subProjectDtos = dbClient.componentDao().findSubProjectsByComponentKeys(session, componentKeys);
       List<ComponentDto> 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<IssueQuery, Issue> {
 
     Map<String, ActionPlan> 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.<Rule>emptyList());
     writeUsers(json, usersByLogin);
     writeActionPlans(json, actionPlanByKeys.values());
@@ -323,19 +327,22 @@ public class SearchAction extends SearchRequestHandler<IssueQuery, Issue> {
   }
 
   private void writeIssues(Result<Issue> result, Multimap<String, DefaultIssueComment> commentsByIssues, Map<String, User> usersByLogin, Map<String, ActionPlan> actionPlanByKeys,
-                           @Nullable List<String> extraFields, JsonWriter json) {
+                           Map<String, ComponentDto> componentsByKey, @Nullable List<String> 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())
index 2416470c4785530b24af3996f8940f4fe0b995f7..84362740bd9979037fd335cdfe8a39d76fa9d4d2 100644 (file)
@@ -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++) {