Remove PROTOTYPE from ExtendedBounds

and make it implement Writeable because it is Writeable.

Relates to #17085
This commit is contained in:
Nik Everett 2016-04-18 14:06:50 -04:00
parent 65f6f6bc8d
commit 860559e543
4 changed files with 41 additions and 47 deletions

View File

@ -57,7 +57,7 @@ public abstract class AbstractHistogramBuilder<AB extends AbstractHistogramBuild
keyed = in.readBoolean(); keyed = in.readBoolean();
minDocCount = in.readVLong(); minDocCount = in.readVLong();
if (in.readBoolean()) { if (in.readBoolean()) {
extendedBounds = ExtendedBounds.readFrom(in); extendedBounds = new ExtendedBounds(in);
} }
} }

View File

@ -24,35 +24,31 @@ import org.elasticsearch.common.ParseFieldMatcher;
import org.elasticsearch.common.ParsingException; import org.elasticsearch.common.ParsingException;
import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.io.stream.Writeable;
import org.elasticsearch.common.rounding.Rounding; import org.elasticsearch.common.rounding.Rounding;
import org.elasticsearch.common.xcontent.ToXContent; import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.search.SearchParseException;
import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.DocValueFormat;
import org.elasticsearch.search.SearchParseException;
import org.elasticsearch.search.internal.SearchContext; import org.elasticsearch.search.internal.SearchContext;
import java.io.IOException; import java.io.IOException;
import java.util.Objects; import java.util.Objects;
/** public class ExtendedBounds implements ToXContent, Writeable<ExtendedBounds> {
*
*/
public class ExtendedBounds implements ToXContent {
static final ParseField EXTENDED_BOUNDS_FIELD = new ParseField("extended_bounds"); static final ParseField EXTENDED_BOUNDS_FIELD = new ParseField("extended_bounds");
static final ParseField MIN_FIELD = new ParseField("min"); static final ParseField MIN_FIELD = new ParseField("min");
static final ParseField MAX_FIELD = new ParseField("max"); static final ParseField MAX_FIELD = new ParseField("max");
private static final ExtendedBounds PROTOTYPE = new ExtendedBounds();
Long min; Long min;
Long max; Long max;
String minAsStr; String minAsStr;
String maxAsStr; String maxAsStr;
ExtendedBounds() {} //for serialization ExtendedBounds() {} //for parsing
public ExtendedBounds(Long min, Long max) { public ExtendedBounds(Long min, Long max) {
this.min = min; this.min = min;
@ -64,6 +60,39 @@ public class ExtendedBounds implements ToXContent {
this.maxAsStr = maxAsStr; this.maxAsStr = maxAsStr;
} }
/**
* Read from a stream.
*/
public ExtendedBounds(StreamInput in) throws IOException {
if (in.readBoolean()) {
min = in.readLong();
}
if (in.readBoolean()) {
max = in.readLong();
}
minAsStr = in.readOptionalString();
maxAsStr = in.readOptionalString();
}
@Override
public void writeTo(StreamOutput out) throws IOException {
if (min != null) {
out.writeBoolean(true);
out.writeLong(min);
} else {
out.writeBoolean(false);
}
if (max != null) {
out.writeBoolean(true);
out.writeLong(max);
} else {
out.writeBoolean(false);
}
out.writeOptionalString(minAsStr);
out.writeOptionalString(maxAsStr);
}
void processAndValidate(String aggName, SearchContext context, DocValueFormat format) { void processAndValidate(String aggName, SearchContext context, DocValueFormat format) {
assert format != null; assert format != null;
if (minAsStr != null) { if (minAsStr != null) {
@ -83,37 +112,7 @@ public class ExtendedBounds implements ToXContent {
return new ExtendedBounds(min != null ? rounding.round(min) : null, max != null ? rounding.round(max) : null); return new ExtendedBounds(min != null ? rounding.round(min) : null, max != null ? rounding.round(max) : null);
} }
void writeTo(StreamOutput out) throws IOException { public static ExtendedBounds fromXContent(XContentParser parser, ParseFieldMatcher parseFieldMatcher, String aggregationName)
if (min != null) {
out.writeBoolean(true);
out.writeLong(min);
} else {
out.writeBoolean(false);
}
if (max != null) {
out.writeBoolean(true);
out.writeLong(max);
} else {
out.writeBoolean(false);
}
out.writeOptionalString(minAsStr);
out.writeOptionalString(maxAsStr);
}
static ExtendedBounds readFrom(StreamInput in) throws IOException {
ExtendedBounds bounds = new ExtendedBounds();
if (in.readBoolean()) {
bounds.min = in.readLong();
}
if (in.readBoolean()) {
bounds.max = in.readLong();
}
bounds.minAsStr = in.readOptionalString();
bounds.maxAsStr = in.readOptionalString();
return bounds;
}
public ExtendedBounds fromXContent(XContentParser parser, ParseFieldMatcher parseFieldMatcher, String aggregationName)
throws IOException { throws IOException {
XContentParser.Token token = null; XContentParser.Token token = null;
String currentFieldName = null; String currentFieldName = null;
@ -178,9 +177,4 @@ public class ExtendedBounds implements ToXContent {
return Objects.equals(min, other.min) return Objects.equals(min, other.min)
&& Objects.equals(min, other.min); && Objects.equals(min, other.min);
} }
public static ExtendedBounds parse(XContentParser parser, ParseFieldMatcher parseFieldMatcher, String aggregationName)
throws IOException {
return PROTOTYPE.fromXContent(parser, parseFieldMatcher, aggregationName);
}
} }

View File

@ -127,7 +127,7 @@ public class HistogramParser extends NumericValuesSourceParser {
otherOptions.put(HistogramAggregator.ORDER_FIELD, order); otherOptions.put(HistogramAggregator.ORDER_FIELD, order);
return true; return true;
} else if (parseFieldMatcher.match(currentFieldName, ExtendedBounds.EXTENDED_BOUNDS_FIELD)) { } else if (parseFieldMatcher.match(currentFieldName, ExtendedBounds.EXTENDED_BOUNDS_FIELD)) {
ExtendedBounds extendedBounds = ExtendedBounds.parse(parser, parseFieldMatcher, aggregationName); ExtendedBounds extendedBounds = ExtendedBounds.fromXContent(parser, parseFieldMatcher, aggregationName);
otherOptions.put(ExtendedBounds.EXTENDED_BOUNDS_FIELD, extendedBounds); otherOptions.put(ExtendedBounds.EXTENDED_BOUNDS_FIELD, extendedBounds);
return true; return true;
} else { } else {

View File

@ -211,7 +211,7 @@ public class InternalHistogram<B extends InternalHistogram.Bucket> extends Inter
Rounding rounding = Rounding.Streams.read(in); Rounding rounding = Rounding.Streams.read(in);
InternalAggregations aggs = InternalAggregations.readAggregations(in); InternalAggregations aggs = InternalAggregations.readAggregations(in);
if (in.readBoolean()) { if (in.readBoolean()) {
return new EmptyBucketInfo(rounding, aggs, ExtendedBounds.readFrom(in)); return new EmptyBucketInfo(rounding, aggs, new ExtendedBounds(in));
} }
return new EmptyBucketInfo(rounding, aggs); return new EmptyBucketInfo(rounding, aggs);
} }