package com.github.obourgain.elasticsearch.http.response.entity.aggs; import java.io.IOException; import org.elasticsearch.common.xcontent.XContentParser; import lombok.Getter; @Getter public class ExtendedStats extends Stats { private double sumOfSqrs; private double variance; private double stdDev; private StdDevBounds stdDevBounds; public ExtendedStats(String name) { super(name); } public static ExtendedStats parse(XContentParser parser, String name) { try { ExtendedStats stats = new ExtendedStats(name); StdDevBounds bounds = new StdDevBounds(); stats.stdDevBounds = bounds; XContentParser.Token token; String currentFieldName = null; while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { if (token == XContentParser.Token.FIELD_NAME) { currentFieldName = parser.currentName(); } else if (token.isValue()) { if ("count".equals(currentFieldName)) { stats.count = parser.longValue(); } else if ("min".equals(currentFieldName)) { stats.min = parser.doubleValue(); } else if ("max".equals(currentFieldName)) { stats.max = parser.doubleValue(); } else if ("avg".equals(currentFieldName)) { stats.avg = parser.doubleValue(); } else if ("sum".equals(currentFieldName)) { stats.sum = parser.doubleValue(); } else if ("sum_of_squares".equals(currentFieldName)) { stats.sumOfSqrs = parser.doubleValue(); } else if ("variance".equals(currentFieldName)) { stats.variance = parser.doubleValue(); } else if ("std_deviation".equals(currentFieldName)) { stats.stdDev = parser.doubleValue(); } else if ("upper".equals(currentFieldName)) { bounds.upper = parser.doubleValue(); } else if ("lower".equals(currentFieldName)) { bounds.lower = parser.doubleValue(); } } } return stats; } catch (IOException e) { throw new RuntimeException(e); } } @Getter public static class StdDevBounds { private double upper; private double lower; } }