From 588a0111381ce057f9feb8e10730389d8ccd1c01 Mon Sep 17 00:00:00 2001 From: Stephane Gamard Date: Fri, 5 Sep 2014 21:22:47 +0200 Subject: [PATCH] SONAR-5531 - Fixed duplicate projects and components in result --- .../org/sonar/server/issue/IssueService.java | 6 ++---- .../sonar/server/issue/index/IssueIndex.java | 20 ++++++++++--------- .../sonar/server/issue/index/IssueResult.java | 12 +++++------ .../server/issue/IssueServiceMediumTest.java | 20 ++++++++++++++++++- .../core/component/db/ComponentMapper.xml | 2 +- 5 files changed, 39 insertions(+), 21 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java index c8741331806..e8202496c58 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java @@ -351,10 +351,8 @@ public class IssueService implements ServerComponent { DbSession session = dbClient.openSession(false); try { for (Issue issue : result.getHits()) { - result.addProject(issue.key(), - dbClient.componentDao().getByKey(session, issue.projectKey())); - result.addComponent(issue.key(), - dbClient.componentDao().getByKey(session, issue.componentKey())); + result.addProject(dbClient.componentDao().getByKey(session, issue.projectKey())); + result.addComponent(dbClient.componentDao().getByKey(session, issue.componentKey())); } } finally { session.close(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java index 0040c81b973..d3de841ef22 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java @@ -178,15 +178,17 @@ public class IssueIndex extends BaseIndex { esSearch.setQuery(esQuery); } - // Execute Term aggregations - esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.SEVERITY.field()) - .field(IssueNormalizer.IssueField.SEVERITY.field())); - esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.STATUS.field()) - .field(IssueNormalizer.IssueField.STATUS.field())); - esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.RESOLUTION.field()) - .field(IssueNormalizer.IssueField.RESOLUTION.field())); - esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.ACTION_PLAN.field()) - .field(IssueNormalizer.IssueField.ACTION_PLAN.field())); + if (options.isFacet()) { + // Execute Term aggregations + esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.SEVERITY.field()) + .field(IssueNormalizer.IssueField.SEVERITY.field())); + esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.STATUS.field()) + .field(IssueNormalizer.IssueField.STATUS.field())); + esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.RESOLUTION.field()) + .field(IssueNormalizer.IssueField.RESOLUTION.field())); + esSearch.addAggregation(AggregationBuilders.terms(IssueNormalizer.IssueField.ACTION_PLAN.field()) + .field(IssueNormalizer.IssueField.ACTION_PLAN.field())); + } // Execute Function aggregation esSearch.addAggregation(AggregationBuilders.sum("totalDuration") diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueResult.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueResult.java index ca80f822593..5e2d254fc37 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueResult.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueResult.java @@ -84,7 +84,7 @@ public class IssueResult extends Result implements IssueQueryResult { @Override public Component component(Issue issue) { - return components.get(issue.key()); + return components.get(issue.componentKey()); } @Override @@ -94,7 +94,7 @@ public class IssueResult extends Result implements IssueQueryResult { @Override public Component project(Issue issue) { - return projects.get(issue.key()); + return projects.get(issue.projectKey()); } @Override @@ -136,11 +136,11 @@ public class IssueResult extends Result implements IssueQueryResult { return false; } - public void addProject(String key, ComponentDto project) { - this.projects.put(key, project); + public void addProject(ComponentDto project) { + this.projects.put(project.key(), project); } - public void addComponent(String key, ComponentDto project) { - this.components.put(key, project); + public void addComponent(ComponentDto component) { + this.components.put(component.key(), component); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java index a158e7eb1bf..53361becc3c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java @@ -66,16 +66,19 @@ public class IssueServiceMediumTest { tester.get(RuleDao.class).insert(session, rule); project = new ComponentDto() + .setEnabled(true) .setId(1L) .setKey("MyProject") .setProjectId(1L); tester.get(ComponentDao.class).insert(session, project); resource = new ComponentDto() + .setEnabled(true) .setProjectId(1L) .setKey("MyComponent") .setId(2L); tester.get(ComponentDao.class).insert(session, resource); + session.commit(); } @After @@ -84,7 +87,7 @@ public class IssueServiceMediumTest { } @Test - public void has_facets() throws Exception { + public void can_facet() throws Exception { IssueDto issue1 = getIssue().setActionPlanKey("P1"); IssueDto issue2 = getIssue().setActionPlanKey("P2"); tester.get(IssueDao.class).insert(session, issue1, issue2); @@ -92,10 +95,25 @@ public class IssueServiceMediumTest { IssueResult result = service.search(IssueQuery.builder().build(), new QueryOptions()); assertThat(result.getHits()).hasSize(2); + assertThat(result.getFacets()).isEmpty(); + + result = service.search(IssueQuery.builder().build(), new QueryOptions().setFacet(true)); assertThat(result.getFacets().keySet()).hasSize(4); assertThat(result.getFacetKeys("actionPlan")).hasSize(2); } + @Test + public void has_component_and_project() throws Exception { + IssueDto issue1 = getIssue().setActionPlanKey("P1"); + IssueDto issue2 = getIssue().setActionPlanKey("P2"); + tester.get(IssueDao.class).insert(session, issue1, issue2); + session.commit(); + + IssueResult result = service.search(IssueQuery.builder().build(), new QueryOptions()); + assertThat(result.projects()).hasSize(1); + assertThat(result.components()).hasSize(1); + } + private IssueDto getIssue() { return new IssueDto() .setIssueCreationDate(DateUtils.parseDate("2014-09-04")) diff --git a/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml b/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml index 452bebb9fcf..c9c614f8c80 100644 --- a/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml @@ -23,7 +23,7 @@