package org.opengroupware.jope.foundation;

import java.util.Date;

/*
 * NSDateRange
 * 
 * Represent ranges of time. The enddate is non-inclusive.
 */
public class NSDateRange extends NSObject {

  protected long startTime;
  protected long endTime;
  
  public NSDateRange(Date _startDate, Date _endDate) {
    this.startTime = _startDate.getTime();
    this.endTime   = _endDate.getTime();
  }
  
  /* accessors */
  
  public long startTime() {
    return this.startTime;
  }
  public long endTime() {
    return this.endTime;
  }
  
  public Date startDate() {
    return new Date(this.startTime);
  }
  public Date endDate() {
    return new Date(this.endTime);
  }
  
  /* operations */
  
  public boolean containsTime(long _date) {
    return this.startTime <= _date && _date < this.endTime;
  }
  
  public boolean containsDate(Date _date) {
    if (_date == null)
      return false;
    
    return this.containsTime(_date.getTime());
  }
  
  /* comparison */

  @Override
  public int hashCode() {
    // TODO: improve
    return (int)this.startTime;
  }

  @Override
  public boolean equals(Object _otherRange) {
    if (this == _otherRange)
      return true;
    
    if (!(_otherRange instanceof NSDateRange))
      return false;
    
    NSDateRange r = (NSDateRange)_otherRange;
    if (this.startTime != r.startTime)
      return false;
    if (this.endTime != r.endTime)
      return false;
    
    return true;
  }

  /* description */

  @Override
  public void appendAttributesToDescription(StringBuffer _d) {
    _d.append(" ");
    _d.append(this.startTime);
    _d.append("..");
    _d.append(this.endTime);
  }
}
