17 changed files with 20 additions and 755 deletions
@ -1,212 +0,0 @@
@@ -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)); |
||||
} |
||||
} |
||||
} |
||||
@ -1,266 +0,0 @@
@@ -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); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -1,127 +0,0 @@
@@ -1,127 +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.assertj.core.api.Assertions.*; |
||||
import static org.threeten.bp.DateTimeUtils.*; |
||||
|
||||
import java.text.SimpleDateFormat; |
||||
import java.util.Date; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
import java.util.Map.Entry; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
import org.springframework.core.convert.ConversionService; |
||||
import org.springframework.core.convert.converter.Converter; |
||||
import org.springframework.core.convert.support.GenericConversionService; |
||||
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; |
||||
|
||||
/** |
||||
* Unit tests for {@link ThreeTenBackPortConverters}. |
||||
* |
||||
* @author Oliver Gierke |
||||
* @since 1.10 |
||||
*/ |
||||
class ThreeTenBackPortConvertersUnitTests { |
||||
|
||||
static final Date NOW = new Date(); |
||||
static final ConversionService CONVERSION_SERVICE; |
||||
|
||||
static { |
||||
|
||||
GenericConversionService conversionService = new GenericConversionService(); |
||||
|
||||
for (Converter<?, ?> converter : ThreeTenBackPortConverters.getConvertersToRegister()) { |
||||
conversionService.addConverter(converter); |
||||
} |
||||
|
||||
CONVERSION_SERVICE = conversionService; |
||||
} |
||||
|
||||
@Test // DATACMNS-606
|
||||
void convertsDateToLocalDateTime() { |
||||
assertThat(CONVERSION_SERVICE.convert(NOW, LocalDateTime.class).toString()) |
||||
.isEqualTo(format(NOW, "yyyy-MM-dd'T'HH:mm:ss.SSS")); |
||||
} |
||||
|
||||
@Test // DATACMNS-606
|
||||
void convertsLocalDateTimeToDate() { |
||||
|
||||
LocalDateTime now = LocalDateTime.now(); |
||||
assertThat(format(CONVERSION_SERVICE.convert(now, Date.class), "yyyy-MM-dd'T'HH:mm:ss.SSS")) |
||||
.isEqualTo(now.toString()); |
||||
} |
||||
|
||||
@Test // DATACMNS-606
|
||||
void convertsDateToLocalDate() { |
||||
assertThat(CONVERSION_SERVICE.convert(NOW, LocalDate.class).toString()).isEqualTo(format(NOW, "yyyy-MM-dd")); |
||||
} |
||||
|
||||
@Test // DATACMNS-606
|
||||
void convertsLocalDateToDate() { |
||||
|
||||
LocalDate now = LocalDate.now(); |
||||
assertThat(format(CONVERSION_SERVICE.convert(now, Date.class), "yyyy-MM-dd")).isEqualTo(now.toString()); |
||||
} |
||||
|
||||
@Test // DATACMNS-606
|
||||
void convertsDateToLocalTime() { |
||||
assertThat(CONVERSION_SERVICE.convert(NOW, LocalTime.class).toString()).isEqualTo(format(NOW, "HH:mm:ss.SSS")); |
||||
} |
||||
|
||||
@Test // DATACMNS-606
|
||||
void convertsLocalTimeToDate() { |
||||
|
||||
LocalTime now = LocalTime.now(); |
||||
assertThat(format(CONVERSION_SERVICE.convert(now, Date.class), "HH:mm:ss.SSS")).isEqualTo(now.toString()); |
||||
} |
||||
|
||||
@Test // DATACMNS-623
|
||||
void convertsDateToInstant() { |
||||
|
||||
Date now = new Date(); |
||||
assertThat(CONVERSION_SERVICE.convert(now, Instant.class)).isEqualTo(toInstant(now)); |
||||
} |
||||
|
||||
@Test // DATACMNS-623
|
||||
void convertsInstantToDate() { |
||||
|
||||
Date now = new Date(); |
||||
assertThat(CONVERSION_SERVICE.convert(toInstant(now), Date.class)).isEqualTo(now); |
||||
} |
||||
|
||||
@Test |
||||
void convertsZoneIdToStringAndBack() { |
||||
|
||||
Map<String, ZoneId> ids = new HashMap<>(); |
||||
ids.put("Europe/Berlin", ZoneId.of("Europe/Berlin")); |
||||
ids.put("+06:00", ZoneId.of("+06:00")); |
||||
|
||||
for (Entry<String, ZoneId> entry : ids.entrySet()) { |
||||
assertThat(CONVERSION_SERVICE.convert(entry.getValue(), String.class)).isEqualTo(entry.getKey()); |
||||
assertThat(CONVERSION_SERVICE.convert(entry.getKey(), ZoneId.class)).isEqualTo(entry.getValue()); |
||||
} |
||||
} |
||||
|
||||
private static String format(Date date, String format) { |
||||
return new SimpleDateFormat(format).format(date); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue