diff --git a/server/src/main/java/org/elasticsearch/common/rounding/Rounding.java b/server/src/main/java/org/elasticsearch/common/rounding/Rounding.java index 808e59ef02a..93be4cc65e2 100644 --- a/server/src/main/java/org/elasticsearch/common/rounding/Rounding.java +++ b/server/src/main/java/org/elasticsearch/common/rounding/Rounding.java @@ -21,7 +21,7 @@ package org.elasticsearch.common.rounding; import org.elasticsearch.ElasticsearchException; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; -import org.elasticsearch.common.io.stream.Streamable; +import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.common.unit.TimeValue; import org.joda.time.DateTimeField; import org.joda.time.DateTimeZone; @@ -33,7 +33,7 @@ import java.util.Objects; /** * A strategy for rounding long values. */ -public abstract class Rounding implements Streamable { +public abstract class Rounding implements Writeable { public abstract byte id(); @@ -107,13 +107,10 @@ public abstract class Rounding implements Streamable { static final byte ID = 1; - private DateTimeUnit unit; - private DateTimeField field; - private DateTimeZone timeZone; - private boolean unitRoundsToMidnight; - - TimeUnitRounding() { // for serialization - } + private final DateTimeUnit unit; + private final DateTimeField field; + private final DateTimeZone timeZone; + private final boolean unitRoundsToMidnight; TimeUnitRounding(DateTimeUnit unit, DateTimeZone timeZone) { this.unit = unit; @@ -122,6 +119,13 @@ public abstract class Rounding implements Streamable { this.timeZone = timeZone; } + TimeUnitRounding(StreamInput in) throws IOException { + unit = DateTimeUnit.resolve(in.readByte()); + timeZone = DateTimeZone.forID(in.readString()); + field = unit.field(timeZone); + unitRoundsToMidnight = field.getDurationField().getUnitMillis() > 60L * 60L * 1000L; + } + @Override public byte id() { return ID; @@ -237,14 +241,6 @@ public abstract class Rounding implements Streamable { return next; } - @Override - public void readFrom(StreamInput in) throws IOException { - unit = DateTimeUnit.resolve(in.readByte()); - timeZone = DateTimeZone.forID(in.readString()); - field = unit.field(timeZone); - unitRoundsToMidnight = field.getDurationField().getUnitMillis() > 60L * 60L * 1000L; - } - @Override public void writeTo(StreamOutput out) throws IOException { out.writeByte(unit.id()); @@ -278,11 +274,8 @@ public abstract class Rounding implements Streamable { static final byte ID = 2; - private long interval; - private DateTimeZone timeZone; - - TimeIntervalRounding() { // for serialization - } + private final long interval; + private final DateTimeZone timeZone; TimeIntervalRounding(long interval, DateTimeZone timeZone) { if (interval < 1) @@ -291,6 +284,11 @@ public abstract class Rounding implements Streamable { this.timeZone = timeZone; } + TimeIntervalRounding(StreamInput in) throws IOException { + interval = in.readVLong(); + timeZone = DateTimeZone.forID(in.readString()); + } + @Override public byte id() { return ID; @@ -374,12 +372,6 @@ public abstract class Rounding implements Streamable { return timeZone.convertLocalToUTC(next, false); } - @Override - public void readFrom(StreamInput in) throws IOException { - interval = in.readVLong(); - timeZone = DateTimeZone.forID(in.readString()); - } - @Override public void writeTo(StreamOutput out) throws IOException { out.writeVLong(interval); @@ -415,11 +407,10 @@ public abstract class Rounding implements Streamable { Rounding rounding = null; byte id = in.readByte(); switch (id) { - case TimeUnitRounding.ID: rounding = new TimeUnitRounding(); break; - case TimeIntervalRounding.ID: rounding = new TimeIntervalRounding(); break; + case TimeUnitRounding.ID: rounding = new TimeUnitRounding(in); break; + case TimeIntervalRounding.ID: rounding = new TimeIntervalRounding(in); break; default: throw new ElasticsearchException("unknown rounding id [" + id + "]"); } - rounding.readFrom(in); return rounding; }