package org.oddjob.schedules;
import java.io.Serializable;
import java.util.Date;
import org.oddjob.arooa.utils.DateHelper;
/**
* A simple {@link ScheduleResult}
*
* @author rob
*
*/
public class SimpleScheduleResult implements ScheduleResult, Serializable {
private static final long serialVersionUID = 2011091500L;
private final Interval interval;
private final Date useNext;
public SimpleScheduleResult(Interval interval) {
this(interval, interval.getToDate());
}
public SimpleScheduleResult(Interval interval, Date useNext) {
if (interval == null) {
throw new NullPointerException("No Interval.");
}
this.interval = interval;
this.useNext = useNext;
}
@Override
public Date getFromDate() {
return interval.getFromDate();
}
@Override
public Date getToDate() {
return interval.getToDate();
}
@Override
public Date getUseNext() {
return useNext;
}
/**
* Crude implementation of hashCode, so intervals could
* be stored in HashSets.
*
*/
public int hashCode() {
return interval.hashCode();
}
/**
* Test if two intervals are equivalent.
* <p>
* Intervals are equivalent if there start and end times
* are the same.
*
* @param other The interval to test against.
* @return true if they are equal.
*/
public boolean equals(Object other) {
if (other == null) {
return false;
}
if (!(other instanceof ScheduleResult)) {
return other.equals(this);
}
ScheduleResult result = (ScheduleResult) other;
if (useNext == null) {
if (result.getUseNext() != null) {
return false;
}
}
else {
if (!useNext.equals(result.getUseNext())) {
return false;
}
}
return interval.getToDate().equals(result.getToDate())
&& interval.getFromDate().equals(result.getFromDate());
}
@Override
public String toString() {
String useNextText = "";
if (!interval.getToDate().equals(useNext)) {
useNextText = ", use next " +
DateHelper.formatDateTimeInteligently(useNext);
}
return interval.toString() + useNextText;
}
}