package com.linkedin.thirdeye.api; import java.io.Serializable; import java.sql.Timestamp; public class TimeRange implements Comparable<TimeRange>, Serializable { private static final long serialVersionUID = -403250971215465050L; private Long start; private Long end; public TimeRange() { } public TimeRange(Long start, Long end) { this.start = start; this.end = end; if (start > end) { throw new IllegalArgumentException( "start must be less than or equal to end: start=" + start + ", end=" + end); } } public Long getStart() { return start; } public Long getEnd() { return end; } public boolean contains(Long time) { return time >= start && time <= end; } public boolean contains(TimeRange timeRange) { return start <= timeRange.getStart() && end >= timeRange.getEnd(); } public boolean isDisjoint(TimeRange timeRange) { return end < timeRange.getStart() || start > timeRange.getEnd(); } public int totalBuckets() { return (int) (end - start + 1); } @Override public boolean equals(Object o) { if (!(o instanceof TimeRange)) { return false; } TimeRange tr = (TimeRange) o; return start.equals(tr.getStart()) && end.equals(tr.getEnd()); } @Override public int hashCode() { return (int) (start + 13 * end); } @Override public int compareTo(TimeRange timeRange) { return (int) (start - timeRange.getStart()); } @Override public String toString() { return "[" + start + " TO " + end + "]" + "[" + new Timestamp(start) + " TO " + new Timestamp(end) + "]"; } }