package com.ibm.nmon.interval; /** * Defines a time interval with a given start and end value, measured in milliseconds. */ public final class Interval implements Comparable<Interval> { /** * Interval to indicate all available data. The start and end values <em>should</em> not be used * directly. Instead, this interval should be used as a marker to indicate that the start and * end values should be looked up elsewhere. */ public static final Interval DEFAULT = new Interval(0, Long.MAX_VALUE); private String name; private final long start; private final long end; public Interval(long start, long end) { this.name = ""; this.start = start; this.end = end; validate(); } private void validate() { if (start >= end) { throw new IllegalArgumentException("end" + " must be greater than " + "start"); } } public String getName() { return name; } public void setName(String name) { if (name == null) { this.name = ""; } else { this.name = name; } } public long getStart() { return start; } public long getEnd() { return end; } public long getDuration() { return end - start; } @Override public boolean equals(Object obj) { if (obj == this) { return true; } else if (obj instanceof Interval) { Interval i = (Interval) obj; return (this.start == i.start) && (this.end == i.end); } else { return false; } } @Override public int hashCode() { return (int) (start ^ (start >>> 32)) * 31 + (int) (end ^ (end >>> 32)); } @Override public int compareTo(Interval i) { if (this.start == i.start) { if (this.end == i.end) { return 0; } else { return this.end > i.end ? 1 : -1; } } else { return this.start > i.start ? 1 : -1; } } }