diff options
author | Colin Goodheart-Smithe <colings86@users.noreply.github.com> | 2016-01-08 14:45:58 +0000 |
---|---|---|
committer | Colin Goodheart-Smithe <colings86@users.noreply.github.com> | 2016-01-08 14:45:58 +0000 |
commit | 7e7e4a2b595eeb60316aff65344ee36b15c17f5b (patch) | |
tree | 1e043d73086290b726783096a0ff4c68947124c1 /core/src | |
parent | 1883317219ba0396db5a5f477942110a2319bfcf (diff) |
Makes the AggregatorFactory and PipelineAggregatorFactory setter methods chain able
Diffstat (limited to 'core/src')
76 files changed, 433 insertions, 307 deletions
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/AggregatorFactory.java b/core/src/main/java/org/elasticsearch/search/aggregations/AggregatorFactory.java index 17b00854ec..8f51cc701b 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/AggregatorFactory.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/AggregatorFactory.java @@ -42,11 +42,12 @@ import java.util.Objects; /** * A factory that knows how to create an {@link Aggregator} of a specific type. */ -public abstract class AggregatorFactory extends ToXContentToBytes implements NamedWriteable<AggregatorFactory> { +public abstract class AggregatorFactory<AF extends AggregatorFactory<AF>> extends ToXContentToBytes + implements NamedWriteable<AggregatorFactory<AF>> { protected String name; protected Type type; - protected AggregatorFactory parent; + protected AggregatorFactory<?> parent; protected AggregatorFactories factories = AggregatorFactories.EMPTY; protected Map<String, Object> metaData; private AggregationContext context; @@ -89,10 +90,10 @@ public abstract class AggregatorFactory extends ToXContentToBytes implements Nam * @param subFactories The sub-factories * @return this factory (fluent interface) */ - public AggregatorFactory subFactories(AggregatorFactories subFactories) { + public AF subFactories(AggregatorFactories subFactories) { this.factories = subFactories; this.factories.setParent(this); - return this; + return (AF) this; } public String name() { @@ -110,7 +111,7 @@ public abstract class AggregatorFactory extends ToXContentToBytes implements Nam /** * @return The parent factory if one exists (will always return {@code null} for top level aggregator factories). */ - public AggregatorFactory parent() { + public AggregatorFactory<?> parent() { return parent; } @@ -138,9 +139,9 @@ public abstract class AggregatorFactory extends ToXContentToBytes implements Nam } @Override - public final AggregatorFactory readFrom(StreamInput in) throws IOException { + public final AggregatorFactory<AF> readFrom(StreamInput in) throws IOException { String name = in.readString(); - AggregatorFactory factory = doReadFrom(name, in); + AggregatorFactory<AF> factory = doReadFrom(name, in); factory.factories = AggregatorFactories.EMPTY.readFrom(in); factory.factories.setParent(this); factory.metaData = in.readMap(); @@ -148,7 +149,7 @@ public abstract class AggregatorFactory extends ToXContentToBytes implements Nam } // NORELEASE make this abstract when agg refactor complete - protected AggregatorFactory doReadFrom(String name, StreamInput in) throws IOException { + protected AggregatorFactory<AF> doReadFrom(String name, StreamInput in) throws IOException { return null; } @@ -339,7 +340,7 @@ public abstract class AggregatorFactory extends ToXContentToBytes implements Nam return false; if (getClass() != obj.getClass()) return false; - AggregatorFactory other = (AggregatorFactory) obj; + AggregatorFactory<AF> other = (AggregatorFactory<AF>) obj; if (!Objects.equals(name, other.name)) return false; if (!Objects.equals(type, other.type)) diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/children/ParentToChildrenAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/children/ParentToChildrenAggregator.java index 16cd1380f5..32dce9a342 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/children/ParentToChildrenAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/children/ParentToChildrenAggregator.java @@ -50,7 +50,6 @@ import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.FieldContext; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSource.Bytes.ParentChild; import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceConfig; import org.elasticsearch.search.aggregations.support.ValuesSourceType; @@ -190,7 +189,7 @@ public class ParentToChildrenAggregator extends SingleBucketAggregator { Releasables.close(parentOrdToBuckets, parentOrdToOtherBuckets); } - public static class Factory extends ValuesSourceAggregatorFactory<ValuesSource.Bytes.WithOrdinals.ParentChild> { + public static class Factory extends ValuesSourceAggregatorFactory<ValuesSource.Bytes.WithOrdinals.ParentChild, Factory> { private String parentType; private final String childType; @@ -269,7 +268,7 @@ public class ParentToChildrenAggregator extends SingleBucketAggregator { } @Override - protected ValuesSourceAggregatorFactory<ParentChild> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { String childType = in.readString(); Factory factory = new Factory(name, childType); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterAggregator.java index 777f8f603c..07ba8a9cd1 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterAggregator.java @@ -85,30 +85,23 @@ public class FilterAggregator extends SingleBucketAggregator { return new InternalFilter(name, 0, buildEmptySubAggregations(), pipelineAggregators(), metaData()); } - public static class Factory extends AggregatorFactory { + public static class Factory extends AggregatorFactory<Factory> { private QueryBuilder<?> filter; - public Factory(String name) { - super(name, InternalFilter.TYPE); - } - /** - * Set the filter to use, only documents that match this filter will - * fall into the bucket defined by this {@link Filter} aggregation. + * @param name + * the name of this aggregation + * @param filter + * Set the filter to use, only documents that match this + * filter will fall into the bucket defined by this + * {@link Filter} aggregation. */ - public void filter(QueryBuilder<?> filter) { + public Factory(String name, QueryBuilder<?> filter) { + super(name, InternalFilter.TYPE); this.filter = filter; } - /** - * Get the filter to use, only documents that match this filter will - * fall into the bucket defined by this {@link Filter} aggregation. - */ - public QueryBuilder<?> filter() { - return filter; - } - @Override public Aggregator createInternal(AggregationContext context, Aggregator parent, boolean collectsFromSingleBucket, List<PipelineAggregator> pipelineAggregators, Map<String, Object> metaData) throws IOException { @@ -125,9 +118,8 @@ public class FilterAggregator extends SingleBucketAggregator { } @Override - protected AggregatorFactory doReadFrom(String name, StreamInput in) throws IOException { - Factory factory = new Factory(name); - factory.filter = in.readQuery(); + protected Factory doReadFrom(String name, StreamInput in) throws IOException { + Factory factory = new Factory(name, in.readQuery()); return factory; } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterParser.java index fddb85b389..00953512db 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filter/FilterParser.java @@ -18,12 +18,11 @@ */ package org.elasticsearch.search.aggregations.bucket.filter; -import org.elasticsearch.common.inject.Inject; +import org.elasticsearch.common.ParsingException; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.index.query.MatchAllQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryParseContext; -import org.elasticsearch.indices.query.IndicesQueriesRegistry; import org.elasticsearch.search.aggregations.Aggregator; import org.elasticsearch.search.aggregations.AggregatorFactory; @@ -34,31 +33,27 @@ import java.io.IOException; */ public class FilterParser implements Aggregator.Parser { - private IndicesQueriesRegistry queriesRegistry; - - @Inject - public FilterParser(IndicesQueriesRegistry queriesRegistry) { - this.queriesRegistry = queriesRegistry; - } - @Override public String type() { return InternalFilter.TYPE.name(); } @Override - public AggregatorFactory parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException { + public FilterAggregator.Factory parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException { QueryBuilder<?> filter = context.parseInnerQueryBuilder(); - FilterAggregator.Factory factory = new FilterAggregator.Factory(aggregationName); - factory.filter(filter == null ? new MatchAllQueryBuilder() : filter); + if (filter == null) { + throw new ParsingException(null, "filter cannot be null in filter aggregation [{}]", aggregationName); + } + + FilterAggregator.Factory factory = new FilterAggregator.Factory(aggregationName, + filter == null ? new MatchAllQueryBuilder() : filter); return factory; } - // NORELEASE implement this method when refactoring this aggregation @Override public AggregatorFactory[] getFactoryPrototypes() { - return new AggregatorFactory[] { new FilterAggregator.Factory(null) }; + return new AggregatorFactory[] { new FilterAggregator.Factory(null, null) }; } } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregator.java index 88cb3183cd..51ad3ae936 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregator.java @@ -202,19 +202,31 @@ public class FiltersAggregator extends BucketsAggregator { return owningBucketOrdinal * totalNumKeys + filterOrd; } - public static class Factory extends AggregatorFactory { + public static class Factory extends AggregatorFactory<Factory> { private final List<KeyedFilter> filters; private final boolean keyed; private boolean otherBucket = false; private String otherBucketKey = "_other_"; + /** + * @param name + * the name of this aggregation + * @param filters + * the KeyedFilters to use with this aggregation. + */ public Factory(String name, List<KeyedFilter> filters) { super(name, InternalFilters.TYPE); this.filters = filters; this.keyed = true; } + /** + * @param name + * the name of this aggregation + * @param filters + * the filters to use with this aggregation + */ public Factory(String name, QueryBuilder<?>... filters) { super(name, InternalFilters.TYPE); List<KeyedFilter> keyedFilters = new ArrayList<>(filters.length); @@ -228,8 +240,9 @@ public class FiltersAggregator extends BucketsAggregator { /** * Set whether to include a bucket for documents not matching any filter */ - public void otherBucket(boolean otherBucket) { + public Factory otherBucket(boolean otherBucket) { this.otherBucket = otherBucket; + return this; } /** @@ -243,8 +256,9 @@ public class FiltersAggregator extends BucketsAggregator { * Set the key to use for the bucket for documents not matching any * filter. */ - public void otherBucketKey(String otherBucketKey) { + public Factory otherBucketKey(String otherBucketKey) { this.otherBucketKey = otherBucketKey; + return this; } /** @@ -285,7 +299,7 @@ public class FiltersAggregator extends BucketsAggregator { } @Override - protected AggregatorFactory doReadFrom(String name, StreamInput in) throws IOException { + protected Factory doReadFrom(String name, StreamInput in) throws IOException { Factory factory; if (in.readBoolean()) { int size = in.readVInt(); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridParser.java index 6cef863a56..7f13a1b896 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/geogrid/GeoHashGridParser.java @@ -77,7 +77,7 @@ public class GeoHashGridParser extends GeoPointValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<org.elasticsearch.search.aggregations.support.ValuesSource.GeoPoint> createFactory( + protected GeoGridFactory createFactory( String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { GeoGridFactory factory = new GeoGridFactory(aggregationName); @@ -114,7 +114,7 @@ public class GeoHashGridParser extends GeoPointValuesSourceParser { return false; } - public static class GeoGridFactory extends ValuesSourceAggregatorFactory<ValuesSource.GeoPoint> { + public static class GeoGridFactory extends ValuesSourceAggregatorFactory<ValuesSource.GeoPoint, GeoGridFactory> { private int precision = DEFAULT_PRECISION; private int requiredSize = DEFAULT_MAX_NUM_CELLS; @@ -124,16 +124,31 @@ public class GeoHashGridParser extends GeoPointValuesSourceParser { super(name, InternalGeoHashGrid.TYPE, ValuesSourceType.GEOPOINT, ValueType.GEOPOINT); } - public void precision(int precision) { + public GeoGridFactory precision(int precision) { this.precision = GeoHashGridParams.checkPrecision(precision); + return this; } - public void size(int size) { + public int precision() { + return precision; + } + + public GeoGridFactory size(int size) { this.requiredSize = size; + return this; + } + + public int size() { + return requiredSize; } - public void shardSize(int shardSize) { + public GeoGridFactory shardSize(int shardSize) { this.shardSize = shardSize; + return this; + } + + public int shardSize() { + return shardSize; } @Override @@ -180,7 +195,7 @@ public class GeoHashGridParser extends GeoPointValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<org.elasticsearch.search.aggregations.support.ValuesSource.GeoPoint> innerReadFrom( + protected GeoGridFactory innerReadFrom( String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { GeoGridFactory factory = new GeoGridFactory(name); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/global/GlobalAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/global/GlobalAggregator.java index da3bafc5aa..c0f4e5f043 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/global/GlobalAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/global/GlobalAggregator.java @@ -71,7 +71,7 @@ public class GlobalAggregator extends SingleBucketAggregator { throw new UnsupportedOperationException("global aggregations cannot serve as sub-aggregations, hence should never be called on #buildEmptyAggregations"); } - public static class Factory extends AggregatorFactory { + public static class Factory extends AggregatorFactory<Factory> { public Factory(String name) { super(name, InternalGlobal.TYPE); @@ -91,7 +91,7 @@ public class GlobalAggregator extends SingleBucketAggregator { } @Override - protected AggregatorFactory doReadFrom(String name, StreamInput in) throws IOException { + protected Factory doReadFrom(String name, StreamInput in) throws IOException { return new Factory(name); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramParser.java index 64803fcb12..1cb58f3c08 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramParser.java @@ -23,9 +23,8 @@ import org.elasticsearch.common.ParsingException; import org.elasticsearch.common.rounding.Rounding; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.search.aggregations.AggregatorFactory; +import org.elasticsearch.search.aggregations.bucket.histogram.HistogramAggregator.DateHistogramFactory; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -51,7 +50,7 @@ public class DateHistogramParser extends HistogramParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected DateHistogramFactory createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { HistogramAggregator.DateHistogramFactory factory = new HistogramAggregator.DateHistogramFactory(aggregationName); Object interval = otherOptions.get(Rounding.Interval.INTERVAL_FIELD); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramAggregator.java index 8e33828287..9d57cb273e 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramAggregator.java @@ -162,7 +162,7 @@ public class HistogramAggregator extends BucketsAggregator { Releasables.close(bucketOrds); } - public static class Factory extends ValuesSourceAggregatorFactory<ValuesSource.Numeric> { + public static class Factory<AF extends Factory<AF>> extends ValuesSourceAggregatorFactory<ValuesSource.Numeric, Factory<AF>> { public static final Factory PROTOTYPE = new Factory(""); @@ -187,48 +187,54 @@ public class HistogramAggregator extends BucketsAggregator { return interval; } - public void interval(long interval) { + public AF interval(long interval) { this.interval = interval; + return (AF) this; } public long offset() { return offset; } - public void offset(long offset) { + public AF offset(long offset) { this.offset = offset; + return (AF) this; } public Histogram.Order order() { return order; } - public void order(Histogram.Order order) { + public AF order(Histogram.Order order) { this.order = (InternalOrder) order; + return (AF) this; } public boolean keyed() { return keyed; } - public void keyed(boolean keyed) { + public AF keyed(boolean keyed) { this.keyed = keyed; + return (AF) this; } public long minDocCount() { return minDocCount; } - public void minDocCount(long minDocCount) { + public AF minDocCount(long minDocCount) { this.minDocCount = minDocCount; + return (AF) this; } public ExtendedBounds extendedBounds() { return extendedBounds; } - public void extendedBounds(ExtendedBounds extendedBounds) { + public AF extendedBounds(ExtendedBounds extendedBounds) { this.extendedBounds = extendedBounds; + return (AF) this; } public InternalHistogram.Factory<?> getHistogramFactory() { @@ -305,9 +311,9 @@ public class HistogramAggregator extends BucketsAggregator { } @Override - protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) + protected AF innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { - Factory factory = createFactoryFromStream(name, in); + Factory<AF> factory = createFactoryFromStream(name, in); factory.interval = in.readVLong(); factory.offset = in.readVLong(); if (in.readBoolean()) { @@ -318,12 +324,12 @@ public class HistogramAggregator extends BucketsAggregator { if (in.readBoolean()) { factory.extendedBounds = ExtendedBounds.readFrom(in); } - return factory; + return (AF) factory; } - protected Factory createFactoryFromStream(String name, StreamInput in) + protected Factory<AF> createFactoryFromStream(String name, StreamInput in) throws IOException { - return new Factory(name); + return new Factory<AF>(name); } @Override @@ -367,7 +373,7 @@ public class HistogramAggregator extends BucketsAggregator { } } - public static class DateHistogramFactory extends Factory { + public static class DateHistogramFactory extends Factory<DateHistogramFactory> { public static final DateHistogramFactory PROTOTYPE = new DateHistogramFactory(""); public static final Map<String, DateTimeUnit> DATE_FIELD_UNITS; @@ -402,8 +408,9 @@ public class HistogramAggregator extends BucketsAggregator { /** * Set the interval. */ - public void dateHistogramInterval(DateHistogramInterval dateHistogramInterval) { + public DateHistogramFactory dateHistogramInterval(DateHistogramInterval dateHistogramInterval) { this.dateHistogramInterval = dateHistogramInterval; + return this; } public DateHistogramInterval dateHistogramInterval() { @@ -448,7 +455,7 @@ public class HistogramAggregator extends BucketsAggregator { } @Override - protected Factory createFactoryFromStream(String name, StreamInput in) + protected DateHistogramFactory createFactoryFromStream(String name, StreamInput in) throws IOException { DateHistogramFactory factory = new DateHistogramFactory(name); if (in.readBoolean()) { diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramParser.java index 2c99914765..76e5acc5ff 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/HistogramParser.java @@ -27,8 +27,6 @@ import org.elasticsearch.common.xcontent.XContentParser.Token; import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -53,7 +51,7 @@ public class HistogramParser extends NumericValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected HistogramAggregator.Factory<?> createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { HistogramAggregator.Factory factory = new HistogramAggregator.Factory(aggregationName); Long interval = (Long) otherOptions.get(Rounding.Interval.INTERVAL_FIELD); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/missing/MissingAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/missing/MissingAggregator.java index b7dc7d9833..c839f3e8c8 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/missing/MissingAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/missing/MissingAggregator.java @@ -29,7 +29,6 @@ import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.LeafBucketCollector; import org.elasticsearch.search.aggregations.LeafBucketCollectorBase; import org.elasticsearch.search.aggregations.bucket.SingleBucketAggregator; -import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCountAggregator; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.ValueType; @@ -86,7 +85,7 @@ public class MissingAggregator extends SingleBucketAggregator { return new InternalMissing(name, 0, buildEmptySubAggregations(), pipelineAggregators(), metaData()); } - public static class Factory<VS extends ValuesSource> extends ValuesSourceAggregatorFactory<VS> { + public static class Factory<VS extends ValuesSource> extends ValuesSourceAggregatorFactory<VS, Factory<VS>> { public Factory(String name, ValuesSourceType valuesSourceType, ValueType valueType) { super(name, InternalMissing.TYPE, valuesSourceType, valueType); @@ -105,9 +104,9 @@ public class MissingAggregator extends SingleBucketAggregator { } @Override - protected ValuesSourceAggregatorFactory<VS> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory<VS> innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) { - return new ValueCountAggregator.Factory<VS>(name, valuesSourceType, targetValueType); + return new Factory<VS>(name, valuesSourceType, targetValueType); } @Override diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/missing/MissingParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/missing/MissingParser.java index 793a5f285e..ffd22ebfa1 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/missing/MissingParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/missing/MissingParser.java @@ -25,7 +25,6 @@ import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.AnyValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -49,7 +48,7 @@ public class MissingParser extends AnyValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<ValuesSource> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected MissingAggregator.Factory<ValuesSource> createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { return new MissingAggregator.Factory<ValuesSource>(aggregationName, valuesSourceType, targetValueType); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregator.java index 0017032890..eca5be46cd 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregator.java @@ -150,7 +150,7 @@ public class NestedAggregator extends SingleBucketAggregator { return null; } - public static class Factory extends AggregatorFactory { + public static class Factory extends AggregatorFactory<Factory> { private final String path; diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/nested/ReverseNestedAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/nested/ReverseNestedAggregator.java index 57a5f72311..a567a62171 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/nested/ReverseNestedAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/nested/ReverseNestedAggregator.java @@ -125,7 +125,7 @@ public class ReverseNestedAggregator extends SingleBucketAggregator { return parentFilter; } - public static class Factory extends AggregatorFactory { + public static class Factory extends AggregatorFactory<Factory> { private String path; @@ -138,8 +138,9 @@ public class ReverseNestedAggregator extends SingleBucketAggregator { * the path to a nested object in the mappings. If it is not specified * then this aggregation will go back to the root document. */ - public void path(String path) { + public Factory path(String path) { this.path = path; + return this; } /** diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeAggregator.java index 7b079dec3e..ae6f3e6a25 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeAggregator.java @@ -41,7 +41,6 @@ import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.search.aggregations.support.format.ValueFormat; @@ -397,7 +396,7 @@ public class RangeAggregator extends BucketsAggregator { } } - public static class Factory extends ValuesSourceAggregatorFactory<ValuesSource.Numeric> { + public static class Factory<AF extends Factory<AF>> extends ValuesSourceAggregatorFactory<ValuesSource.Numeric, AF> { private final InternalRange.Factory rangeFactory; private final List<? extends Range> ranges; @@ -413,8 +412,9 @@ public class RangeAggregator extends BucketsAggregator { this.ranges = ranges; } - public void keyed(boolean keyed) { + public AF keyed(boolean keyed) { this.keyed = keyed; + return (AF) this; } public boolean keyed() { @@ -441,20 +441,20 @@ public class RangeAggregator extends BucketsAggregator { } @Override - protected ValuesSourceAggregatorFactory<Numeric> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected AF innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { - Factory factory = createFactoryFromStream(name, in); + Factory<AF> factory = createFactoryFromStream(name, in); factory.keyed = in.readBoolean(); - return factory; + return (AF) factory; } - protected Factory createFactoryFromStream(String name, StreamInput in) throws IOException { + protected Factory<AF> createFactoryFromStream(String name, StreamInput in) throws IOException { int size = in.readVInt(); List<Range> ranges = new ArrayList<>(size); for (int i = 0; i < size; i++) { ranges.add(Range.PROTOTYPE.readFrom(in)); } - return new Factory(name, ranges); + return new Factory<AF>(name, ranges); } @Override diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeParser.java index d6f7d5b69c..8c8e830d55 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/RangeParser.java @@ -26,8 +26,6 @@ import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.Range; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -55,7 +53,7 @@ public class RangeParser extends NumericValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected RangeAggregator.Factory<?> createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { List<? extends Range> ranges = (List<? extends Range>) otherOptions.get(RangeAggregator.RANGES_FIELD); RangeAggregator.Factory factory = new RangeAggregator.Factory(aggregationName, ranges); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/date/DateRangeAggregatorFactory.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/date/DateRangeAggregatorFactory.java index a47bb13988..aba3e1898f 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/date/DateRangeAggregatorFactory.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/date/DateRangeAggregatorFactory.java @@ -27,7 +27,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -public class DateRangeAggregatorFactory extends Factory { +public class DateRangeAggregatorFactory extends Factory<DateRangeAggregatorFactory> { public DateRangeAggregatorFactory(String name, List<Range> ranges) { super(name, InternalDateRange.FACTORY, ranges); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/date/DateRangeParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/date/DateRangeParser.java index 86494767b3..97f9266be0 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/date/DateRangeParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/date/DateRangeParser.java @@ -24,8 +24,6 @@ import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator; import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.Range; import org.elasticsearch.search.aggregations.bucket.range.RangeParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.util.Collections; @@ -47,7 +45,7 @@ public class DateRangeParser extends RangeParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected DateRangeAggregatorFactory createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { List<Range> ranges = (List<Range>) otherOptions.get(RangeAggregator.RANGES_FIELD); DateRangeAggregatorFactory factory = new DateRangeAggregatorFactory(aggregationName, ranges); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/geodistance/GeoDistanceParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/geodistance/GeoDistanceParser.java index 3f24d7fd26..4aece20a40 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/geodistance/GeoDistanceParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/geodistance/GeoDistanceParser.java @@ -112,7 +112,7 @@ public class GeoDistanceParser extends GeoPointValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<org.elasticsearch.search.aggregations.support.ValuesSource.GeoPoint> createFactory( + protected GeoDistanceFactory createFactory( String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { GeoPoint origin = (GeoPoint) otherOptions.get(ORIGIN_FIELD); List<Range> ranges = (List<Range>) otherOptions.get(RangeAggregator.RANGES_FIELD); @@ -195,7 +195,7 @@ public class GeoDistanceParser extends GeoPointValuesSourceParser { return false; } - public static class GeoDistanceFactory extends ValuesSourceAggregatorFactory<ValuesSource.GeoPoint> { + public static class GeoDistanceFactory extends ValuesSourceAggregatorFactory<ValuesSource.GeoPoint, GeoDistanceFactory> { private final GeoPoint origin; private final InternalRange.Factory rangeFactory; @@ -220,24 +220,27 @@ public class GeoDistanceParser extends GeoPointValuesSourceParser { return InternalGeoDistance.TYPE.name(); } - public void unit(DistanceUnit unit) { + public GeoDistanceFactory unit(DistanceUnit unit) { this.unit = unit; + return this; } public DistanceUnit unit() { return unit; } - public void distanceType(GeoDistance distanceType) { + public GeoDistanceFactory distanceType(GeoDistance distanceType) { this.distanceType = distanceType; + return this; } public GeoDistance distanceType() { return distanceType; } - public void keyed(boolean keyed) { + public GeoDistanceFactory keyed(boolean keyed) { this.keyed = keyed; + return this; } public boolean keyed() { @@ -273,7 +276,7 @@ public class GeoDistanceParser extends GeoPointValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<org.elasticsearch.search.aggregations.support.ValuesSource.GeoPoint> innerReadFrom( + protected GeoDistanceFactory innerReadFrom( String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { GeoPoint origin = new GeoPoint(in.readDouble(), in.readDouble()); int size = in.readVInt(); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ipv4/IPv4RangeAggregatorFactory.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ipv4/IPv4RangeAggregatorFactory.java index 46ed00054d..ab6747a859 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ipv4/IPv4RangeAggregatorFactory.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ipv4/IPv4RangeAggregatorFactory.java @@ -34,7 +34,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; -public class IPv4RangeAggregatorFactory extends Factory { +public class IPv4RangeAggregatorFactory extends Factory<IPv4RangeAggregatorFactory> { public IPv4RangeAggregatorFactory(String name, List<Range> ranges) { super(name, InternalIPv4Range.FACTORY, ranges); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ipv4/IpRangeParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ipv4/IpRangeParser.java index 40baef0c52..5c9af1afab 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ipv4/IpRangeParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/range/ipv4/IpRangeParser.java @@ -26,8 +26,6 @@ import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator; import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator.Range; import org.elasticsearch.search.aggregations.bucket.range.RangeParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -55,7 +53,7 @@ public class IpRangeParser extends RangeParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected IPv4RangeAggregatorFactory createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { List<IPv4RangeAggregatorFactory.Range> ranges = (List<IPv4RangeAggregatorFactory.Range>) otherOptions .get(RangeAggregator.RANGES_FIELD); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/DiversifiedSamplerParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/DiversifiedSamplerParser.java index f82a44f164..99e9f42bda 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/DiversifiedSamplerParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/DiversifiedSamplerParser.java @@ -25,8 +25,6 @@ import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.AnyValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -47,7 +45,7 @@ public class DiversifiedSamplerParser extends AnyValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<ValuesSource> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected SamplerAggregator.DiversifiedFactory createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { SamplerAggregator.DiversifiedFactory factory = new SamplerAggregator.DiversifiedFactory(aggregationName, valuesSourceType, targetValueType); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/SamplerAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/SamplerAggregator.java index 9f9acbe22d..f768e961b4 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/SamplerAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/sampler/SamplerAggregator.java @@ -190,7 +190,7 @@ public class SamplerAggregator extends SingleBucketAggregator { return new InternalSampler(name, 0, buildEmptySubAggregations(), pipelineAggregators(), metaData()); } - public static class Factory extends AggregatorFactory { + public static class Factory extends AggregatorFactory<Factory> { public static final int DEFAULT_SHARD_SAMPLE_SIZE = 100; @@ -203,8 +203,9 @@ public class SamplerAggregator extends SingleBucketAggregator { /** * Set the max num docs to be returned from each shard. */ - public void shardSize(int shardSize) { + public Factory shardSize(int shardSize) { this.shardSize = shardSize; + return this; } /** @@ -253,7 +254,7 @@ public class SamplerAggregator extends SingleBucketAggregator { } - public static class DiversifiedFactory extends ValuesSourceAggregatorFactory<ValuesSource> { + public static class DiversifiedFactory extends ValuesSourceAggregatorFactory<ValuesSource, DiversifiedFactory> { public static final Type TYPE = new Type("diversified_sampler"); @@ -270,8 +271,9 @@ public class SamplerAggregator extends SingleBucketAggregator { /** * Set the max num docs to be returned from each shard. */ - public void shardSize(int shardSize) { + public DiversifiedFactory shardSize(int shardSize) { this.shardSize = shardSize; + return this; } /** @@ -284,8 +286,9 @@ public class SamplerAggregator extends SingleBucketAggregator { /** * Set the max num docs to be returned per value. */ - public void maxDocsPerValue(int maxDocsPerValue) { + public DiversifiedFactory maxDocsPerValue(int maxDocsPerValue) { this.maxDocsPerValue = maxDocsPerValue; + return this; } /** @@ -298,8 +301,9 @@ public class SamplerAggregator extends SingleBucketAggregator { /** * Set the execution hint. */ - public void executionHint(String executionHint) { + public DiversifiedFactory executionHint(String executionHint) { this.executionHint = executionHint; + return this; } /** @@ -366,7 +370,7 @@ public class SamplerAggregator extends SingleBucketAggregator { } @Override - protected ValuesSourceAggregatorFactory<ValuesSource> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected DiversifiedFactory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { DiversifiedFactory factory = new DiversifiedFactory(name, valuesSourceType, targetValueType); factory.shardSize = in.readVInt(); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorFactory.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorFactory.java index bb927c9cec..2505a2d00c 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorFactory.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorFactory.java @@ -63,7 +63,8 @@ import java.util.Objects; /** * */ -public class SignificantTermsAggregatorFactory extends ValuesSourceAggregatorFactory<ValuesSource> implements Releasable { +public class SignificantTermsAggregatorFactory extends ValuesSourceAggregatorFactory<ValuesSource, SignificantTermsAggregatorFactory> + implements Releasable { static final ParseField BACKGROUND_FILTER = new ParseField("background_filter"); static final ParseField HEURISTIC = new ParseField("significance_heuristic"); @@ -168,15 +169,17 @@ public class SignificantTermsAggregatorFactory extends ValuesSourceAggregatorFac return bucketCountThresholds; } - public void bucketCountThresholds(TermsAggregator.BucketCountThresholds bucketCountThresholds) { + public SignificantTermsAggregatorFactory bucketCountThresholds(TermsAggregator.BucketCountThresholds bucketCountThresholds) { this.bucketCountThresholds = bucketCountThresholds; + return this; } /** * Expert: sets an execution hint to the aggregation. */ - public void executionHint(String executionHint) { + public SignificantTermsAggregatorFactory executionHint(String executionHint) { this.executionHint = executionHint; + return this; } /** @@ -186,8 +189,9 @@ public class SignificantTermsAggregatorFactory extends ValuesSourceAggregatorFac return executionHint; } - public void backgroundFilter(QueryBuilder<?> filterBuilder) { + public SignificantTermsAggregatorFactory backgroundFilter(QueryBuilder<?> filterBuilder) { this.filterBuilder = filterBuilder; + return this; } public QueryBuilder<?> backgroundFilter() { @@ -197,8 +201,9 @@ public class SignificantTermsAggregatorFactory extends ValuesSourceAggregatorFac /** * Set terms to include and exclude from the aggregation results */ - public void includeExclude(IncludeExclude includeExclude) { + public SignificantTermsAggregatorFactory includeExclude(IncludeExclude includeExclude) { this.includeExclude = includeExclude; + return this; } /** @@ -208,8 +213,9 @@ public class SignificantTermsAggregatorFactory extends ValuesSourceAggregatorFac return includeExclude; } - public void significanceHeuristic(SignificanceHeuristic significanceHeuristic) { + public SignificantTermsAggregatorFactory significanceHeuristic(SignificanceHeuristic significanceHeuristic) { this.significanceHeuristic = significanceHeuristic; + return this; } public SignificanceHeuristic significanceHeuristic() { @@ -391,7 +397,7 @@ public class SignificantTermsAggregatorFactory extends ValuesSourceAggregatorFac } @Override - protected ValuesSourceAggregatorFactory<ValuesSource> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected SignificantTermsAggregatorFactory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { SignificantTermsAggregatorFactory factory = new SignificantTermsAggregatorFactory(name, valuesSourceType, targetValueType); factory.bucketCountThresholds = BucketCountThresholds.readFromStream(in); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsParser.java index 6b44309ad8..35797363c0 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsParser.java @@ -36,8 +36,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregator; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregator.BucketCountThresholds; import org.elasticsearch.search.aggregations.bucket.terms.support.IncludeExclude; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -63,7 +61,7 @@ public class SignificantTermsParser extends AbstractTermsParser { } @Override - protected ValuesSourceAggregatorFactory<ValuesSource> doCreateFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected SignificantTermsAggregatorFactory doCreateFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, BucketCountThresholds bucketCountThresholds, SubAggCollectionMode collectMode, String executionHint, IncludeExclude incExc, Map<ParseField, Object> otherOptions) { SignificantTermsAggregatorFactory factory = new SignificantTermsAggregatorFactory(aggregationName, valuesSourceType, diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/AbstractTermsParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/AbstractTermsParser.java index 16ec4ab9de..5097dd735f 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/AbstractTermsParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/AbstractTermsParser.java @@ -50,7 +50,7 @@ public abstract class AbstractTermsParser extends AnyValuesSourceParser { } @Override - protected final ValuesSourceAggregatorFactory<ValuesSource> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected final ValuesSourceAggregatorFactory<ValuesSource, ?> createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { BucketCountThresholds bucketCountThresholds = getDefaultBucketCountThresholds(); Integer requiredSize = (Integer) otherOptions.get(REQUIRED_SIZE_FIELD_NAME); @@ -77,7 +77,7 @@ public abstract class AbstractTermsParser extends AnyValuesSourceParser { otherOptions); } - protected abstract ValuesSourceAggregatorFactory<ValuesSource> doCreateFactory(String aggregationName, + protected abstract ValuesSourceAggregatorFactory<ValuesSource, ?> doCreateFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, BucketCountThresholds bucketCountThresholds, SubAggCollectionMode collectMode, String executionHint, IncludeExclude incExc, Map<ParseField, Object> otherOptions); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorFactory.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorFactory.java index aa8f07de04..0458f5fb01 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorFactory.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorFactory.java @@ -54,7 +54,7 @@ import java.util.Objects; /** * */ -public class TermsAggregatorFactory extends ValuesSourceAggregatorFactory<ValuesSource> { +public class TermsAggregatorFactory extends ValuesSourceAggregatorFactory<ValuesSource, TermsAggregatorFactory> { public static final ParseField EXECUTION_HINT_FIELD_NAME = new ParseField("execution_hint"); public static final ParseField SHARD_SIZE_FIELD_NAME = new ParseField("shard_size"); @@ -198,15 +198,17 @@ public class TermsAggregatorFactory extends ValuesSourceAggregatorFactory<Values return bucketCountThresholds; } - public void bucketCountThresholds(TermsAggregator.BucketCountThresholds bucketCountThresholds) { + public TermsAggregatorFactory bucketCountThresholds(TermsAggregator.BucketCountThresholds bucketCountThresholds) { this.bucketCountThresholds = bucketCountThresholds; + return this; } /** * Sets the order in which the buckets will be returned. */ - public void order(List<Terms.Order> order) { + public TermsAggregatorFactory order(List<Terms.Order> order) { this.orders = order; + return this; } /** @@ -219,8 +221,9 @@ public class TermsAggregatorFactory extends ValuesSourceAggregatorFactory<Values /** * Expert: sets an execution hint to the aggregation. */ - public void executionHint(String executionHint) { + public TermsAggregatorFactory executionHint(String executionHint) { this.executionHint = executionHint; + return this; } /** @@ -233,8 +236,9 @@ public class TermsAggregatorFactory extends ValuesSourceAggregatorFactory<Values /** * Expert: set the collection mode. */ - public void collectMode(SubAggCollectionMode mode) { + public TermsAggregatorFactory collectMode(SubAggCollectionMode mode) { this.collectMode = mode; + return this; } /** @@ -247,8 +251,9 @@ public class TermsAggregatorFactory extends ValuesSourceAggregatorFactory<Values /** * Set terms to include and exclude from the aggregation results */ - public void includeExclude(IncludeExclude includeExclude) { + public TermsAggregatorFactory includeExclude(IncludeExclude includeExclude) { this.includeExclude = includeExclude; + return this; } /** @@ -268,8 +273,9 @@ public class TermsAggregatorFactory extends ValuesSourceAggregatorFactory<Values /** * Set whether doc count error will be return for individual terms */ - public void showTermDocCountError(boolean showTermDocCountError) { + public TermsAggregatorFactory showTermDocCountError(boolean showTermDocCountError) { this.showTermDocCountError = showTermDocCountError; + return this; } @Override @@ -422,7 +428,7 @@ public class TermsAggregatorFactory extends ValuesSourceAggregatorFactory<Values } @Override - protected ValuesSourceAggregatorFactory<ValuesSource> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected TermsAggregatorFactory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { TermsAggregatorFactory factory = new TermsAggregatorFactory(name, valuesSourceType, targetValueType); factory.bucketCountThresholds = BucketCountThresholds.readFromStream(in); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/TermsParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/TermsParser.java index 4a40816ab2..5b8368a218 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/TermsParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/terms/TermsParser.java @@ -29,8 +29,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.Terms.Order; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregator.BucketCountThresholds; import org.elasticsearch.search.aggregations.bucket.terms.support.IncludeExclude; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -51,7 +49,7 @@ public class TermsParser extends AbstractTermsParser { } @Override - protected ValuesSourceAggregatorFactory<ValuesSource> doCreateFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected TermsAggregatorFactory doCreateFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, BucketCountThresholds bucketCountThresholds, SubAggCollectionMode collectMode, String executionHint, IncludeExclude incExc, Map<ParseField, Object> otherOptions) { TermsAggregatorFactory factory = new TermsAggregatorFactory(aggregationName, valuesSourceType, targetValueType); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgAggregator.java index f7f28e669d..fbada14129 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgAggregator.java @@ -36,7 +36,6 @@ import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.search.aggregations.support.format.ValueFormatter; @@ -118,7 +117,7 @@ public class AvgAggregator extends NumericMetricsAggregator.SingleValue { return new InternalAvg(name, 0.0, 0l, formatter, pipelineAggregators(), metaData()); } - public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric> { + public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric, Factory> { public Factory(String name) { super(name, InternalAvg.TYPE, ValuesSourceType.NUMERIC, ValueType.NUMERIC); @@ -139,7 +138,7 @@ public class AvgAggregator extends NumericMetricsAggregator.SingleValue { } @Override - protected ValuesSourceAggregatorFactory<Numeric> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) { return new AvgAggregator.Factory(name); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgParser.java index 9e31badd96..110a368ba6 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgParser.java @@ -24,8 +24,6 @@ import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -52,7 +50,7 @@ public class AvgParser extends NumericValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected AvgAggregator.Factory createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { return new AvgAggregator.Factory(aggregationName); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityAggregatorFactory.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityAggregatorFactory.java index d2beb32cca..5c89081e83 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityAggregatorFactory.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityAggregatorFactory.java @@ -37,7 +37,8 @@ import java.util.List; import java.util.Map; import java.util.Objects; -public final class CardinalityAggregatorFactory<VS extends ValuesSource> extends ValuesSourceAggregatorFactory.LeafOnly<VS> { +public final class CardinalityAggregatorFactory<VS extends ValuesSource> + extends ValuesSourceAggregatorFactory.LeafOnly<VS, CardinalityAggregatorFactory<VS>> { public static final ParseField PRECISION_THRESHOLD_FIELD = new ParseField("precision_threshold"); @@ -51,8 +52,9 @@ public final class CardinalityAggregatorFactory<VS extends ValuesSource> extends * Set a precision threshold. Higher values improve accuracy but also * increase memory usage. */ - public void precisionThreshold(long precisionThreshold) { + public CardinalityAggregatorFactory<VS> precisionThreshold(long precisionThreshold) { this.precisionThreshold = precisionThreshold; + return this; } /** @@ -90,7 +92,7 @@ public final class CardinalityAggregatorFactory<VS extends ValuesSource> extends } @Override - protected ValuesSourceAggregatorFactory<VS> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected CardinalityAggregatorFactory<VS> innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { CardinalityAggregatorFactory<VS> factory = new CardinalityAggregatorFactory<>(name, valuesSourceType, targetValueType); if (in.readBoolean()) { diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityParser.java index 061e5408ab..fd2633950e 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityParser.java @@ -27,7 +27,6 @@ import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.AnyValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -48,7 +47,7 @@ public class CardinalityParser extends AnyValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<ValuesSource> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected CardinalityAggregatorFactory<ValuesSource> createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { CardinalityAggregatorFactory<ValuesSource> factory = new CardinalityAggregatorFactory<>(aggregationName, valuesSourceType, targetValueType); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsAggregator.java index fdda9e3fe9..2f8b7ae46f 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsAggregator.java @@ -174,7 +174,7 @@ public final class GeoBoundsAggregator extends MetricsAggregator { Releasables.close(tops, bottoms, posLefts, posRights, negLefts, negRights); } - public static class Factory extends ValuesSourceAggregatorFactory<ValuesSource.GeoPoint> { + public static class Factory extends ValuesSourceAggregatorFactory<ValuesSource.GeoPoint, Factory> { private boolean wrapLongitude = true; @@ -185,8 +185,9 @@ public final class GeoBoundsAggregator extends MetricsAggregator { /** * Set whether to wrap longitudes. Defaults to true. */ - public void wrapLongitude(boolean wrapLongitude) { + public Factory wrapLongitude(boolean wrapLongitude) { this.wrapLongitude = wrapLongitude; + return this; } /** @@ -210,7 +211,7 @@ public final class GeoBoundsAggregator extends MetricsAggregator { } @Override - protected ValuesSourceAggregatorFactory<ValuesSource.GeoPoint> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { Factory factory = new Factory(name); factory.wrapLongitude = in.readBoolean(); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsParser.java index ac704b22a6..44ab63c490 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsParser.java @@ -26,8 +26,6 @@ import org.elasticsearch.common.xcontent.XContentParser.Token; import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.GeoPointValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.GeoPoint; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -45,7 +43,7 @@ public class GeoBoundsParser extends GeoPointValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<GeoPoint> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected GeoBoundsAggregator.Factory createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { GeoBoundsAggregator.Factory factory = new GeoBoundsAggregator.Factory(aggregationName); Boolean wrapLongitude = (Boolean) otherOptions.get(GeoBoundsAggregator.WRAP_LONGITUDE_FIELD); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java index 05e1c236ae..39aa6bcea9 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java @@ -125,7 +125,7 @@ public final class GeoCentroidAggregator extends MetricsAggregator { Releasables.close(centroids, counts); } - public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.GeoPoint> { + public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.GeoPoint, Factory> { public Factory(String name) { super(name, InternalGeoCentroid.TYPE, ValuesSourceType.GEOPOINT, ValueType.GEOPOINT); @@ -145,7 +145,7 @@ public final class GeoCentroidAggregator extends MetricsAggregator { } @Override - protected ValuesSourceAggregatorFactory<ValuesSource.GeoPoint> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { return new Factory(name); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidParser.java index a58e2316ed..1c1b195ce0 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidParser.java @@ -26,8 +26,6 @@ import org.elasticsearch.common.xcontent.XContentParser.Token; import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.GeoPointValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.GeoPoint; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -54,7 +52,7 @@ public class GeoCentroidParser extends GeoPointValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<GeoPoint> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected GeoCentroidAggregator.Factory createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { return new GeoCentroidAggregator.Factory(aggregationName); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxAggregator.java index 8beff44335..cd28dbbc5d 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxAggregator.java @@ -37,7 +37,6 @@ import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.search.aggregations.support.format.ValueFormatter; @@ -119,7 +118,7 @@ public class MaxAggregator extends NumericMetricsAggregator.SingleValue { return new InternalMax(name, Double.NEGATIVE_INFINITY, formatter, pipelineAggregators(), metaData()); } - public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric> { + public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric, Factory> { public Factory(String name) { super(name, InternalMax.TYPE, ValuesSourceType.NUMERIC, ValueType.NUMERIC); @@ -139,7 +138,7 @@ public class MaxAggregator extends NumericMetricsAggregator.SingleValue { } @Override - protected ValuesSourceAggregatorFactory<Numeric> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) { return new MaxAggregator.Factory(name); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxParser.java index 8c2a873b38..4ca7cc3666 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxParser.java @@ -24,8 +24,6 @@ import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -52,7 +50,7 @@ public class MaxParser extends NumericValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected MaxAggregator.Factory createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { return new MaxAggregator.Factory(aggregationName); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinAggregator.java index 651fd1179c..5242422e6d 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinAggregator.java @@ -37,7 +37,6 @@ import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.search.aggregations.support.format.ValueFormatter; @@ -118,7 +117,7 @@ public class MinAggregator extends NumericMetricsAggregator.SingleValue { return new InternalMin(name, Double.POSITIVE_INFINITY, formatter, pipelineAggregators(), metaData()); } - public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric> { + public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric, Factory> { public Factory(String name) { super(name, InternalMin.TYPE, ValuesSourceType.NUMERIC, ValueType.NUMERIC); @@ -138,7 +137,7 @@ public class MinAggregator extends NumericMetricsAggregator.SingleValue { } @Override - protected ValuesSourceAggregatorFactory<Numeric> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) { return new MinAggregator.Factory(name); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinParser.java index 54a0e8d351..25083c0a9d 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinParser.java @@ -25,8 +25,6 @@ import org.elasticsearch.common.xcontent.XContentParser.Token; import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -53,7 +51,7 @@ public class MinParser extends NumericValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected MinAggregator.Factory createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { return new MinAggregator.Factory(aggregationName); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/AbstractPercentilesParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/AbstractPercentilesParser.java index 8efb429a03..707f5fbd5c 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/AbstractPercentilesParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/AbstractPercentilesParser.java @@ -117,7 +117,7 @@ public abstract class AbstractPercentilesParser extends NumericValuesSourceParse } @Override - protected ValuesSourceAggregatorFactory<Numeric> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected ValuesSourceAggregatorFactory<Numeric, ?> createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { PercentilesMethod method = (PercentilesMethod) otherOptions.getOrDefault(METHOD_FIELD, PercentilesMethod.TDIGEST); @@ -128,7 +128,7 @@ public abstract class AbstractPercentilesParser extends NumericValuesSourceParse return buildFactory(aggregationName, cdfValues, method, compression, numberOfSignificantValueDigits, keyed); } - protected abstract ValuesSourceAggregatorFactory<Numeric> buildFactory(String aggregationName, double[] cdfValues, + protected abstract ValuesSourceAggregatorFactory<Numeric, ?> buildFactory(String aggregationName, double[] cdfValues, PercentilesMethod method, Double compression, Integer numberOfSignificantValueDigits, Boolean keyed); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/PercentileRanksParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/PercentileRanksParser.java index 371a3b2089..553800a33e 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/PercentileRanksParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/PercentileRanksParser.java @@ -48,7 +48,7 @@ public class PercentileRanksParser extends AbstractPercentilesParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> buildFactory(String aggregationName, double[] keys, PercentilesMethod method, + protected ValuesSourceAggregatorFactory<Numeric, ?> buildFactory(String aggregationName, double[] keys, PercentilesMethod method, Double compression, Integer numberOfSignificantValueDigits, Boolean keyed) { if (method == PercentilesMethod.TDIGEST) { TDigestPercentileRanksAggregator.Factory factory = new TDigestPercentileRanksAggregator.Factory(aggregationName); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/PercentilesParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/PercentilesParser.java index 4b3fad1bce..f4820697af 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/PercentilesParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/PercentilesParser.java @@ -50,7 +50,7 @@ public class PercentilesParser extends AbstractPercentilesParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> buildFactory(String aggregationName, double[] keys, PercentilesMethod method, + protected ValuesSourceAggregatorFactory<Numeric, ?> buildFactory(String aggregationName, double[] keys, PercentilesMethod method, Double compression, Integer numberOfSignificantValueDigits, Boolean keyed) { if (method == PercentilesMethod.TDIGEST) { TDigestPercentilesAggregator.Factory factory = new TDigestPercentilesAggregator.Factory(aggregationName); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/HDRPercentileRanksAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/HDRPercentileRanksAggregator.java index 2659620185..a0dc9ed271 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/HDRPercentileRanksAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/HDRPercentileRanksAggregator.java @@ -83,7 +83,7 @@ public class HDRPercentileRanksAggregator extends AbstractHDRPercentilesAggregat } } - public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric> { + public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric, Factory> { private double[] values; private int numberOfSignificantValueDigits = 3; @@ -96,10 +96,11 @@ public class HDRPercentileRanksAggregator extends AbstractHDRPercentilesAggregat /** * Set the values to compute percentiles from. */ - public void values(double[] values) { + public Factory values(double[] values) { double[] sortedValues = Arrays.copyOf(values, values.length); Arrays.sort(sortedValues); this.values = sortedValues; + return this; } /** @@ -112,8 +113,9 @@ public class HDRPercentileRanksAggregator extends AbstractHDRPercentilesAggregat /** * Set whether the XContent response should be keyed */ - public void keyed(boolean keyed) { + public Factory keyed(boolean keyed) { this.keyed = keyed; + return this; } /** @@ -126,8 +128,9 @@ public class HDRPercentileRanksAggregator extends AbstractHDRPercentilesAggregat /** * Expert: set the number of significant digits in the values. */ - public void numberOfSignificantValueDigits(int numberOfSignificantValueDigits) { + public Factory numberOfSignificantValueDigits(int numberOfSignificantValueDigits) { this.numberOfSignificantValueDigits = numberOfSignificantValueDigits; + return this; } /** @@ -153,7 +156,7 @@ public class HDRPercentileRanksAggregator extends AbstractHDRPercentilesAggregat } @Override - protected ValuesSourceAggregatorFactory<Numeric> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { Factory factory = new Factory(name); factory.values = in.readDoubleArray(); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/HDRPercentilesAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/HDRPercentilesAggregator.java index 36c1374893..55f0c1f6cf 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/HDRPercentilesAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/HDRPercentilesAggregator.java @@ -84,7 +84,7 @@ public class HDRPercentilesAggregator extends AbstractHDRPercentilesAggregator { formatter, pipelineAggregators(), metaData()); } - public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric> { + public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric, Factory> { private double[] percents = PercentilesParser.DEFAULT_PERCENTS; private int numberOfSignificantValueDigits = 3; @@ -97,10 +97,11 @@ public class HDRPercentilesAggregator extends AbstractHDRPercentilesAggregator { /** * Set the percentiles to compute. */ - public void percents(double[] percents) { + public Factory percents(double[] percents) { double[] sortedPercents = Arrays.copyOf(percents, percents.length); Arrays.sort(sortedPercents); this.percents = sortedPercents; + return this; } /** @@ -113,8 +114,9 @@ public class HDRPercentilesAggregator extends AbstractHDRPercentilesAggregator { /** * Set whether the XContent response should be keyed */ - public void keyed(boolean keyed) { + public Factory keyed(boolean keyed) { this.keyed = keyed; + return this; } /** @@ -127,8 +129,9 @@ public class HDRPercentilesAggregator extends AbstractHDRPercentilesAggregator { /** * Expert: set the number of significant digits in the values. */ - public void numberOfSignificantValueDigits(int numberOfSignificantValueDigits) { + public Factory numberOfSignificantValueDigits(int numberOfSignificantValueDigits) { this.numberOfSignificantValueDigits = numberOfSignificantValueDigits; + return this; } /** @@ -154,7 +157,7 @@ public class HDRPercentilesAggregator extends AbstractHDRPercentilesAggregator { } @Override - protected ValuesSourceAggregatorFactory<Numeric> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { Factory factory = new Factory(name); factory.percents = in.readDoubleArray(); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/TDigestPercentileRanksAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/TDigestPercentileRanksAggregator.java index 1285a89a33..8f56a2c892 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/TDigestPercentileRanksAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/TDigestPercentileRanksAggregator.java @@ -78,7 +78,7 @@ public class TDigestPercentileRanksAggregator extends AbstractTDigestPercentiles } } - public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric> { + public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric, Factory> { private double[] values; private double compression = 100.0; @@ -91,10 +91,11 @@ public class TDigestPercentileRanksAggregator extends AbstractTDigestPercentiles /** * Set the values to compute percentiles from. */ - public void values(double[] values) { + public Factory values(double[] values) { double[] sortedValues = Arrays.copyOf(values, values.length); Arrays.sort(sortedValues); this.values = sortedValues; + return this; } /** @@ -107,8 +108,9 @@ public class TDigestPercentileRanksAggregator extends AbstractTDigestPercentiles /** * Set whether the XContent response should be keyed */ - public void keyed(boolean keyed) { + public Factory keyed(boolean keyed) { this.keyed = keyed; + return this; } /** @@ -122,8 +124,9 @@ public class TDigestPercentileRanksAggregator extends AbstractTDigestPercentiles * Expert: set the compression. Higher values improve accuracy but also * memory usage. */ - public void compression(double compression) { + public Factory compression(double compression) { this.compression = compression; + return this; } /** @@ -150,7 +153,7 @@ public class TDigestPercentileRanksAggregator extends AbstractTDigestPercentiles } @Override - protected ValuesSourceAggregatorFactory<Numeric> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { Factory factory = new Factory(name); factory.values = in.readDoubleArray(); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/TDigestPercentilesAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/TDigestPercentilesAggregator.java index 2d906eed9d..ac864d6396 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/TDigestPercentilesAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/TDigestPercentilesAggregator.java @@ -78,7 +78,7 @@ public class TDigestPercentilesAggregator extends AbstractTDigestPercentilesAggr return new InternalTDigestPercentiles(name, keys, new TDigestState(compression), keyed, formatter, pipelineAggregators(), metaData()); } - public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric> { + public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric, Factory> { private double[] percents = PercentilesParser.DEFAULT_PERCENTS; private double compression = 100.0; @@ -91,10 +91,11 @@ public class TDigestPercentilesAggregator extends AbstractTDigestPercentilesAggr /** * Set the percentiles to compute. */ - public void percents(double[] percents) { + public Factory percents(double[] percents) { double[] sortedPercents = Arrays.copyOf(percents, percents.length); Arrays.sort(sortedPercents); this.percents = sortedPercents; + return this; } /** @@ -107,8 +108,9 @@ public class TDigestPercentilesAggregator extends AbstractTDigestPercentilesAggr /** * Set whether the XContent response should be keyed */ - public void keyed(boolean keyed) { + public Factory keyed(boolean keyed) { this.keyed = keyed; + return this; } /** @@ -122,8 +124,9 @@ public class TDigestPercentilesAggregator extends AbstractTDigestPercentilesAggr * Expert: set the compression. Higher values improve accuracy but also * memory usage. */ - public void compression(double compression) { + public Factory compression(double compression) { this.compression = compression; + return this; } /** @@ -150,7 +153,7 @@ public class TDigestPercentilesAggregator extends AbstractTDigestPercentilesAggr } @Override - protected ValuesSourceAggregatorFactory<Numeric> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { Factory factory = new Factory(name); factory.percents = in.readDoubleArray(); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/scripted/ScriptedMetricAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/scripted/ScriptedMetricAggregator.java index d6ddd2100e..97852b4bc9 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/scripted/ScriptedMetricAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/scripted/ScriptedMetricAggregator.java @@ -110,7 +110,7 @@ public class ScriptedMetricAggregator extends MetricsAggregator { return new InternalScriptedMetric(name, null, reduceScript, pipelineAggregators(), metaData()); } - public static class Factory extends AggregatorFactory { + public static class Factory extends AggregatorFactory<Factory> { private Script initScript; private Script mapScript; @@ -125,37 +125,78 @@ public class ScriptedMetricAggregator extends MetricsAggregator { /** * Set the <tt>init</tt> script. */ - public void initScript(Script initScript) { + public Factory initScript(Script initScript) { this.initScript = initScript; + return this; + } + + /** + * Get the <tt>init</tt> script. + */ + public Script initScript() { + return initScript; } /** * Set the <tt>map</tt> script. */ - public void mapScript(Script mapScript) { + public Factory mapScript(Script mapScript) { this.mapScript = mapScript; + return this; + } + + /** + * Get the <tt>map</tt> script. + */ + public Script mapScript() { + return mapScript; } /** * Set the <tt>combine</tt> script. */ - public void combineScript(Script combineScript) { + public Factory combineScript(Script combineScript) { this.combineScript = combineScript; + return this; + } + + /** + * Get the <tt>combine</tt> script. + */ + public Script combineScript() { + return combineScript; } /** * Set the <tt>reduce</tt> script. */ - public void reduceScript(Script reduceScript) { + public Factory reduceScript(Script reduceScript) { this.reduceScript = reduceScript; + return this; + } + + /** + * Get the <tt>reduce</tt> script. + */ + public Script reduceScript() { + return reduceScript; } /** * Set parameters that will be available in the <tt>init</tt>, * <tt>map</tt> and <tt>combine</tt> phases. */ - public void params(Map<String, Object> params) { + public Factory params(Map<String, Object> params) { this.params = params; + return this; + } + + /** + * Get parameters that will be available in the <tt>init</tt>, + * <tt>map</tt> and <tt>combine</tt> phases. + */ + public Map<String, Object> params() { + return params; } @Override diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsAggregator.java index 2df3d89d70..0e4e24a7d9 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsAggregator.java @@ -36,7 +36,6 @@ import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.search.aggregations.support.format.ValueFormatter; @@ -160,7 +159,7 @@ public class StatsAggregator extends NumericMetricsAggregator.MultiValue { return new InternalStats(name, 0, 0, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, formatter, pipelineAggregators(), metaData()); } - public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric> { + public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric, Factory> { public Factory(String name) { super(name, InternalStats.TYPE, ValuesSourceType.NUMERIC, ValueType.NUMERIC); @@ -180,7 +179,7 @@ public class StatsAggregator extends NumericMetricsAggregator.MultiValue { } @Override - protected ValuesSourceAggregatorFactory<Numeric> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) { return new StatsAggregator.Factory(name); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsParser.java index 27d24b284f..db08df7914 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsParser.java @@ -24,8 +24,6 @@ import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -52,7 +50,7 @@ public class StatsParser extends NumericValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected StatsAggregator.Factory createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { return new StatsAggregator.Factory(aggregationName); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsAggregator.java index 397a502f5d..3ab11a765f 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsAggregator.java @@ -37,7 +37,6 @@ import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.search.aggregations.support.AggregationContext; import org.elasticsearch.search.aggregations.support.ValueType; import org.elasticsearch.search.aggregations.support.ValuesSource; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import org.elasticsearch.search.aggregations.support.format.ValueFormatter; @@ -197,7 +196,7 @@ public class ExtendedStatsAggregator extends NumericMetricsAggregator.MultiValue Releasables.close(counts, maxes, mins, sumOfSqrs, sums); } - public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric> { + public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric, Factory> { private double sigma = 2.0; @@ -205,8 +204,9 @@ public class ExtendedStatsAggregator extends NumericMetricsAggregator.MultiValue super(name, InternalExtendedStats.TYPE, ValuesSourceType.NUMERIC, ValueType.NUMERIC); } - public void sigma(double sigma) { + public Factory sigma(double sigma) { this.sigma = sigma; + return this; } public double sigma() { @@ -229,7 +229,7 @@ public class ExtendedStatsAggregator extends NumericMetricsAggregator.MultiValue } @Override - protected ValuesSourceAggregatorFactory<Numeric> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected Factory innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { ExtendedStatsAggregator.Factory factory = new ExtendedStatsAggregator.Factory(name); factory.sigma = in.readDouble(); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsParser.java index dc869794d6..91e7db2842 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsParser.java @@ -24,8 +24,6 @@ import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -58,7 +56,7 @@ public class ExtendedStatsParser extends NumericValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected ExtendedStatsAggregator.Factory createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { ExtendedStatsAggregator.Factory factory = new ExtendedStatsAggregator.Factory(aggregationName); Double sigma = (Double) otherOptions.get(ExtendedStatsAggregator.SIGMA_FIELD); @@ -69,7 +67,7 @@ public class ExtendedStatsParser extends NumericValuesSourceParser { } @Override - public AggregatorFactory[] getFactoryPrototypes() { + public AggregatorFactory<?>[] getFactoryPrototypes() { return new AggregatorFactory[] { new ExtendedStatsAggregator.Factory(null) }; } } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumAggregator.java index bbaf6079e4..441c6be672 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumAggregator.java @@ -110,7 +110,7 @@ public class SumAggregator extends NumericMetricsAggregator.SingleValue { return new InternalSum(name, 0.0, formatter, pipelineAggregators(), metaData()); } - public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric> { + public static class Factory extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric, Factory> { public Factory(String name) { super(name, InternalSum.TYPE, ValuesSourceType.NUMERIC, ValueType.NUMERIC); @@ -130,7 +130,7 @@ public class SumAggregator extends NumericMetricsAggregator.SingleValue { } @Override - protected ValuesSourceAggregatorFactory<Numeric> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected ValuesSourceAggregatorFactory<Numeric, Factory> innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) { return new SumAggregator.Factory(name); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumParser.java index 8fc534e413..b633023259 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumParser.java @@ -24,8 +24,6 @@ import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.support.AbstractValuesSourceParser.NumericValuesSourceParser; import org.elasticsearch.search.aggregations.support.ValueType; -import org.elasticsearch.search.aggregations.support.ValuesSource.Numeric; -import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceType; import java.io.IOException; @@ -52,7 +50,7 @@ public class SumParser extends NumericValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<Numeric> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected SumAggregator.Factory createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { return new SumAggregator.Factory(aggregationName); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsAggregator.java index faa9c63564..2bbb44b034 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsAggregator.java @@ -209,7 +209,7 @@ public class TopHitsAggregator extends MetricsAggregator { Releasables.close(topDocsCollectors); } - public static class Factory extends AggregatorFactory { + public static class Factory extends AggregatorFactory<Factory> { private static final SortParseElement sortParseElement = new SortParseElement(); private int from = 0; @@ -231,8 +231,9 @@ public class TopHitsAggregator extends MetricsAggregator { /** * From index to start the search from. Defaults to <tt>0</tt>. */ - public void from(int from) { + public Factory from(int from) { this.from = from; + return this; } /** @@ -245,8 +246,9 @@ public class TopHitsAggregator extends MetricsAggregator { /** * The number of search hits to return. Defaults to <tt>10</tt>. */ - public void size(int size) { + public Factory size(int size) { this.size = size; + return this; } /** @@ -264,8 +266,9 @@ public class TopHitsAggregator extends MetricsAggregator { * @param order * The sort ordering */ - public void sort(String name, SortOrder order) { + public Factory sort(String name, SortOrder order) { sort(SortBuilders.fieldSort(name).order(order)); + return this; } /** @@ -274,14 +277,15 @@ public class TopHitsAggregator extends MetricsAggregator { * @param name * The name of the field to sort by */ - public void sort(String name) { + public Factory sort(String name) { sort(SortBuilders.fieldSort(name)); + return this; } /** * Adds a sort builder. */ - public void sort(SortBuilder sort) { + public Factory sort(SortBuilder sort) { try { if (sorts == null) { sorts = new ArrayList<>(); @@ -297,18 +301,20 @@ public class TopHitsAggregator extends MetricsAggregator { } catch (IOException e) { throw new RuntimeException(e); } + return this; } /** * Adds a sort builder. */ - public void sorts(List<BytesReference> sorts) { + public Factory sorts(List<BytesReference> sorts) { if (this.sorts == null) { this.sorts = new ArrayList<>(); } for (BytesReference sort : sorts) { this.sorts.add(sort); } + return this; } /** @@ -321,8 +327,9 @@ public class TopHitsAggregator extends MetricsAggregator { /** * Adds highlight to perform as part of the search. */ - public void highlighter(HighlightBuilder highlightBuilder) { + public Factory highlighter(HighlightBuilder highlightBuilder) { this.highlightBuilder = highlightBuilder; + return this; } /** @@ -336,12 +343,13 @@ public class TopHitsAggregator extends MetricsAggregator { * Indicates whether the response should contain the stored _source for * every hit */ - public void fetchSource(boolean fetch) { + public Factory fetchSource(boolean fetch) { if (this.fetchSourceContext == null) { this.fetchSourceContext = new FetchSourceContext(fetch); } else { this.fetchSourceContext.fetchSource(fetch); } + return this; } /** @@ -356,9 +364,10 @@ public class TopHitsAggregator extends MetricsAggregator { * An optional exclude (optionally wildcarded) pattern to * filter the returned _source */ - public void fetchSource(@Nullable String include, @Nullable String exclude) { + public Factory fetchSource(@Nullable String include, @Nullable String exclude) { fetchSource(include == null ? Strings.EMPTY_ARRAY : new String[] { include }, exclude == null ? Strings.EMPTY_ARRAY : new String[] { exclude }); + return this; } /** @@ -373,15 +382,17 @@ public class TopHitsAggregator extends MetricsAggregator { * An optional list of exclude (optionally wildcarded) * pattern to filter the returned _source */ - public void fetchSource(@Nullable String[] includes, @Nullable String[] excludes) { + public Factory fetchSource(@Nullable String[] includes, @Nullable String[] excludes) { fetchSourceContext = new FetchSourceContext(includes, excludes); + return this; } /** * Indicate how the _source should be fetched. */ - public void fetchSource(@Nullable FetchSourceContext fetchSourceContext) { + public Factory fetchSource(@Nullable FetchSourceContext fetchSourceContext) { this.fetchSourceContext = fetchSourceContext; + return this; } /** @@ -397,27 +408,30 @@ public class TopHitsAggregator extends MetricsAggregator { * the search request. If none are specified, the source of the document * will be return. */ - public void field(String name) { + public Factory field(String name) { if (fieldNames == null) { fieldNames = new ArrayList<>(); } fieldNames.add(name); + return this; } /** * Sets the fields to load and return as part of the search request. If * none are specified, the source of the document will be returned. */ - public void fields(List<String> fields) { + public Factory fields(List<String> fields) { this.fieldNames = fields; + return this; } /** * Sets no fields to be loaded, resulting in only id and type to be * returned per field. */ - public void noFields() { + public Factory noFields() { this.fieldNames = Collections.emptyList(); + return this; } /** @@ -431,22 +445,24 @@ public class TopHitsAggregator extends MetricsAggregator { * Adds a field to load from the field data cache and return as part of * the search request. */ - public void fieldDataField(String name) { + public Factory fieldDataField(String name) { if (fieldDataFields == null) { fieldDataFields = new ArrayList<>(); } fieldDataFields.add(name); + return this; } /** * Adds fields to load from the field data cache and return as part of * the search request. */ - public void fieldDataFields(List<String> names) { + public Factory fieldDataFields(List<String> names) { if (fieldDataFields == null) { fieldDataFields = new ArrayList<>(); } fieldDataFields.addAll(names); + return this; } /** @@ -464,8 +480,9 @@ public class TopHitsAggregator extends MetricsAggregator { * @param script * The script */ - public void scriptField(String name, Script script) { + public Factory scriptField(String name, Script script) { scriptField(name, script, false); + return this; } /** @@ -476,18 +493,20 @@ public class TopHitsAggregator extends MetricsAggregator { * @param script * The script */ - public void scriptField(String name, Script script, boolean ignoreFailure) { + public Factory scriptField(String name, Script script, boolean ignoreFailure) { if (scriptFields == null) { scriptFields = new ArrayList<>(); } scriptFields.add(new ScriptField(name, script, ignoreFailure)); + return this; } - public void scriptFields(List<ScriptField> scriptFields) { + public Factory scriptFields(List<ScriptField> scriptFields) { if (this.scriptFields == null) { this.scriptFields = new ArrayList<>(); } this.scriptFields.addAll(scriptFields); + return this; } /** @@ -501,8 +520,9 @@ public class TopHitsAggregator extends MetricsAggregator { * Should each {@link org.elasticsearch.search.SearchHit} be returned * with an explanation of the hit (ranking). */ - public void explain(boolean explain) { + public Factory explain(boolean explain) { this.explain = explain; + return this; } /** @@ -517,8 +537,9 @@ public class TopHitsAggregator extends MetricsAggregator { * Should each {@link org.elasticsearch.search.SearchHit} be returned * with a version associated with it. */ - public void version(boolean version) { + public Factory version(boolean version) { this.version = version; + return this; } /** @@ -533,8 +554,9 @@ public class TopHitsAggregator extends MetricsAggregator { * Applies when sorting, and controls if scores will be tracked as well. * Defaults to <tt>false</tt>. */ - public void trackScores(boolean trackScores) { + public Factory trackScores(boolean trackScores) { this.trackScores = trackScores; + return this; } /** @@ -607,7 +629,7 @@ public class TopHitsAggregator extends MetricsAggregator { } @Override - public AggregatorFactory subFactories(AggregatorFactories subFactories) { + public Factory subFactories(AggregatorFactories subFactories) { throw new AggregationInitializationException("Aggregator [" + name + "] of type [" + type + "] cannot accept sub-aggregations"); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsParser.java index 7cec733116..70c370bff6 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsParser.java @@ -28,6 +28,7 @@ import org.elasticsearch.index.query.QueryParseContext; import org.elasticsearch.script.Script; import org.elasticsearch.search.aggregations.Aggregator; import org.elasticsearch.search.aggregations.AggregatorFactory; +import org.elasticsearch.search.aggregations.metrics.sum.SumAggregator; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder.ScriptField; import org.elasticsearch.search.fetch.FieldsParseElement; @@ -73,7 +74,7 @@ public class TopHitsParser implements Aggregator.Parser { } @Override - public AggregatorFactory parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException { + public TopHitsAggregator.Factory parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException { TopHitsAggregator.Factory factory = new TopHitsAggregator.Factory(aggregationName); XContentParser.Token token; String currentFieldName = null; diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountAggregator.java index 8ea8b4362e..a9fda30223 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountAggregator.java @@ -112,7 +112,7 @@ public class ValueCountAggregator extends NumericMetricsAggregator.SingleValue { Releasables.close(counts); } - public static class Factory<VS extends ValuesSource> extends ValuesSourceAggregatorFactory.LeafOnly<VS> { + public static class Factory<VS extends ValuesSource> extends ValuesSourceAggregatorFactory.LeafOnly<VS, Factory<VS>> { public Factory(String name, ValuesSourceType valuesSourceType, ValueType valueType) { super(name, InternalValueCount.TYPE, valuesSourceType, valueType); @@ -133,7 +133,7 @@ public class ValueCountAggregator extends NumericMetricsAggregator.SingleValue { } @Override - protected ValuesSourceAggregatorFactory<VS> innerReadFrom(String name, ValuesSourceType valuesSourceType, + protected ValuesSourceAggregatorFactory<VS, Factory<VS>> innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) { return new ValueCountAggregator.Factory<VS>(name, valuesSourceType, targetValueType); } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountParser.java index d6a07117a3..9c006fa935 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountParser.java @@ -52,13 +52,14 @@ public class ValueCountParser extends AnyValuesSourceParser { } @Override - protected ValuesSourceAggregatorFactory<ValuesSource> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected ValuesSourceAggregatorFactory<ValuesSource, ValueCountAggregator.Factory<ValuesSource>> createFactory(String aggregationName, + ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions) { return new ValueCountAggregator.Factory<ValuesSource>(aggregationName, valuesSourceType, targetValueType); } @Override - public AggregatorFactory[] getFactoryPrototypes() { + public AggregatorFactory<?>[] getFactoryPrototypes() { return new AggregatorFactory[] { new ValueCountAggregator.Factory<ValuesSource>(null, null, null) }; } } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/BucketMetricsFactory.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/BucketMetricsFactory.java index a74c886cd1..73096ef47e 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/BucketMetricsFactory.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/BucketMetricsFactory.java @@ -34,7 +34,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; -public abstract class BucketMetricsFactory extends PipelineAggregatorFactory { +public abstract class BucketMetricsFactory<AF extends BucketMetricsFactory<AF>> extends PipelineAggregatorFactory { private String format = null; private GapPolicy gapPolicy = GapPolicy.SKIP; @@ -46,8 +46,9 @@ public abstract class BucketMetricsFactory extends PipelineAggregatorFactory { /** * Sets the format to use on the output of this aggregation. */ - public void format(String format) { + public AF format(String format) { this.format = format; + return (AF) this; } /** @@ -68,8 +69,9 @@ public abstract class BucketMetricsFactory extends PipelineAggregatorFactory { /** * Sets the gap policy to use for this aggregation. */ - public void gapPolicy(GapPolicy gapPolicy) { + public AF gapPolicy(GapPolicy gapPolicy) { this.gapPolicy = gapPolicy; + return (AF) this; } /** diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/avg/AvgBucketPipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/avg/AvgBucketPipelineAggregator.java index d8c33f8673..b7625b2471 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/avg/AvgBucketPipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/avg/AvgBucketPipelineAggregator.java @@ -89,7 +89,7 @@ public class AvgBucketPipelineAggregator extends BucketMetricsPipelineAggregator return new InternalSimpleValue(name(), avgValue, formatter, pipelineAggregators, metadata); } - public static class Factory extends BucketMetricsFactory { + public static class Factory extends BucketMetricsFactory<Factory> { public Factory(String name, String[] bucketsPaths) { super(name, TYPE.name(), bucketsPaths); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/max/MaxBucketPipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/max/MaxBucketPipelineAggregator.java index 2af8c111be..c8b1007b0d 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/max/MaxBucketPipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/max/MaxBucketPipelineAggregator.java @@ -96,7 +96,7 @@ public class MaxBucketPipelineAggregator extends BucketMetricsPipelineAggregator return new InternalBucketMetricValue(name(), keys, maxValue, formatter, Collections.emptyList(), metaData()); } - public static class Factory extends BucketMetricsFactory { + public static class Factory extends BucketMetricsFactory<Factory> { public Factory(String name, String[] bucketsPaths) { super(name, TYPE.name(), bucketsPaths); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/min/MinBucketPipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/min/MinBucketPipelineAggregator.java index 8f799dcba7..685a5f5850 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/min/MinBucketPipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/min/MinBucketPipelineAggregator.java @@ -97,7 +97,7 @@ public class MinBucketPipelineAggregator extends BucketMetricsPipelineAggregator return new InternalBucketMetricValue(name(), keys, minValue, formatter, Collections.emptyList(), metaData()); }; - public static class Factory extends BucketMetricsFactory { + public static class Factory extends BucketMetricsFactory<Factory> { public Factory(String name, String[] bucketsPaths) { super(name, TYPE.name(), bucketsPaths); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/percentile/PercentilesBucketPipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/percentile/PercentilesBucketPipelineAggregator.java index 6788b7fa7e..00918baf98 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/percentile/PercentilesBucketPipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/percentile/PercentilesBucketPipelineAggregator.java @@ -124,7 +124,7 @@ public class PercentilesBucketPipelineAggregator extends BucketMetricsPipelineAg out.writeDoubleArray(percents); } - public static class Factory extends BucketMetricsFactory { + public static class Factory extends BucketMetricsFactory<Factory> { private double[] percents = new double[] { 1.0, 5.0, 25.0, 50.0, 75.0, 95.0, 99.0 }; @@ -142,8 +142,9 @@ public class PercentilesBucketPipelineAggregator extends BucketMetricsPipelineAg /** * Set the percentages to calculate percentiles for in this aggregation */ - public void percents(double[] percents) { + public Factory percents(double[] percents) { this.percents = percents; + return this; } @Override diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/stats/StatsBucketPipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/stats/StatsBucketPipelineAggregator.java index cc25bc04eb..c51ac3e705 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/stats/StatsBucketPipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/stats/StatsBucketPipelineAggregator.java @@ -95,7 +95,7 @@ public class StatsBucketPipelineAggregator extends BucketMetricsPipelineAggregat return new InternalStatsBucket(name(), count, sum, min, max, formatter, pipelineAggregators, metadata); } - public static class Factory extends BucketMetricsFactory { + public static class Factory extends BucketMetricsFactory<Factory> { public Factory(String name, String[] bucketsPaths) { super(name, TYPE.name(), bucketsPaths); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/stats/extended/ExtendedStatsBucketPipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/stats/extended/ExtendedStatsBucketPipelineAggregator.java index 647c1be8ed..1adec45ce8 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/stats/extended/ExtendedStatsBucketPipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/stats/extended/ExtendedStatsBucketPipelineAggregator.java @@ -101,7 +101,7 @@ public class ExtendedStatsBucketPipelineAggregator extends BucketMetricsPipeline return new InternalExtendedStatsBucket(name(), count, sum, min, max, sumOfSqrs, sigma, formatter, pipelineAggregators, metadata); } - public static class Factory extends BucketMetricsFactory { + public static class Factory extends BucketMetricsFactory<Factory> { private double sigma = 2.0; @@ -113,8 +113,9 @@ public class ExtendedStatsBucketPipelineAggregator extends BucketMetricsPipeline * Set the value of sigma to use when calculating the standard deviation * bounds */ - public void sigma(double sigma) { + public Factory sigma(double sigma) { this.sigma = sigma; + return this; } /** diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/sum/SumBucketPipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/sum/SumBucketPipelineAggregator.java index 2e912e05ae..e8a6d90ef1 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/sum/SumBucketPipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketmetrics/sum/SumBucketPipelineAggregator.java @@ -85,7 +85,7 @@ public class SumBucketPipelineAggregator extends BucketMetricsPipelineAggregator return new InternalSimpleValue(name(), sum, formatter, pipelineAggregators, metadata); } - public static class Factory extends BucketMetricsFactory { + public static class Factory extends BucketMetricsFactory<Factory> { public Factory(String name, String[] bucketsPaths) { super(name, TYPE.name(), bucketsPaths); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketscript/BucketScriptPipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketscript/BucketScriptPipelineAggregator.java index 1f4cd48265..1d519ba6c6 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketscript/BucketScriptPipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/bucketscript/BucketScriptPipelineAggregator.java @@ -176,8 +176,9 @@ public class BucketScriptPipelineAggregator extends PipelineAggregator { /** * Sets the format to use on the output of this aggregation. */ - public void format(String format) { + public Factory format(String format) { this.format = format; + return this; } /** @@ -198,8 +199,9 @@ public class BucketScriptPipelineAggregator extends PipelineAggregator { /** * Sets the gap policy to use for this aggregation. */ - public void gapPolicy(GapPolicy gapPolicy) { + public Factory gapPolicy(GapPolicy gapPolicy) { this.gapPolicy = gapPolicy; + return this; } /** diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/cumulativesum/CumulativeSumPipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/cumulativesum/CumulativeSumPipelineAggregator.java index 8f5ee1a276..fd98c6e328 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/cumulativesum/CumulativeSumPipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/cumulativesum/CumulativeSumPipelineAggregator.java @@ -122,8 +122,9 @@ public class CumulativeSumPipelineAggregator extends PipelineAggregator { /** * Sets the format to use on the output of this aggregation. */ - public void format(String format) { + public Factory format(String format) { this.format = format; + return this; } /** diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/derivative/DerivativePipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/derivative/DerivativePipelineAggregator.java index 109ef5094f..e71a4f1726 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/derivative/DerivativePipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/derivative/DerivativePipelineAggregator.java @@ -167,16 +167,31 @@ public class DerivativePipelineAggregator extends PipelineAggregator { super(name, TYPE.name(), bucketsPaths); } - public void format(String format) { + public Factory format(String format) { this.format = format; + return this; } - public void gapPolicy(GapPolicy gapPolicy) { + public String format() { + return format; + } + + public Factory gapPolicy(GapPolicy gapPolicy) { this.gapPolicy = gapPolicy; + return this; + } + + public GapPolicy gapPolicy() { + return gapPolicy; } - public void units(String units) { + public Factory units(String units) { this.units = units; + return this; + } + + public String units() { + return units; } @Override diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/having/BucketSelectorPipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/having/BucketSelectorPipelineAggregator.java index b0f08c819c..b81e0dae7a 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/having/BucketSelectorPipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/having/BucketSelectorPipelineAggregator.java @@ -154,8 +154,9 @@ public class BucketSelectorPipelineAggregator extends PipelineAggregator { /** * Sets the gap policy to use for this aggregation. */ - public void gapPolicy(GapPolicy gapPolicy) { + public Factory gapPolicy(GapPolicy gapPolicy) { this.gapPolicy = gapPolicy; + return this; } /** diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgPipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgPipelineAggregator.java index 1faea425b2..c56ca26fb5 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgPipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/movavg/MovAvgPipelineAggregator.java @@ -294,8 +294,9 @@ public class MovAvgPipelineAggregator extends PipelineAggregator { /** * Sets the format to use on the output of this aggregation. */ - public void format(String format) { + public Factory format(String format) { this.format = format; + return this; } /** @@ -308,8 +309,9 @@ public class MovAvgPipelineAggregator extends PipelineAggregator { /** * Sets the GapPolicy to use on the output of this aggregation. */ - public void gapPolicy(GapPolicy gapPolicy) { + public Factory gapPolicy(GapPolicy gapPolicy) { this.gapPolicy = gapPolicy; + return this; } /** @@ -335,8 +337,9 @@ public class MovAvgPipelineAggregator extends PipelineAggregator { * @param window * Size of window */ - public void window(int window) { + public Factory window(int window) { this.window = window; + return this; } /** @@ -355,8 +358,9 @@ public class MovAvgPipelineAggregator extends PipelineAggregator { * @param model * A MovAvgModel which has been prepopulated with settings */ - public void model(MovAvgModel model) { + public Factory model(MovAvgModel model) { this.model = model; + return this; } /** @@ -376,8 +380,9 @@ public class MovAvgPipelineAggregator extends PipelineAggregator { * @param predict * Number of predictions to make */ - public void predict(int predict) { + public Factory predict(int predict) { this.predict = predict; + return this; } /** @@ -397,8 +402,9 @@ public class MovAvgPipelineAggregator extends PipelineAggregator { * @param minimize * If the model should be fit to the underlying data */ - public void minimize(boolean minimize) { + public Factory minimize(boolean minimize) { this.minimize = minimize; + return this; } /** diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/serialdiff/SerialDiffPipelineAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/serialdiff/SerialDiffPipelineAggregator.java index 7716c76821..db42812b4e 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/serialdiff/SerialDiffPipelineAggregator.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/pipeline/serialdiff/SerialDiffPipelineAggregator.java @@ -158,8 +158,9 @@ public class SerialDiffPipelineAggregator extends PipelineAggregator { /** * Sets the lag to use when calculating the serial difference. */ - public void lag(int lag) { + public Factory lag(int lag) { this.lag = lag; + return this; } /** @@ -172,8 +173,9 @@ public class SerialDiffPipelineAggregator extends PipelineAggregator { /** * Sets the format to use on the output of this aggregation. */ - public void format(String format) { + public Factory format(String format) { this.format = format; + return this; } /** @@ -186,8 +188,9 @@ public class SerialDiffPipelineAggregator extends PipelineAggregator { /** * Sets the GapPolicy to use on the output of this aggregation. */ - public void gapPolicy(GapPolicy gapPolicy) { + public Factory gapPolicy(GapPolicy gapPolicy) { this.gapPolicy = gapPolicy; + return this; } /** diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/support/AbstractValuesSourceParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/support/AbstractValuesSourceParser.java index 1f6442694c..12bae3be50 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/support/AbstractValuesSourceParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/support/AbstractValuesSourceParser.java @@ -27,7 +27,6 @@ import org.elasticsearch.index.query.QueryParseContext; import org.elasticsearch.script.Script; import org.elasticsearch.script.Script.ScriptField; import org.elasticsearch.search.aggregations.Aggregator; -import org.elasticsearch.search.aggregations.AggregatorFactory; import org.joda.time.DateTimeZone; import java.io.IOException; @@ -37,7 +36,8 @@ import java.util.Map; /** * */ -public abstract class AbstractValuesSourceParser<VS extends ValuesSource> implements Aggregator.Parser { +public abstract class AbstractValuesSourceParser<VS extends ValuesSource> + implements Aggregator.Parser { static final ParseField TIME_ZONE = new ParseField("time_zone"); public abstract static class AnyValuesSourceParser extends AbstractValuesSourceParser<ValuesSource> { @@ -84,7 +84,8 @@ public abstract class AbstractValuesSourceParser<VS extends ValuesSource> implem } @Override - public final AggregatorFactory parse(String aggregationName, XContentParser parser, QueryParseContext context) throws IOException { + public final ValuesSourceAggregatorFactory<VS, ?> parse(String aggregationName, XContentParser parser, QueryParseContext context) + throws IOException { String field = null; Script script = null; @@ -145,7 +146,7 @@ public abstract class AbstractValuesSourceParser<VS extends ValuesSource> implem } } - ValuesSourceAggregatorFactory<VS> factory = createFactory(aggregationName, this.valuesSourceType, this.targetValueType, + ValuesSourceAggregatorFactory<VS, ?> factory = createFactory(aggregationName, this.valuesSourceType, this.targetValueType, otherOptions); factory.field(field); factory.script(script); @@ -174,7 +175,7 @@ public abstract class AbstractValuesSourceParser<VS extends ValuesSource> implem * method * @return the created factory */ - protected abstract ValuesSourceAggregatorFactory<VS> createFactory(String aggregationName, ValuesSourceType valuesSourceType, + protected abstract ValuesSourceAggregatorFactory<VS, ?> createFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, Map<ParseField, Object> otherOptions); /** diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregatorFactory.java b/core/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregatorFactory.java index 44f4fffd0b..68b33cc53c 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregatorFactory.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/support/ValuesSourceAggregatorFactory.java @@ -53,9 +53,11 @@ import java.util.Objects; /** * */ -public abstract class ValuesSourceAggregatorFactory<VS extends ValuesSource> extends AggregatorFactory { +public abstract class ValuesSourceAggregatorFactory<VS extends ValuesSource, AF extends ValuesSourceAggregatorFactory<VS, AF>> + extends AggregatorFactory<AF> { - public static abstract class LeafOnly<VS extends ValuesSource> extends ValuesSourceAggregatorFactory<VS> { + public static abstract class LeafOnly<VS extends ValuesSource, AF extends ValuesSourceAggregatorFactory<VS, AF>> + extends ValuesSourceAggregatorFactory<VS, AF> { protected LeafOnly(String name, Type type, ValuesSourceParser.Input<VS> input) { super(name, type, input); @@ -66,7 +68,7 @@ public abstract class ValuesSourceAggregatorFactory<VS extends ValuesSource> ext } @Override - public AggregatorFactory subFactories(AggregatorFactories subFactories) { + public AF subFactories(AggregatorFactories subFactories) { throw new AggregationInitializationException("Aggregator [" + name + "] of type [" + type + "] cannot accept sub-aggregations"); } } @@ -109,8 +111,9 @@ public abstract class ValuesSourceAggregatorFactory<VS extends ValuesSource> ext /** * Sets the field to use for this aggregation. */ - public void field(String field) { + public AF field(String field) { this.field = field; + return (AF) this; } /** @@ -123,8 +126,9 @@ public abstract class ValuesSourceAggregatorFactory<VS extends ValuesSource> ext /** * Sets the script to use for this aggregation. */ - public void script(Script script) { + public AF script(Script script) { this.script = script; + return (AF) this; } /** @@ -137,8 +141,9 @@ public abstract class ValuesSourceAggregatorFactory<VS extends ValuesSource> ext /** * Sets the {@link ValueType} for the value produced by this aggregation */ - public void valueType(ValueType valueType) { + public AF valueType(ValueType valueType) { this.valueType = valueType; + return (AF) this; } /** @@ -151,8 +156,9 @@ public abstract class ValuesSourceAggregatorFactory<VS extends ValuesSource> ext /** * Sets the format to use for the output of the aggregation. */ - public void format(String format) { + public AF format(String format) { this.format = format; + return (AF) this; } /** @@ -166,8 +172,9 @@ public abstract class ValuesSourceAggregatorFactory<VS extends ValuesSource> ext * Sets the value to use when the aggregation finds a missing value in a * document */ - public void missing(Object missing) { + public AF missing(Object missing) { this.missing = missing; + return (AF) this; } /** @@ -181,8 +188,9 @@ public abstract class ValuesSourceAggregatorFactory<VS extends ValuesSource> ext /** * Sets the time zone to use for this aggregation */ - public void timeZone(DateTimeZone timeZone) { + public AF timeZone(DateTimeZone timeZone) { this.timeZone = timeZone; + return (AF) this; } /** @@ -376,13 +384,13 @@ public abstract class ValuesSourceAggregatorFactory<VS extends ValuesSource> ext } @Override - protected final ValuesSourceAggregatorFactory<VS> doReadFrom(String name, StreamInput in) throws IOException { + protected final ValuesSourceAggregatorFactory<VS, AF> doReadFrom(String name, StreamInput in) throws IOException { ValuesSourceType valuesSourceType = ValuesSourceType.ANY.readFrom(in); ValueType targetValueType = null; if (in.readBoolean()) { targetValueType = ValueType.STRING.readFrom(in); } - ValuesSourceAggregatorFactory<VS> factory = innerReadFrom(name, valuesSourceType, targetValueType, in); + ValuesSourceAggregatorFactory<VS, AF> factory = innerReadFrom(name, valuesSourceType, targetValueType, in); factory.field = in.readOptionalString(); if (in.readBoolean()) { factory.script = Script.readScript(in); @@ -399,7 +407,7 @@ public abstract class ValuesSourceAggregatorFactory<VS extends ValuesSource> ext } // NORELEASE make this abstract when agg refactor complete - protected ValuesSourceAggregatorFactory<VS> innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, + protected ValuesSourceAggregatorFactory<VS, AF> innerReadFrom(String name, ValuesSourceType valuesSourceType, ValueType targetValueType, StreamInput in) throws IOException { return null; } @@ -447,7 +455,7 @@ public abstract class ValuesSourceAggregatorFactory<VS extends ValuesSource> ext @Override protected final boolean doEquals(Object obj) { - ValuesSourceAggregatorFactory<?> other = (ValuesSourceAggregatorFactory<?>) obj; + ValuesSourceAggregatorFactory<?, ?> other = (ValuesSourceAggregatorFactory<?, ?>) obj; if (!Objects.equals(field, other.field)) return false; if (!Objects.equals(format, other.format)) diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/metrics/AbstractNumericMetricTestCase.java b/core/src/test/java/org/elasticsearch/search/aggregations/metrics/AbstractNumericMetricTestCase.java index 24bfc40e7f..f51a1a85d0 100644 --- a/core/src/test/java/org/elasticsearch/search/aggregations/metrics/AbstractNumericMetricTestCase.java +++ b/core/src/test/java/org/elasticsearch/search/aggregations/metrics/AbstractNumericMetricTestCase.java @@ -24,8 +24,8 @@ import org.elasticsearch.search.aggregations.BaseAggregationTestCase; import org.elasticsearch.search.aggregations.support.ValuesSource; import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; -public abstract class AbstractNumericMetricTestCase<AF extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric>> extends - BaseAggregationTestCase<AF> { +public abstract class AbstractNumericMetricTestCase<AF extends ValuesSourceAggregatorFactory.LeafOnly<ValuesSource.Numeric, AF>> + extends BaseAggregationTestCase<AF> { @Override protected final AF createTestAggregatorFactory() { diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/metrics/FilterTests.java b/core/src/test/java/org/elasticsearch/search/aggregations/metrics/FilterTests.java index 3362c1cc6c..1072cdb73b 100644 --- a/core/src/test/java/org/elasticsearch/search/aggregations/metrics/FilterTests.java +++ b/core/src/test/java/org/elasticsearch/search/aggregations/metrics/FilterTests.java @@ -28,11 +28,11 @@ public class FilterTests extends BaseAggregationTestCase<FilterAggregator.Factor @Override protected Factory createTestAggregatorFactory() { - Factory factory = new Factory(randomAsciiOfLengthBetween(1, 20)); + Factory factory = new Factory(randomAsciiOfLengthBetween(1, 20), + QueryBuilders.termQuery(randomAsciiOfLengthBetween(5, 20), randomAsciiOfLengthBetween(5, 20))); // NORELEASE make RandomQueryBuilder work outside of the // AbstractQueryTestCase // builder.query(RandomQueryBuilder.createQuery(getRandom())); - factory.filter(QueryBuilders.termQuery(randomAsciiOfLengthBetween(5, 20), randomAsciiOfLengthBetween(5, 20))); return factory; } |