package org.celllife.function;
import java.util.Calendar;
import java.util.Date;
import org.celllife.function.DateRule.RangeSelectionEnum;
import org.celllife.idart.misc.DateFieldComparator;
public class DateRuleFactory {
public static IRule<Date> after(Date boundry, boolean ignoreTimestamp) {
DateRule rule = new DateRule(boundry, RangeSelectionEnum.AFTER_BOUNDRY);
addCustomComparator(ignoreTimestamp, rule);
return rule;
}
public static IRule<Date> afterNow(boolean ignoreTimestamp) {
DateRule rule = new DateRule(null, RangeSelectionEnum.AFTER_BOUNDRY);
addCustomComparator(ignoreTimestamp, rule);
return rule;
}
public static IRule<Date> afterNowInclusive(boolean ignoreTimestamp) {
DateRule rule = new DateRule(null,
RangeSelectionEnum.AFTER_BOUNDRY_INCLUSIVE);
addCustomComparator(ignoreTimestamp, rule);
return rule;
}
public static IRule<Date> afterInclusive(Date boundry,boolean ignoreTimestamp) {
DateRule rule = new DateRule(boundry,
RangeSelectionEnum.AFTER_BOUNDRY_INCLUSIVE);
addCustomComparator(ignoreTimestamp, rule);
return rule;
}
public static IRule<Date> before(Date boundry,boolean ignoreTimestamp) {
DateRule rule = new DateRule(boundry, RangeSelectionEnum.BEFORE_BOUNDRY);
addCustomComparator(ignoreTimestamp, rule);
return rule;
}
public static IRule<Date> beforeNow(boolean ignoreTimestamp) {
DateRule rule = new DateRule(null, RangeSelectionEnum.BEFORE_BOUNDRY);
addCustomComparator(ignoreTimestamp, rule);
return rule;
}
public static IRule<Date> beforeNowInclusive(boolean ignoreTimestamp) {
DateRule rule = new DateRule(null,
RangeSelectionEnum.BEFORE_BOUNDRY_INCLUSIVE);
addCustomComparator(ignoreTimestamp, rule);
return rule;
}
public static IRule<Date> beforeInclusive(Date boundry,boolean ignoreTimestamp) {
DateRule rule = new DateRule(boundry,
RangeSelectionEnum.BEFORE_BOUNDRY_INCLUSIVE);
addCustomComparator(ignoreTimestamp, rule);
return rule;
}
public static IRule<Date> betweenExclusive(Date lowerBoundry,
Date upperBoundry,boolean ignoreTimestamp) {
return between(lowerBoundry, false, upperBoundry, false, ignoreTimestamp);
}
public static IRule<Date> betweenInclusive(Date lowerBoundry,
Date upperBoundry,boolean ignoreTimestamp) {
return between(lowerBoundry, true, upperBoundry, true, ignoreTimestamp);
}
@SuppressWarnings("unchecked")
public static IRule<Date> between(Date lowerBoundry,
boolean lowerInclusive, Date upperBoundry, boolean upperInclusive,boolean ignoreTimestamp) {
DateRule lower = new DateRule(lowerBoundry,
lowerInclusive ? RangeSelectionEnum.AFTER_BOUNDRY_INCLUSIVE
: RangeSelectionEnum.AFTER_BOUNDRY);
addCustomComparator(ignoreTimestamp, lower);
DateRule upper = new DateRule(upperBoundry,
upperInclusive ? RangeSelectionEnum.BEFORE_BOUNDRY_INCLUSIVE
: RangeSelectionEnum.BEFORE_BOUNDRY);
addCustomComparator(ignoreTimestamp, upper);
return new AndRule<Date>(lower, upper);
}
private static void addCustomComparator(boolean ignoreTimestamp,
DateRule rule) {
if (ignoreTimestamp) {
rule.setDateComparator(new DateFieldComparator(
Calendar.DAY_OF_MONTH));
}
}
}