As part of #52776, this refactors the aggregation to use the context parser to parse its parameters.
This commit is contained in:
parent
b84d1e2577
commit
6e0178fb68
|
@ -600,7 +600,7 @@ public class SearchModule {
|
||||||
CumulativeSumPipelineAggregationBuilder.NAME,
|
CumulativeSumPipelineAggregationBuilder.NAME,
|
||||||
CumulativeSumPipelineAggregationBuilder::new,
|
CumulativeSumPipelineAggregationBuilder::new,
|
||||||
CumulativeSumPipelineAggregator::new,
|
CumulativeSumPipelineAggregator::new,
|
||||||
CumulativeSumPipelineAggregationBuilder::parse));
|
CumulativeSumPipelineAggregationBuilder.PARSER));
|
||||||
registerPipelineAggregation(new PipelineAggregationSpec(
|
registerPipelineAggregation(new PipelineAggregationSpec(
|
||||||
BucketScriptPipelineAggregationBuilder.NAME,
|
BucketScriptPipelineAggregationBuilder.NAME,
|
||||||
BucketScriptPipelineAggregationBuilder::new,
|
BucketScriptPipelineAggregationBuilder::new,
|
||||||
|
|
|
@ -19,20 +19,18 @@
|
||||||
|
|
||||||
package org.elasticsearch.search.aggregations.pipeline;
|
package org.elasticsearch.search.aggregations.pipeline;
|
||||||
|
|
||||||
import org.elasticsearch.common.ParsingException;
|
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
|
import org.elasticsearch.common.xcontent.ConstructingObjectParser;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
|
||||||
import org.elasticsearch.search.DocValueFormat;
|
import org.elasticsearch.search.DocValueFormat;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static org.elasticsearch.search.aggregations.pipeline.PipelineAggregator.Parser.BUCKETS_PATH;
|
import static org.elasticsearch.common.xcontent.ConstructingObjectParser.constructorArg;
|
||||||
import static org.elasticsearch.search.aggregations.pipeline.PipelineAggregator.Parser.FORMAT;
|
import static org.elasticsearch.search.aggregations.pipeline.PipelineAggregator.Parser.FORMAT;
|
||||||
|
|
||||||
public class CumulativeSumPipelineAggregationBuilder extends AbstractPipelineAggregationBuilder<CumulativeSumPipelineAggregationBuilder> {
|
public class CumulativeSumPipelineAggregationBuilder extends AbstractPipelineAggregationBuilder<CumulativeSumPipelineAggregationBuilder> {
|
||||||
|
@ -40,10 +38,23 @@ public class CumulativeSumPipelineAggregationBuilder extends AbstractPipelineAgg
|
||||||
|
|
||||||
private String format;
|
private String format;
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static final ConstructingObjectParser<CumulativeSumPipelineAggregationBuilder, String> PARSER = new ConstructingObjectParser<>(
|
||||||
|
NAME, false, (args, name) -> new CumulativeSumPipelineAggregationBuilder(name, (List<String>) args[0]));
|
||||||
|
|
||||||
|
static {
|
||||||
|
PARSER.declareStringArray(constructorArg(), BUCKETS_PATH_FIELD);
|
||||||
|
PARSER.declareString(CumulativeSumPipelineAggregationBuilder::format, FORMAT);
|
||||||
|
};
|
||||||
|
|
||||||
public CumulativeSumPipelineAggregationBuilder(String name, String bucketsPath) {
|
public CumulativeSumPipelineAggregationBuilder(String name, String bucketsPath) {
|
||||||
super(name, NAME, new String[] { bucketsPath });
|
super(name, NAME, new String[] { bucketsPath });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CumulativeSumPipelineAggregationBuilder(String name, List<String> bucketsPath) {
|
||||||
|
super(name, NAME, bucketsPath.toArray(new String[0]));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read from a stream.
|
* Read from a stream.
|
||||||
*/
|
*/
|
||||||
|
@ -104,56 +115,6 @@ public class CumulativeSumPipelineAggregationBuilder extends AbstractPipelineAgg
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CumulativeSumPipelineAggregationBuilder parse(String pipelineAggregatorName, XContentParser parser)
|
|
||||||
throws IOException {
|
|
||||||
XContentParser.Token token;
|
|
||||||
String currentFieldName = null;
|
|
||||||
String[] bucketsPaths = null;
|
|
||||||
String format = null;
|
|
||||||
|
|
||||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
|
||||||
if (token == XContentParser.Token.FIELD_NAME) {
|
|
||||||
currentFieldName = parser.currentName();
|
|
||||||
} else if (token == XContentParser.Token.VALUE_STRING) {
|
|
||||||
if (FORMAT.match(currentFieldName, parser.getDeprecationHandler())) {
|
|
||||||
format = parser.text();
|
|
||||||
} else if (BUCKETS_PATH.match(currentFieldName, parser.getDeprecationHandler())) {
|
|
||||||
bucketsPaths = new String[] { parser.text() };
|
|
||||||
} else {
|
|
||||||
throw new ParsingException(parser.getTokenLocation(),
|
|
||||||
"Unknown key for a " + token + " in [" + pipelineAggregatorName + "]: [" + currentFieldName + "].");
|
|
||||||
}
|
|
||||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
|
||||||
if (BUCKETS_PATH.match(currentFieldName, parser.getDeprecationHandler())) {
|
|
||||||
List<String> paths = new ArrayList<>();
|
|
||||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
|
||||||
String path = parser.text();
|
|
||||||
paths.add(path);
|
|
||||||
}
|
|
||||||
bucketsPaths = paths.toArray(new String[paths.size()]);
|
|
||||||
} else {
|
|
||||||
throw new ParsingException(parser.getTokenLocation(),
|
|
||||||
"Unknown key for a " + token + " in [" + pipelineAggregatorName + "]: [" + currentFieldName + "].");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new ParsingException(parser.getTokenLocation(),
|
|
||||||
"Unexpected token " + token + " in [" + pipelineAggregatorName + "].");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bucketsPaths == null) {
|
|
||||||
throw new ParsingException(parser.getTokenLocation(), "Missing required field [" + BUCKETS_PATH.getPreferredName()
|
|
||||||
+ "] for derivative aggregation [" + pipelineAggregatorName + "]");
|
|
||||||
}
|
|
||||||
|
|
||||||
CumulativeSumPipelineAggregationBuilder factory =
|
|
||||||
new CumulativeSumPipelineAggregationBuilder(pipelineAggregatorName, bucketsPaths[0]);
|
|
||||||
if (format != null) {
|
|
||||||
factory.format(format);
|
|
||||||
}
|
|
||||||
return factory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(super.hashCode(), format);
|
return Objects.hash(super.hashCode(), format);
|
||||||
|
|
Loading…
Reference in New Issue