@@ -139,7 +139,6 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
139139 builder .endObject ();
140140 return builder ;
141141 }
142-
143142 }
144143
145144
@@ -283,52 +282,49 @@ public InternalPathHierarchy doReduce(List<InternalAggregation> aggregations, Re
283282 sum_other_hierarchy_nodes , separator , pipelineAggregators (), getMetaData ());
284283 }
285284
286- private void doXContentInternal (XContentBuilder builder , Params params , InternalBucket currentBucket ,
287- Iterator <InternalBucket > bucketIterator ) throws IOException {
288- builder .startObject ();
289- builder .field (CommonFields .KEY .getPreferredName (), currentBucket .basename );
290- builder .field (CommonFields .DOC_COUNT .getPreferredName (), currentBucket .getDocCount ());
291- currentBucket .getAggregations ().toXContentInternal (builder , params );
285+ @ Override
286+ public XContentBuilder doXContentBody (XContentBuilder builder , Params params ) throws IOException {
287+ // builder.field(SUM_OF_OTHER_HIERARCHY_NODES.getPreferredName(), otherHierarchyNodes);
288+ Iterator <InternalBucket > bucketIterator = buckets .iterator ();
289+ builder .startArray (CommonFields .BUCKETS .getPreferredName ());
290+ InternalBucket prevBucket = null ;
291+ InternalBucket currentBucket = null ;
292+ while (bucketIterator .hasNext ()) {
293+ currentBucket = bucketIterator .next ();
292294
293- if (bucketIterator .hasNext ()) {
294- InternalBucket nextBucket = bucketIterator .next ();
295- if (nextBucket .level == currentBucket .level ) {
296- builder .endObject ();
297- } else if (nextBucket .level > currentBucket .level ) {
298- builder .startObject (name );
299- builder .startArray (CommonFields .BUCKETS .getPreferredName ());
300- } else {
301- builder .endObject ();
302- for (int i =currentBucket .level ; i > nextBucket .level ; i --) {
303- builder .endArray ();
295+ if (prevBucket != null ) {
296+ if (prevBucket .level == currentBucket .level ) {
304297 builder .endObject ();
298+ } else if (prevBucket .level < currentBucket .level ) {
299+ builder .startObject (name );
300+ builder .startArray (CommonFields .BUCKETS .getPreferredName ());
301+ } else {
302+ for (int i = currentBucket .level ; i < prevBucket .level ; i ++) {
303+ builder .endObject ();
304+ builder .endArray ();
305+ builder .endObject ();
306+ }
305307 builder .endObject ();
306308 }
307309 }
308- doXContentInternal (builder , params , nextBucket , bucketIterator );
309- } else {
310- if (currentBucket .level > 0 ) {
310+
311+ builder .startObject ();
312+ builder .field (CommonFields .KEY .getPreferredName (), currentBucket .basename );
313+ builder .field (CommonFields .DOC_COUNT .getPreferredName (), currentBucket .docCount );
314+ currentBucket .getAggregations ().toXContentInternal (builder , params );
315+
316+ prevBucket = currentBucket ;
317+ }
318+
319+ if (currentBucket != null ) {
320+ for (int i =0 ; i < currentBucket .level ; i ++) {
311321 builder .endObject ();
312- for (int i =currentBucket .level ; i > 0 ; i --) {
313- builder .endArray ();
314- builder .endObject ();
315- builder .endObject ();
316- }
317- } else {
322+ builder .endArray ();
318323 builder .endObject ();
319324 }
325+ builder .endObject ();
320326 }
321- }
322327
323- @ Override
324- public XContentBuilder doXContentBody (XContentBuilder builder , Params params ) throws IOException {
325- // builder.field(SUM_OF_OTHER_HIERARCHY_NODES.getPreferredName(), otherHierarchyNodes);
326- Iterator <InternalBucket > bucketIterator = buckets .iterator ();
327- builder .startArray (CommonFields .BUCKETS .getPreferredName ());
328- if (bucketIterator .hasNext ()) {
329- InternalBucket firstBucket = bucketIterator .next ();
330- doXContentInternal (builder , params , firstBucket , bucketIterator );
331- }
332328 builder .endArray ();
333329 return builder ;
334330 }
0 commit comments