org.elasticsearch.search.aggregations.timeseries.ParsedTimeSeries Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch subproject :server
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
package org.elasticsearch.search.aggregations.timeseries;
import org.elasticsearch.search.aggregations.ParsedMultiBucketAggregation;
import org.elasticsearch.xcontent.ObjectParser;
import org.elasticsearch.xcontent.XContentParser;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class ParsedTimeSeries extends ParsedMultiBucketAggregation implements TimeSeries {
private transient Map bucketMap;
@Override
public String getType() {
return TimeSeriesAggregationBuilder.NAME;
}
@Override
public List getBuckets() {
return buckets;
}
@Override
public TimeSeries.Bucket getBucketByKey(String key) {
if (bucketMap == null) {
bucketMap = new HashMap<>(buckets.size());
for (ParsedTimeSeries.ParsedBucket bucket : buckets) {
bucketMap.put(bucket.getKeyAsString(), bucket);
}
}
return bucketMap.get(key);
}
private static final ObjectParser PARSER = new ObjectParser<>(
ParsedTimeSeries.class.getSimpleName(),
true,
ParsedTimeSeries::new
);
static {
declareMultiBucketAggregationFields(
PARSER,
parser -> ParsedTimeSeries.ParsedBucket.fromXContent(parser, false),
parser -> ParsedTimeSeries.ParsedBucket.fromXContent(parser, true)
);
}
public static ParsedTimeSeries fromXContent(XContentParser parser, String name) throws IOException {
ParsedTimeSeries aggregation = PARSER.parse(parser, null);
aggregation.setName(name);
return aggregation;
}
static class ParsedBucket extends ParsedMultiBucketAggregation.ParsedBucket implements TimeSeries.Bucket {
private Map key;
@Override
public Object getKey() {
return key;
}
@Override
public String getKeyAsString() {
return key.toString();
}
static ParsedTimeSeries.ParsedBucket fromXContent(XContentParser parser, boolean keyed) throws IOException {
return parseXContent(parser, keyed, ParsedTimeSeries.ParsedBucket::new, (p, bucket) -> bucket.key = new TreeMap<>(p.map()));
}
}
}