// **********************************************************************
//
// <copyright>
//
// BBN Technologies, a Verizon Company
// 10 Moulton Street
// Cambridge, MA 02138
// (617) 873-8000
//
// Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/time/TimeBounds.java,v $
// $RCSfile: TimeBounds.java,v $
// $Revision: 1.1 $
// $Date: 2007/09/25 17:30:35 $
// $Author: dietrick $
//
// **********************************************************************
package com.bbn.openmap.time;
import java.io.Serializable;
import com.bbn.openmap.util.HashCodeUtil;
/**
* A class for holding a range of times.
*/
public class TimeBounds
implements Serializable {
protected long startTime;
protected long endTime;
/**
* Creates a TimeBounds object ready for times to be added to it. The
* starting time is set to Long.MAX_VALUE, the end time is set to
* Long.MIN_VALUE, so any time addition will cause start and end times to be
* replaced.
*/
public TimeBounds() {
setTimes(Long.MAX_VALUE, Long.MIN_VALUE);
}
public TimeBounds(long start, long end) {
setTimes(start, end);
}
public void setTimes(long start, long end) {
startTime = start;
endTime = end;
}
public long getStartTime() {
return startTime;
}
public long getEndTime() {
return endTime;
}
public void reset() {
startTime = Long.MAX_VALUE;
endTime = Long.MIN_VALUE;
}
/**
* Add a time to the bounds, resetting the start and end time as necessary.
*
* @param timeStamp in milliseconds
*/
public void addTimeToBounds(long timeStamp) {
if (timeStamp < startTime) {
startTime = timeStamp;
}
if (timeStamp > endTime) {
endTime = timeStamp;
}
}
public String toString() {
return "TimeBounds[start=" + startTime + ", end=" + endTime + "]";
}
/**
* Add the start and end times of provided TimeBounds to this TimeBounds.
*
* @param timeBounds
*/
public void addTimeToBounds(TimeBounds timeBounds) {
addTimeToBounds(timeBounds.getStartTime());
addTimeToBounds(timeBounds.getEndTime());
}
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final TimeBounds timeBounds = (TimeBounds) obj;
return (startTime == timeBounds.getStartTime() && endTime == timeBounds.getEndTime());
}
public boolean isUnset() {
return startTime == Long.MAX_VALUE && endTime == Long.MIN_VALUE;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
int result = HashCodeUtil.SEED;
// collect the contributions of various fields
result = HashCodeUtil.hash(result, startTime);
result = HashCodeUtil.hash(result, endTime);
return result;
}
}