/** * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mifosplatform.infrastructure.core.domain; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import org.joda.time.Days; import org.joda.time.LocalDate; public class LocalDateInterval { private final LocalDate startDate; private final LocalDate endDate; public static LocalDateInterval create(final LocalDate startDate, final LocalDate endDate) { return new LocalDateInterval(startDate, endDate); } public LocalDateInterval(final LocalDate startDate, final LocalDate endDate) { this.startDate = startDate; this.endDate = endDate; } public LocalDate startDate() { return this.startDate; } public LocalDate endDate() { return this.endDate; } public Integer daysInPeriodInclusiveOfEndDate() { return daysBetween() + 1; } private Integer daysBetween() { return Days.daysBetween(this.startDate, this.endDate).getDays(); } public boolean containsPortionOf(final LocalDateInterval interval) { return contains(interval.startDate) || contains(interval.endDate); } public boolean contains(final LocalDateInterval interval) { return contains(interval.startDate) && contains(interval.endDate); } public boolean contains(final LocalDate target) { return isBetweenInclusive(this.startDate, this.endDate, target); } private boolean isBetweenInclusive(final LocalDate start, final LocalDate end, final LocalDate target) { return !target.isBefore(start) && !target.isAfter(end); } public boolean fallsBefore(final LocalDate dateToCheck) { return this.endDate.isBefore(dateToCheck); } @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); } }