001: package org.airtodo.db.types;
002:
003: import java.io.Serializable;
004: import java.util.Date;
005:
006: import org.air.framework.date.PeriodFormatterUtils;
007:
008: public class Period implements Serializable, Comparable {
009: private Date dateStart;
010:
011: private Date dateEnd;
012:
013: private boolean remain;
014:
015: private PeriodFormatterUtils.FIELD field;
016:
017: public Period(PeriodFormatterUtils.FIELD field) {
018: this .field = field;
019: }
020:
021: public void setValue(Date dateStart, Date dateEnd) {
022: this .dateStart = dateStart;
023: this .dateEnd = dateEnd;
024: }
025:
026: public boolean isValid() {
027: Long value = getValue();
028: return value != null && value > 0;
029: }
030:
031: public int compareTo(Object o) {
032: if (o instanceof Period) {
033: Long this Value;
034: Long otherValue;
035: if (remain) {
036: Period periodOther = (Period) o;
037: //
038: if (PeriodUtils.isExpired(this )
039: && PeriodUtils.isExpired(periodOther))
040: return 0;
041: if (PeriodUtils.isExpired(this )
042: && PeriodUtils.isFuture(periodOther))
043: return 1;
044: if (PeriodUtils.isExpired(this )
045: && PeriodUtils.isInProgress(periodOther))
046: return 1;
047: //
048: if (PeriodUtils.isFuture(this )
049: && PeriodUtils.isFuture(periodOther))
050: return 0;
051: if (PeriodUtils.isFuture(this )
052: && PeriodUtils.isExpired(periodOther))
053: return -1;
054: if (PeriodUtils.isFuture(this )
055: && PeriodUtils.isInProgress(periodOther))
056: return -1;
057: //
058: if (PeriodUtils.isInProgress(this )
059: && PeriodUtils.isInProgress(periodOther)) {
060: Period this Remain = PeriodUtils
061: .calcRemainPeriod(this );
062: this Value = this Remain.getValue();
063: otherValue = PeriodUtils.calcRemainPeriod(
064: periodOther).getValue();
065: return this Value.compareTo(otherValue);
066: }
067: if (PeriodUtils.isInProgress(this )
068: && PeriodUtils.isExpired(periodOther))
069: return -1;
070: if (PeriodUtils.isInProgress(this )
071: && PeriodUtils.isFuture(periodOther))
072: return 1;
073: //
074: } else {
075: this Value = getValue();
076: otherValue = ((Period) o).getValue();
077: if (this Value != null)
078: return this Value.compareTo(otherValue);
079: }
080: }
081: return 1;
082: }
083:
084: @Override
085: public String toString() {
086: return PeriodFormatterUtils.format(dateStart, dateEnd, field);
087: }
088:
089: public Long getValue() {
090: return dateStart == null || dateEnd == null ? null : dateEnd
091: .getTime()
092: - dateStart.getTime();
093: }
094:
095: public Date getDateEnd() {
096: return dateEnd;
097: }
098:
099: public Date getDateStart() {
100: return dateStart;
101: }
102:
103: public boolean isRemain() {
104: return remain;
105: }
106:
107: public void setRemain(boolean remain) {
108: this.remain = remain;
109: }
110:
111: }
|