in commons/src/main/java/org/apache/tapestry5/commons/internal/BasicTypeCoercions.java [350:475]
public static void provideJSR310TypeCoercions(
MappedConfiguration<CoercionTuple.Key, CoercionTuple> configuration)
{
{
add(configuration, Year.class, Integer.class, Year::getValue);
add(configuration, Integer.class, Year.class, Year::of);
}
{
add(configuration, Month.class, Integer.class, Month::getValue);
add(configuration, Integer.class, Month.class, Month::of);
add(configuration, String.class, Month.class, StringToEnumCoercion.create(Month.class));
}
{
add(configuration, String.class, YearMonth.class, YearMonth::parse);
add(configuration, YearMonth.class, Year.class, input -> Year.of(input.getYear()));
add(configuration, YearMonth.class, Month.class, YearMonth::getMonth);
}
{
add(configuration, String.class, MonthDay.class, MonthDay::parse);
add(configuration, MonthDay.class, Month.class, MonthDay::getMonth);
}
{
add(configuration, DayOfWeek.class, Integer.class, DayOfWeek::getValue);
add(configuration, Integer.class, DayOfWeek.class, DayOfWeek::of);
add(configuration, String.class, DayOfWeek.class,
StringToEnumCoercion.create(DayOfWeek.class));
}
{
add(configuration, LocalDate.class, Instant.class, input -> {
return input.atStartOfDay(ZoneId.systemDefault()).toInstant();
});
add(configuration, Instant.class, LocalDate.class, input -> {
return input.atZone(ZoneId.systemDefault()).toLocalDate();
});
add(configuration, String.class, LocalDate.class, LocalDate::parse);
add(configuration, LocalDate.class, YearMonth.class, input -> {
return YearMonth.of(input.getYear(), input.getMonth());
});
add(configuration, LocalDate.class, MonthDay.class, input -> {
return MonthDay.of(input.getMonth(), input.getDayOfMonth());
});
}
{
add(configuration, LocalTime.class, Long.class, LocalTime::toNanoOfDay);
add(configuration, Long.class, LocalTime.class, LocalTime::ofNanoOfDay);
add(configuration, String.class, LocalTime.class, LocalTime::parse);
}
{
add(configuration, String.class, LocalDateTime.class, LocalDateTime::parse);
add(configuration, LocalDateTime.class, Instant.class, input -> {
return input.atZone(ZoneId.systemDefault()).toInstant();
});
add(configuration, Instant.class, LocalDateTime.class, input -> {
return LocalDateTime.ofInstant(input, ZoneId.systemDefault());
});
add(configuration, LocalDateTime.class, LocalDate.class, LocalDateTime::toLocalDate);
}
{
add(configuration, String.class, OffsetDateTime.class, OffsetDateTime::parse);
add(configuration, OffsetDateTime.class, Instant.class, OffsetDateTime::toInstant);
add(configuration, OffsetDateTime.class, OffsetTime.class,
OffsetDateTime::toOffsetTime);
}
{
add(configuration, String.class, ZoneId.class, ZoneId::of);
}
{
add(configuration, String.class, ZoneOffset.class, ZoneOffset::of);
}
{
add(configuration, String.class, ZonedDateTime.class, ZonedDateTime::parse);
add(configuration, ZonedDateTime.class, Instant.class, ZonedDateTime::toInstant);
add(configuration, ZonedDateTime.class, ZoneId.class, ZonedDateTime::getZone);
}
{
add(configuration, Instant.class, Long.class, Instant::toEpochMilli);
add(configuration, Long.class, Instant.class, Instant::ofEpochMilli);
add(configuration, Instant.class, Date.class, Date::from);
add(configuration, Date.class, Instant.class, Date::toInstant);
}
{
add(configuration, Duration.class, Long.class, Duration::toNanos);
add(configuration, Long.class, Duration.class, Duration::ofNanos);
add(configuration, Duration.class, TimeInterval.class, input -> {
// Duration.toMillis() is Java 9+, so we need to do it ourselves
long millisFromSeconds = input.getSeconds() * 1_000L;
long millisFromNanos = input.getNano() / 1_000_000L;
return new TimeInterval(millisFromSeconds + millisFromNanos);
});
add(configuration, TimeInterval.class, Duration.class, input -> {
return Duration.ofMillis(input.milliseconds());
});
}
{
add(configuration, String.class, Period.class, Period::parse);
}
}