package jakarta.validation;
import java.time.Clock;
public interface DynamicClockProvider {
/**
* Returns the clock which serves as the reference for {@code now}.
* <p>
* Ensure that the {@link Clock} used as the reference for {@code now} is obtained
* for each verification of {@code @Future}, {@code @FutureOrPresent}, {@code @Past},
* and {@code @PastOrPresent} constraints.
*
* @param object object to validate
* @param groups the group or list of groups targeted for validation (defaults to
* {@link jakarta.validation.groups.Default Default})
* @param <T> the type of the object to validate
* @return the clock which serves as the reference for {@code now}; must not be
* {@code null}
*
* @since 4.0
*/
<T> Clock getClock(T object, Class<?>... groups);
}
/*
* Jakarta Validation API
*
* License: Apache License, Version 2.0
*/
package jakarta.validation;
import java.time.Clock;
/**
* Contract for obtaining the {@link Clock} used as the reference for {@code now} when
* validating the {@code @Future}, {@code FutureOrPresent}, {@code Past}, and
* {@code @PastOrPresent} constraints.
* <p>
* The default implementation will return the current system time. Plugging in custom
* implementations may be useful for instance in batch applications which need to run with a
* specific logical date, e.g. with yesterday's date when re-running a failed batch job
* execution.
* <p>
* Implementations must be safe for access from several threads at the same time.
*
* @author Gunnar Morling
* @author Guillaume Smet
* @since 2.0
*/
public interface ClockProvider {
/**
* Returns the clock which serves as the reference for {@code now}.
* <p>
* Ensure that the {@link Clock} used as the reference for {@code now} is obtained
* for each verification of {@code @Future}, {@code @FutureOrPresent}, {@code @Past},
* and {@code @PastOrPresent} constraints.
*
* @param object object to validate
* @param groups the group or list of groups targeted for validation (defaults to
* {@link jakarta.validation.groups.Default Default})
* @param <T> the type of the object to validate
* @return the clock which serves as the reference for {@code now}; must not be
* {@code null}
*
* @since 4.0
*/
<T> Clock getClock(T object, Class<?>... groups);
}