/*
* Smart GWT (GWT for SmartClient)
* Copyright 2008 and beyond, Isomorphic Software, Inc.
*
* Smart GWT is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version 3
* is published by the Free Software Foundation. Smart GWT is also
* available under typical commercial license terms - see
* http://smartclient.com/license
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.smartgwt.client.data;
import com.google.gwt.core.client.JavaScriptObject;
import com.smartgwt.client.core.JsObject;
import com.smartgwt.client.util.JSOHelper;
import com.smartgwt.client.widgets.form.fields.RelativeDateItem;
import java.util.Date;
/**
* A class specifying a range of dates. Values are start and end. If either value is omitted, the range is assumed to be open-ended in that direction -
* so if the start date is omitted, the range will include any date earlier than the value specified in end date.
*/
public class DateRange extends JsObject {
private Date startDate;
private Date endDate;
private RelativeDate relativeStartDate;
private RelativeDate relativeEndDate;
public DateRange() {
}
/**
* Returns the start date or null if open ended. If the underlying start date is specified as a {@link #setRelativeStartDate(RelativeDate) relativeStartDate},
* the date is converted to an absolute value and returned.
*
* @return the start date
*/
public Date getStartDate() {
if (startDate != null) return startDate;
if (relativeStartDate != null) return RelativeDateItem.getAbsoluteDate(relativeStartDate);
return null;
}
/**
* Set the start date of the range.
*
* @param startDate the start date
*/
public void setStartDate(Date startDate) {
this.startDate = startDate;
this.relativeStartDate = null;
}
/**
* Returns the end date or null if open ended. If the underlying end date is specified as a {@link #setRelativeEndDate(RelativeDate) relativeEndDate},
* the date is converted to an absolute value and returned.
*
* @return the end date
*/
public Date getEndDate() {
if (endDate != null) return endDate;
if (relativeEndDate != null) return RelativeDateItem.getAbsoluteDate(relativeEndDate);
return null;
}
/**
* Set the end date of the range.
*
* @param endDate the end date
*/
public void setEndDate(Date endDate) {
this.endDate = endDate;
this.relativeEndDate = null;
}
/**
* Returns the relative start date of the range, or null if not specified.
*
* @return the relative start date
*/
public RelativeDate getRelativeStartDate() {
return relativeStartDate;
}
/**
* Set the relative start date of the range.
*
* @param relativeStartDate the relative start date
*/
public void setRelativeStartDate(RelativeDate relativeStartDate) {
this.relativeStartDate = relativeStartDate;
this.startDate = null;
}
/**
* Returns the relative end date of the range, or null if not specified.
*
* @return the relative end date
*/
public RelativeDate getRelativeEndDate() {
return relativeEndDate;
}
/**
* Set the relative end date of the range.
*
* @param relativeEndDate the relative end date
*/
public void setRelativeEndDate(RelativeDate relativeEndDate) {
this.relativeEndDate = relativeEndDate;
this.endDate = null;
}
@Override
public JavaScriptObject getJsObj() {
JavaScriptObject jsObj = JavaScriptObject.createObject();
if (startDate != null) {
JSOHelper.setAttribute(jsObj, "start", startDate);
}
if (relativeStartDate != null) {
if (relativeStartDate.getValue().startsWith("$")) {
JSOHelper.setAttribute(jsObj, "start", relativeStartDate.getValue());
} else {
JSOHelper.setAttribute(jsObj, "start", relativeStartDate.getJsObj());
}
}
if (endDate != null) {
JSOHelper.setAttribute(jsObj, "end", endDate);
}
if (relativeEndDate != null) {
if (relativeEndDate.getValue().startsWith("$")) {
JSOHelper.setAttribute(jsObj, "end", relativeEndDate.getValue());
} else {
JSOHelper.setAttribute(jsObj, "end", relativeEndDate.getJsObj());
}
}
return jsObj;
}
}