Remove support for Joda Time and ThreeTenBackport.

Closes #2276
This commit is contained in:
Mark Paluch
2021-09-20 13:40:04 +02:00
committed by Jens Schauder
parent f417c4ca13
commit 582319a5fe
17 changed files with 20 additions and 755 deletions

View File

@@ -29,7 +29,6 @@ import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.convert.Jsr310Converters;
import org.springframework.data.convert.ThreeTenBackPortConverters;
import org.springframework.data.util.Optionals;
import org.springframework.data.util.ReflectionUtils;
import org.springframework.data.util.ReflectionUtils.AnnotationFieldFilter;
@@ -54,16 +53,11 @@ final class AnnotationAuditingMetadata {
private static final Map<Class<?>, AnnotationAuditingMetadata> metadataCache = new ConcurrentHashMap<>();
public static final boolean IS_JDK_8 = org.springframework.util.ClassUtils.isPresent("java.time.Clock",
AnnotationAuditingMetadata.class.getClassLoader());
static final List<String> SUPPORTED_DATE_TYPES;
static {
List<String> types = new ArrayList<>(5);
types.add("org.joda.time.DateTime");
types.add("org.joda.time.LocalDateTime");
types.add(Date.class.getName());
types.add(Long.class.getName());
types.add(long.class.getName());
@@ -109,7 +103,7 @@ final class AnnotationAuditingMetadata {
Class<?> type = it.getType();
if (Jsr310Converters.supports(type) || ThreeTenBackPortConverters.supports(type)) {
if (Jsr310Converters.supports(type)) {
return;
}

View File

@@ -24,9 +24,7 @@ import java.util.stream.Stream;
import org.springframework.core.ResolvableType;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.convert.JodaTimeConverters;
import org.springframework.data.convert.Jsr310Converters;
import org.springframework.data.convert.ThreeTenBackPortConverters;
import org.springframework.data.domain.Auditable;
import org.springframework.data.util.ReflectionUtils;
import org.springframework.format.support.DefaultFormattingConversionService;
@@ -50,9 +48,7 @@ class DefaultAuditableBeanWrapperFactory implements AuditableBeanWrapperFactory
DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
JodaTimeConverters.getConvertersToRegister().forEach(conversionService::addConverter);
Jsr310Converters.getConvertersToRegister().forEach(conversionService::addConverter);
ThreeTenBackPortConverters.getConvertersToRegister().forEach(conversionService::addConverter);
this.conversionService = conversionService;
}

View File

@@ -79,9 +79,7 @@ public class CustomConversions {
List<Object> defaults = new ArrayList<>();
defaults.addAll(JodaTimeConverters.getConvertersToRegister());
defaults.addAll(Jsr310Converters.getConvertersToRegister());
defaults.addAll(ThreeTenBackPortConverters.getConvertersToRegister());
defaults.addAll(JMoleculesConverters.getConvertersToRegister());
DEFAULT_CONVERTERS = Collections.unmodifiableList(defaults);

View File

@@ -1,212 +0,0 @@
/*
* Copyright 2013-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.convert;
import java.time.Instant;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.springframework.core.convert.converter.Converter;
import org.springframework.lang.NonNull;
import org.springframework.util.ClassUtils;
/**
* Helper class to register JodaTime specific {@link Converter} implementations in case the library is present on the
* classpath.
*
* @author Oliver Gierke
* @author Christoph Strobl
* @author Jens Schauder
* @author Mark Paluch
* @deprecated since 2.3, use JSR-310 types as replacement for Joda-Time.
*/
@Deprecated
public abstract class JodaTimeConverters {
private static final boolean JODA_TIME_IS_PRESENT = ClassUtils.isPresent("org.joda.time.LocalDate", null);
/**
* Returns the converters to be registered. Will only return converters in case JodaTime is present on the class.
*
* @return
*/
public static Collection<Converter<?, ?>> getConvertersToRegister() {
if (!JODA_TIME_IS_PRESENT) {
return Collections.emptySet();
}
List<Converter<?, ?>> converters = new ArrayList<>();
converters.add(LocalDateToDateConverter.INSTANCE);
converters.add(LocalDateTimeToDateConverter.INSTANCE);
converters.add(DateTimeToDateConverter.INSTANCE);
converters.add(DateToLocalDateConverter.INSTANCE);
converters.add(DateToLocalDateTimeConverter.INSTANCE);
converters.add(DateToDateTimeConverter.INSTANCE);
converters.add(LocalDateTimeToJodaLocalDateTime.INSTANCE);
converters.add(LocalDateTimeToJodaDateTime.INSTANCE);
converters.add(InstantToJodaLocalDateTime.INSTANCE);
converters.add(JodaLocalDateTimeToInstant.INSTANCE);
converters.add(LocalDateTimeToJsr310Converter.INSTANCE);
return converters;
}
@Deprecated
public enum LocalDateTimeToJsr310Converter implements Converter<LocalDateTime, java.time.LocalDateTime> {
INSTANCE;
@NonNull
@Override
public java.time.LocalDateTime convert(LocalDateTime source) {
return java.time.LocalDateTime.ofInstant(source.toDate().toInstant(), ZoneId.systemDefault());
}
}
@Deprecated
public enum LocalDateToDateConverter implements Converter<LocalDate, Date> {
INSTANCE;
@NonNull
@Override
public Date convert(LocalDate source) {
return source.toDate();
}
}
@Deprecated
public enum LocalDateTimeToDateConverter implements Converter<LocalDateTime, Date> {
INSTANCE;
@NonNull
@Override
public Date convert(LocalDateTime source) {
return source.toDate();
}
}
@Deprecated
public enum DateTimeToDateConverter implements Converter<DateTime, Date> {
INSTANCE;
@NonNull
@Override
public Date convert(DateTime source) {
return source.toDate();
}
}
@Deprecated
public enum DateToLocalDateConverter implements Converter<Date, LocalDate> {
INSTANCE;
@NonNull
@Override
public LocalDate convert(Date source) {
return new LocalDate(source.getTime());
}
}
@Deprecated
public enum DateToLocalDateTimeConverter implements Converter<Date, LocalDateTime> {
INSTANCE;
@NonNull
@Override
public LocalDateTime convert(Date source) {
return new LocalDateTime(source.getTime());
}
}
@Deprecated
public enum DateToDateTimeConverter implements Converter<Date, DateTime> {
INSTANCE;
@NonNull
@Override
public DateTime convert(Date source) {
return new DateTime(source.getTime());
}
}
@ReadingConverter
@Deprecated
public enum LocalDateTimeToJodaLocalDateTime implements Converter<java.time.LocalDateTime, LocalDateTime> {
INSTANCE;
@NonNull
@Override
public LocalDateTime convert(java.time.LocalDateTime source) {
return LocalDateTime.fromDateFields(Jsr310Converters.LocalDateTimeToDateConverter.INSTANCE.convert(source));
}
}
@Deprecated
public enum InstantToJodaLocalDateTime implements Converter<java.time.Instant, LocalDateTime> {
INSTANCE;
@NonNull
@Override
public LocalDateTime convert(java.time.Instant source) {
return LocalDateTime.fromDateFields(new Date(source.toEpochMilli()));
}
}
@Deprecated
public enum JodaLocalDateTimeToInstant implements Converter<LocalDateTime, Instant> {
INSTANCE;
@NonNull
@Override
public Instant convert(LocalDateTime source) {
return Instant.ofEpochMilli(source.toDateTime().getMillis());
}
}
@Deprecated
public enum LocalDateTimeToJodaDateTime implements Converter<java.time.LocalDateTime, DateTime> {
INSTANCE;
@NonNull
@Override
public DateTime convert(java.time.LocalDateTime source) {
return new DateTime(Jsr310Converters.LocalDateTimeToDateConverter.INSTANCE.convert(source));
}
}
}

View File

@@ -1,266 +0,0 @@
/*
* Copyright 2015-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.convert;
import static org.threeten.bp.DateTimeUtils.*;
import static org.threeten.bp.Instant.*;
import static org.threeten.bp.LocalDateTime.*;
import static org.threeten.bp.ZoneId.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.springframework.core.convert.converter.Converter;
import org.springframework.lang.NonNull;
import org.springframework.util.ClassUtils;
import org.threeten.bp.Instant;
import org.threeten.bp.LocalDate;
import org.threeten.bp.LocalDateTime;
import org.threeten.bp.LocalTime;
import org.threeten.bp.ZoneId;
import org.threeten.bp.ZoneOffset;
/**
* Helper class to register {@link Converter} implementations for the ThreeTen Backport project in case it's present on
* the classpath.
*
* @author Oliver Gierke
* @author Christoph Strobl
* @author Jens Schauder
* @author Mark Paluch
* @see <a href="https://www.threeten.org/threetenbp">https://www.threeten.org/threetenbp</a>
* @since 1.10
* @deprecated since 2.3, use JSR-310 types as replacement for ThreeTenBackport.
*/
@Deprecated
public abstract class ThreeTenBackPortConverters {
private static final boolean THREE_TEN_BACK_PORT_IS_PRESENT = ClassUtils.isPresent("org.threeten.bp.LocalDateTime",
ThreeTenBackPortConverters.class.getClassLoader());
private static final Collection<Class<?>> SUPPORTED_TYPES;
static {
SUPPORTED_TYPES = THREE_TEN_BACK_PORT_IS_PRESENT //
? Arrays.asList(LocalDateTime.class, LocalDate.class, LocalTime.class, Instant.class, java.time.Instant.class)
: Collections.emptySet();
}
/**
* Returns the converters to be registered. Will only return converters in case we're running on Java 8.
*
* @return
*/
public static Collection<Converter<?, ?>> getConvertersToRegister() {
if (!THREE_TEN_BACK_PORT_IS_PRESENT) {
return Collections.emptySet();
}
List<Converter<?, ?>> converters = new ArrayList<>();
converters.add(DateToLocalDateTimeConverter.INSTANCE);
converters.add(LocalDateTimeToDateConverter.INSTANCE);
converters.add(DateToLocalDateConverter.INSTANCE);
converters.add(LocalDateToDateConverter.INSTANCE);
converters.add(DateToLocalTimeConverter.INSTANCE);
converters.add(LocalTimeToDateConverter.INSTANCE);
converters.add(DateToInstantConverter.INSTANCE);
converters.add(InstantToDateConverter.INSTANCE);
converters.add(ZoneIdToStringConverter.INSTANCE);
converters.add(StringToZoneIdConverter.INSTANCE);
converters.add(LocalDateTimeToJsr310LocalDateTimeConverter.INSTANCE);
converters.add(LocalDateTimeToJavaTimeInstantConverter.INSTANCE);
converters.add(JavaTimeInstantToLocalDateTimeConverter.INSTANCE);
return converters;
}
public static boolean supports(Class<?> type) {
return SUPPORTED_TYPES.contains(type);
}
@Deprecated
public static enum LocalDateTimeToJsr310LocalDateTimeConverter
implements Converter<LocalDateTime, java.time.LocalDateTime> {
INSTANCE;
/*
* (non-Javadoc)
* @see org.springframework.core.convert.converter.Converter#convert(java.lang.Object)
*/
@NonNull
@Override
public java.time.LocalDateTime convert(LocalDateTime source) {
Date date = toDate(source.atZone(ZoneId.systemDefault()).toInstant());
return Jsr310Converters.DateToLocalDateTimeConverter.INSTANCE.convert(date);
}
}
@Deprecated
public static enum DateToLocalDateTimeConverter implements Converter<Date, LocalDateTime> {
INSTANCE;
@NonNull
@Override
public LocalDateTime convert(Date source) {
return ofInstant(toInstant(source), systemDefault());
}
}
@Deprecated
public static enum LocalDateTimeToDateConverter implements Converter<LocalDateTime, Date> {
INSTANCE;
@NonNull
@Override
public Date convert(LocalDateTime source) {
return toDate(source.atZone(systemDefault()).toInstant());
}
}
@Deprecated
public static enum DateToLocalDateConverter implements Converter<Date, LocalDate> {
INSTANCE;
@NonNull
@Override
public LocalDate convert(Date source) {
return ofInstant(ofEpochMilli(source.getTime()), systemDefault()).toLocalDate();
}
}
@Deprecated
public static enum LocalDateToDateConverter implements Converter<LocalDate, Date> {
INSTANCE;
@NonNull
@Override
public Date convert(LocalDate source) {
return toDate(source.atStartOfDay(systemDefault()).toInstant());
}
}
@Deprecated
public static enum DateToLocalTimeConverter implements Converter<Date, LocalTime> {
INSTANCE;
@NonNull
@Override
public LocalTime convert(Date source) {
return ofInstant(ofEpochMilli(source.getTime()), systemDefault()).toLocalTime();
}
}
@Deprecated
public static enum LocalTimeToDateConverter implements Converter<LocalTime, Date> {
INSTANCE;
@NonNull
@Override
public Date convert(LocalTime source) {
return toDate(source.atDate(LocalDate.now()).atZone(systemDefault()).toInstant());
}
}
@Deprecated
public static enum DateToInstantConverter implements Converter<Date, Instant> {
INSTANCE;
@NonNull
@Override
public Instant convert(Date source) {
return toInstant(source);
}
}
@Deprecated
public static enum InstantToDateConverter implements Converter<Instant, Date> {
INSTANCE;
@NonNull
@Override
public Date convert(Instant source) {
return toDate(source.atZone(systemDefault()).toInstant());
}
}
@Deprecated
public static enum LocalDateTimeToJavaTimeInstantConverter implements Converter<LocalDateTime, java.time.Instant> {
INSTANCE;
@NonNull
@Override
public java.time.Instant convert(LocalDateTime source) {
return java.time.Instant.ofEpochMilli(source.atZone(ZoneOffset.systemDefault()).toInstant().toEpochMilli());
}
}
@Deprecated
public static enum JavaTimeInstantToLocalDateTimeConverter implements Converter<java.time.Instant, LocalDateTime> {
INSTANCE;
@NonNull
@Override
public LocalDateTime convert(java.time.Instant source) {
return LocalDateTime.ofInstant(Instant.ofEpochMilli(source.toEpochMilli()), ZoneOffset.systemDefault());
}
}
@WritingConverter
@Deprecated
public static enum ZoneIdToStringConverter implements Converter<ZoneId, String> {
INSTANCE;
@NonNull
@Override
public String convert(ZoneId source) {
return source.toString();
}
}
@ReadingConverter
@Deprecated
public static enum StringToZoneIdConverter implements Converter<String, ZoneId> {
INSTANCE;
@NonNull
@Override
public ZoneId convert(String source) {
return ZoneId.of(source);
}
}
}