PostgresDateRange.java

package net.hostsharing.hsadminng.mapper;

import io.hypersistence.utils.hibernate.type.range.Range;
import lombok.experimental.UtilityClass;

import java.time.LocalDate;

@UtilityClass
public class PostgresDateRange {

    public static Range<LocalDate> toPostgresDateRange(
            final LocalDate lowerInclusive,
            final LocalDate upperInclusive) {
        return lowerInclusive != null
                ? upperInclusive != null
                    ? Range.closedOpen(lowerInclusive, upperInclusive.plusDays(1))
                    : Range.closedInfinite(lowerInclusive)
                : upperInclusive != null
                    ? Range.infiniteOpen(upperInclusive.plusDays(1))
                    : Range.infinite(LocalDate.class);
    }

    public static LocalDate lowerInclusiveFromPostgresDateRange(
            final Range<LocalDate> range) {
        return range.lower();
    }

    public static LocalDate upperInclusiveFromPostgresDateRange(
        final Range<LocalDate> range) {
        return range.upper() != null ? range.upper().minusDays(1) : null;
    }

}