package io.searchbox.core.search.aggregation; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.util.LinkedList; import java.util.List; import java.util.Objects; import static io.searchbox.core.search.aggregation.AggregationField.*; /** * @author cfstout */ public class DateHistogramAggregation extends BucketAggregation { public static final String TYPE = "date_histogram"; private List<DateHistogram> dateHistograms = new LinkedList<DateHistogram>(); public DateHistogramAggregation(String name, JsonObject dateHistogramAggregation) { super(name, dateHistogramAggregation); if (dateHistogramAggregation.has(String.valueOf(BUCKETS)) && dateHistogramAggregation.get(String.valueOf(BUCKETS)).isJsonArray()) { parseBuckets(dateHistogramAggregation.get(String.valueOf(BUCKETS)).getAsJsonArray()); } } private void parseBuckets(JsonArray bucketsSource) { for (JsonElement bucket : bucketsSource) { Long time = bucket.getAsJsonObject().get(String.valueOf(KEY)).getAsLong(); String timeAsString = bucket.getAsJsonObject().get(String.valueOf(KEY_AS_STRING)).getAsString(); Long count = bucket.getAsJsonObject().get(String.valueOf(DOC_COUNT)).getAsLong(); dateHistograms.add(new DateHistogram(bucket.getAsJsonObject(), time, timeAsString, count)); } } /** * @return List of DateHistogram objects if found, or empty list otherwise */ public List<DateHistogram> getBuckets() { return dateHistograms; } public class DateHistogram extends HistogramAggregation.Histogram { private String timeAsString; DateHistogram(JsonObject bucket, Long time, String timeAsString, Long count) { super(bucket, time, count); this.timeAsString = timeAsString; } public Long getTime() { return getKey(); } public String getTimeAsString() { return timeAsString; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (obj == this) { return true; } if (obj.getClass() != getClass()) { return false; } DateHistogram rhs = (DateHistogram) obj; return super.equals(obj) && Objects.equals(timeAsString, rhs.timeAsString); } @Override public int hashCode() { return Objects.hash(super.hashCode(), timeAsString); } } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (obj == this) { return true; } if (obj.getClass() != getClass()) { return false; } DateHistogramAggregation rhs = (DateHistogramAggregation) obj; return super.equals(obj) && Objects.equals(dateHistograms, rhs.dateHistograms); } @Override public int hashCode() { return Objects.hash(super.hashCode(), dateHistograms); } }