]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5718 Add "unresolved" item in resolution facet
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Fri, 24 Oct 2014 14:54:09 +0000 (16:54 +0200)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Fri, 24 Oct 2014 14:54:14 +0000 (16:54 +0200)
server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java
server/sonar-server/src/main/java/org/sonar/server/search/Result.java

index 5771dcf49ac2a52de36c0926ec61c156faacdee3..4667cc906c4527e0284fc08f7317d6891341e1d2 100644 (file)
@@ -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();
index bc2736595e6afedea763ccd5233d7243d15f2647..d7861e0cd859a895b8562a3fe0c2b9280524918b 100644 (file)
@@ -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()) {