From 33e49d47dc73fb7c1f9ba8c5bfb49a3dfcab8ca1 Mon Sep 17 00:00:00 2001 From: Luca Cavanna Date: Tue, 11 Dec 2018 20:19:01 +0100 Subject: [PATCH] Add default methods to DocValueFormat (#36480) The different `DocValueFormat` implementors throw `UnsupportedOperationException` for methods that they don't support. That is perfectly fine, and quite common as not all implementors support all of the possible formats. This makes it hard though to trace back which implementors support which formats as they all implement the same methods. This commit introduces default methods in the `DocValueFormat` interface so that all methods throw `UnsupportedOperationException` by default. This way implementors can override only the methods that they specifically support. --- .../ICUCollationKeywordFieldMapper.java | 23 +--- .../elasticsearch/search/DocValueFormat.java | 128 ++++-------------- 2 files changed, 26 insertions(+), 125 deletions(-) diff --git a/plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java b/plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java index 42a9d0b8fb234..7e30922de9a8c 100644 --- a/plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java +++ b/plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java @@ -57,7 +57,6 @@ import java.util.Map; import java.util.Objects; import java.util.function.BiFunction; -import java.util.function.LongSupplier; public class ICUCollationKeywordFieldMapper extends FieldMapper { @@ -197,17 +196,7 @@ public String getWriteableName() { } @Override - public void writeTo(StreamOutput out) throws IOException { - } - - @Override - public String format(long value) { - throw new UnsupportedOperationException(); - } - - @Override - public String format(double value) { - throw new UnsupportedOperationException(); + public void writeTo(StreamOutput out) { } @Override @@ -218,16 +207,6 @@ public String format(BytesRef value) { return new String(encoded, 0, encodedLength); } - @Override - public long parseLong(String value, boolean roundUp, LongSupplier now) { - throw new UnsupportedOperationException(); - } - - @Override - public double parseDouble(String value, boolean roundUp, LongSupplier now) { - throw new UnsupportedOperationException(); - } - @Override public BytesRef parseBytesRef(String value) { char[] encoded = value.toCharArray(); diff --git a/server/src/main/java/org/elasticsearch/search/DocValueFormat.java b/server/src/main/java/org/elasticsearch/search/DocValueFormat.java index cb04e4edc9aac..e7f2ae71b155f 100644 --- a/server/src/main/java/org/elasticsearch/search/DocValueFormat.java +++ b/server/src/main/java/org/elasticsearch/search/DocValueFormat.java @@ -51,29 +51,41 @@ public interface DocValueFormat extends NamedWriteable { /** Format a long value. This is used by terms and histogram aggregations * to format keys for fields that use longs as a doc value representation * such as the {@code long} and {@code date} fields. */ - Object format(long value); + default Object format(long value) { + throw new UnsupportedOperationException(); + } /** Format a double value. This is used by terms and stats aggregations * to format keys for fields that use numbers as a doc value representation * such as the {@code long}, {@code double} or {@code date} fields. */ - Object format(double value); + default Object format(double value) { + throw new UnsupportedOperationException(); + } /** Format a binary value. This is used by terms aggregations to format * keys for fields that use binary doc value representations such as the * {@code keyword} and {@code ip} fields. */ - Object format(BytesRef value); + default Object format(BytesRef value) { + throw new UnsupportedOperationException(); + } /** Parse a value that was formatted with {@link #format(long)} back to the * original long value. */ - long parseLong(String value, boolean roundUp, LongSupplier now); + default long parseLong(String value, boolean roundUp, LongSupplier now) { + throw new UnsupportedOperationException(); + } /** Parse a value that was formatted with {@link #format(double)} back to * the original double value. */ - double parseDouble(String value, boolean roundUp, LongSupplier now); + default double parseDouble(String value, boolean roundUp, LongSupplier now) { + throw new UnsupportedOperationException(); + } /** Parse a value that was formatted with {@link #format(BytesRef)} back * to the original BytesRef. */ - BytesRef parseBytesRef(String value); + default BytesRef parseBytesRef(String value) { + throw new UnsupportedOperationException(); + } DocValueFormat RAW = new DocValueFormat() { @@ -83,7 +95,7 @@ public String getWriteableName() { } @Override - public void writeTo(StreamOutput out) throws IOException { + public void writeTo(StreamOutput out) { } @Override @@ -131,17 +143,7 @@ public String getWriteableName() { } @Override - public void writeTo(StreamOutput out) throws IOException { - } - - @Override - public Object format(long value) { - throw new UnsupportedOperationException(); - } - - @Override - public Object format(double value) { - throw new UnsupportedOperationException(); + public void writeTo(StreamOutput out) { } @Override @@ -151,16 +153,6 @@ public String format(BytesRef value) { .encodeToString(Arrays.copyOfRange(value.bytes, value.offset, value.offset + value.length)); } - @Override - public long parseLong(String value, boolean roundUp, LongSupplier now) { - throw new UnsupportedOperationException(); - } - - @Override - public double parseDouble(String value, boolean roundUp, LongSupplier now) { - throw new UnsupportedOperationException(); - } - @Override public BytesRef parseBytesRef(String value) { return new BytesRef(Base64.getDecoder().decode(value)); @@ -209,11 +201,6 @@ public String format(double value) { return format((long) value); } - @Override - public String format(BytesRef value) { - throw new UnsupportedOperationException(); - } - @Override public long parseLong(String value, boolean roundUp, LongSupplier now) { return parser.parse(value, now, roundUp, DateUtils.dateTimeZoneToZoneId(timeZone)); @@ -223,11 +210,6 @@ public long parseLong(String value, boolean roundUp, LongSupplier now) { public double parseDouble(String value, boolean roundUp, LongSupplier now) { return parseLong(value, roundUp, now); } - - @Override - public BytesRef parseBytesRef(String value) { - throw new UnsupportedOperationException(); - } } DocValueFormat GEOHASH = new DocValueFormat() { @@ -238,7 +220,7 @@ public String getWriteableName() { } @Override - public void writeTo(StreamOutput out) throws IOException { + public void writeTo(StreamOutput out) { } @Override @@ -250,26 +232,6 @@ public String format(long value) { public String format(double value) { return format((long) value); } - - @Override - public String format(BytesRef value) { - throw new UnsupportedOperationException(); - } - - @Override - public long parseLong(String value, boolean roundUp, LongSupplier now) { - throw new UnsupportedOperationException(); - } - - @Override - public double parseDouble(String value, boolean roundUp, LongSupplier now) { - throw new UnsupportedOperationException(); - } - - @Override - public BytesRef parseBytesRef(String value) { - throw new UnsupportedOperationException(); - } }; DocValueFormat BOOLEAN = new DocValueFormat() { @@ -280,22 +242,17 @@ public String getWriteableName() { } @Override - public void writeTo(StreamOutput out) throws IOException { + public void writeTo(StreamOutput out) { } @Override public Boolean format(long value) { - return java.lang.Boolean.valueOf(value != 0); + return value != 0; } @Override public Boolean format(double value) { - return java.lang.Boolean.valueOf(value != 0); - } - - @Override - public String format(BytesRef value) { - throw new UnsupportedOperationException(); + return value != 0; } @Override @@ -313,11 +270,6 @@ public long parseLong(String value, boolean roundUp, LongSupplier now) { public double parseDouble(String value, boolean roundUp, LongSupplier now) { return parseLong(value, roundUp, now); } - - @Override - public BytesRef parseBytesRef(String value) { - throw new UnsupportedOperationException(); - } }; DocValueFormat IP = new DocValueFormat() { @@ -328,17 +280,7 @@ public String getWriteableName() { } @Override - public void writeTo(StreamOutput out) throws IOException { - } - - @Override - public String format(long value) { - throw new UnsupportedOperationException(); - } - - @Override - public String format(double value) { - throw new UnsupportedOperationException(); + public void writeTo(StreamOutput out) { } @Override @@ -348,16 +290,6 @@ public String format(BytesRef value) { return NetworkAddress.format(inet); } - @Override - public long parseLong(String value, boolean roundUp, LongSupplier now) { - throw new UnsupportedOperationException(); - } - - @Override - public double parseDouble(String value, boolean roundUp, LongSupplier now) { - throw new UnsupportedOperationException(); - } - @Override public BytesRef parseBytesRef(String value) { return new BytesRef(InetAddressPoint.encode(InetAddresses.forString(value))); @@ -401,11 +333,6 @@ public String format(double value) { return format.format(value); } - @Override - public String format(BytesRef value) { - throw new UnsupportedOperationException(); - } - @Override public long parseLong(String value, boolean roundUp, LongSupplier now) { Number n; @@ -438,11 +365,6 @@ public double parseDouble(String value, boolean roundUp, LongSupplier now) { return n.doubleValue(); } - @Override - public BytesRef parseBytesRef(String value) { - throw new UnsupportedOperationException(); - } - @Override public boolean equals(Object o) { if (this == o) {