aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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()) {