aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-server/src/main/java
diff options
context:
space:
mode:
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>2014-10-24 16:54:09 +0200
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>2014-10-24 16:54:14 +0200
commit54ad5263a1e5272e97ffbb96837aeef68aa9fe96 (patch)
tree32817a866940954fe70ea3738a2da6b7f8b3fa35 /server/sonar-server/src/main/java
parentfd3f775bc81b4bc4837e8c14b3e744dfb91c2e56 (diff)
downloadsonarqube-54ad5263a1e5272e97ffbb96837aeef68aa9fe96.tar.gz
sonarqube-54ad5263a1e5272e97ffbb96837aeef68aa9fe96.zip
SONAR-5718 Add "unresolved" item in resolution facet
Diffstat (limited to 'server/sonar-server/src/main/java')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java24
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/search/Result.java5
2 files changed, 27 insertions, 2 deletions
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 5771dcf49ac..4667cc906c4 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
@@ -305,7 +305,7 @@ public class IssueIndex extends BaseIndex<Issue, IssueDto, String> {
// Execute Term aggregations
esSearch.addAggregation(stickyFacetBuilder(esQuery, filters, IssueNormalizer.IssueField.SEVERITY.field(), IssueFilterParameters.SEVERITIES));
esSearch.addAggregation(stickyFacetBuilder(esQuery, filters, IssueNormalizer.IssueField.STATUS.field(), IssueFilterParameters.STATUSES));
- esSearch.addAggregation(stickyFacetBuilder(esQuery, filters, IssueNormalizer.IssueField.RESOLUTION.field(), IssueFilterParameters.RESOLUTIONS));
+ esSearch.addAggregation(getResolutionFacet(query, options, filters, esQuery));
esSearch.addAggregation(stickyFacetBuilder(esQuery, filters, IssueNormalizer.IssueField.ACTION_PLAN.field(), IssueFilterParameters.ACTION_PLANS));
esSearch.addAggregation(stickyFacetBuilder(esQuery, filters, IssueNormalizer.IssueField.PROJECT.field(), IssueFilterParameters.COMPONENT_ROOTS,
query.componentRoots().toArray(new String[0])));
@@ -338,6 +338,28 @@ public class IssueIndex extends BaseIndex<Issue, IssueDto, String> {
.subAggregation(facetTopAggregation);
}
+ private AggregationBuilder getResolutionFacet(IssueQuery query, QueryContext options, Map<String, FilterBuilder> filters, QueryBuilder esQuery) {
+ String fieldName = IssueNormalizer.IssueField.RESOLUTION.field();
+ String facetName = IssueFilterParameters.RESOLUTIONS;
+
+ // Same as in super.stickyFacetBuilder
+ BoolFilterBuilder facetFilter = getStickyFacetFilter(esQuery, filters, fieldName);
+ FilterAggregationBuilder facetTopAggregation = buildTopFacetAggregation(fieldName, facetName, facetFilter);
+ addSelectedItemsToFacet(fieldName, facetName, facetTopAggregation, query.resolutions().toArray(new String[0]));
+
+ // Add missing facet for unresolved issues
+ facetTopAggregation.subAggregation(
+ AggregationBuilders
+ .missing(facetName + "_missing")
+ .field(fieldName)
+ );
+
+ return AggregationBuilders
+ .global(facetName)
+ .subAggregation(facetTopAggregation);
+ }
+
+
private void setSorting(IssueQuery query, SearchRequestBuilder esSearch) {
/* integrate Query Sort */
String sortField = query.sort();
diff --git a/server/sonar-server/src/main/java/org/sonar/server/search/Result.java b/server/sonar-server/src/main/java/org/sonar/server/search/Result.java
index bc2736595e6..d7861e0cd85 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/search/Result.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/search/Result.java
@@ -72,7 +72,10 @@ public class Result<K> {
private void processAggregation(Aggregation aggregation) {
if (Missing.class.isAssignableFrom(aggregation.getClass())) {
Missing missing = (Missing) aggregation;
- this.facets.put(aggregation.getName().replace("_missing",""), new FacetValue("", (int) missing.getDocCount()));
+ int docCount = (int) missing.getDocCount();
+ if (docCount > 0) {
+ this.facets.put(aggregation.getName().replace("_missing",""), new FacetValue("", docCount));
+ }
} else if (Terms.class.isAssignableFrom(aggregation.getClass())) {
Terms termAggregation = (Terms) aggregation;
for (Terms.Bucket value : termAggregation.getBuckets()) {