package glug.model; import java.util.Comparator; import java.util.Map; import com.madgag.interval.Interval; import com.madgag.interval.StartThenEndComparator; import glug.model.time.LogInstant; import glug.model.time.LogInterval; public class SignificantInterval implements Comparable<SignificantInterval> { private final static Comparator<Interval<LogInstant>> intervalComparator = StartThenEndComparator.<LogInstant>instance(); private final Interval<LogInstant> logInterval; private final Map<String,?> intervalOccupier; public SignificantInterval(Map<String,?> intervalOccupier, Interval<LogInstant> logInterval) { // if (logInterval.getStart().equals(logInterval.getEnd())) { // throw new IllegalArgumentException("It took at least one log line, didn't it!?"); // } this.logInterval = logInterval; this.intervalOccupier = intervalOccupier; } @Override public int compareTo(SignificantInterval otherSignificantInterval) { int logIntervalCompare = intervalComparator.compare(logInterval, otherSignificantInterval.logInterval); if (logIntervalCompare!=0) { return logIntervalCompare; } return this.getClass().hashCode() - otherSignificantInterval.getClass().hashCode(); // TODO Welcome to hackarama } public Map<String,?> getOccupier() { return intervalOccupier; } public Interval<LogInstant> getLogInterval() { return logInterval; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((intervalOccupier == null) ? 0 : intervalOccupier.hashCode()); result = prime * result + ((logInterval == null) ? 0 : logInterval.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; SignificantInterval other = (SignificantInterval) obj; if (intervalOccupier == null) { if (other.intervalOccupier != null) return false; } else if (!intervalOccupier.equals(other.intervalOccupier)) return false; if (logInterval == null) { if (other.logInterval != null) return false; } else if (!logInterval.equals(other.logInterval)) return false; return true; } @Override public String toString() { return logInterval+":"+intervalOccupier; } public Object getIntervalTypeDescriptor() { return intervalOccupier.get("type"); } }