From 37cc6efc8e423503a8c30056790401aa77e5f5e0 Mon Sep 17 00:00:00 2001 From: Michael Reiche <48999328+mikereiche@users.noreply.github.com> Date: Fri, 21 Apr 2023 15:29:37 -0700 Subject: [PATCH] Add YearMonth converter. (#1722) Closes #1720. --- .../core/convert/OtherConverters.java | 25 +++++++++++++++ .../MappingCouchbaseConverterTests.java | 32 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/src/main/java/org/springframework/data/couchbase/core/convert/OtherConverters.java b/src/main/java/org/springframework/data/couchbase/core/convert/OtherConverters.java index e89786bf..71f2ebaa 100644 --- a/src/main/java/org/springframework/data/couchbase/core/convert/OtherConverters.java +++ b/src/main/java/org/springframework/data/couchbase/core/convert/OtherConverters.java @@ -22,6 +22,7 @@ import java.io.Writer; import java.math.BigDecimal; import java.math.BigInteger; import java.nio.charset.StandardCharsets; +import java.time.YearMonth; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -83,6 +84,8 @@ public final class OtherConverters { converters.add(MapToJsonObject.INSTANCE); converters.add(JsonArrayToCouchbaseList.INSTANCE); converters.add(CouchbaseListToJsonArray.INSTANCE); + converters.add(YearMonthToStringConverter.INSTANCE); + converters.add(StringToYearMonthConverter.INSTANCE); // EnumToObject, IntegerToEnumConverterFactory and StringToEnumConverterFactory are // registered in // {@link org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration#customConversions( @@ -329,4 +332,26 @@ public final class OtherConverters { } } + @WritingConverter + public enum YearMonthToStringConverter implements Converter { + + INSTANCE; + + @Override + public String convert(YearMonth source) { + return source.toString(); + } + } + + @ReadingConverter + public enum StringToYearMonthConverter implements Converter { + + INSTANCE; + + @Override + public YearMonth convert(String source) { + return YearMonth.parse(source); + } + } + } diff --git a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java index 54811492..e8d80e7c 100644 --- a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java @@ -25,6 +25,7 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.text.ChoiceFormat; import java.time.LocalDateTime; +import java.time.YearMonth; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Arrays; @@ -288,6 +289,28 @@ public class MappingCouchbaseConverterTests { assertThat(user.getId()).isEqualTo("001"); } + @Test + void writesYearMonth() { + CouchbaseDocument converted = new CouchbaseDocument(); + YearMonthEntity entity = new YearMonthEntity(YearMonth.parse("2023-04")); + + converter.write(entity, converted); + Map result = converted.export(); + assertThat(result.get("_class")).isEqualTo(entity.getClass().getName()); + assertThat(result.get("attr0")).isEqualTo(entity.attr0.toString()); + assertThat(converted.getId()).isEqualTo(BaseEntity.ID); + } + + @Test + void readsYearMonth() { + CouchbaseDocument source = new CouchbaseDocument(); + source.put("_class", YearMonthEntity.class.getName()); + source.put("attr0", "2023-04"); + + YearMonthEntity converted = converter.read(YearMonthEntity.class, source); + assertThat(converted.attr0).isEqualTo(YearMonth.parse((String) source.get("attr0"))); + } + @Test void writesUninitializedValues() { CouchbaseDocument converted = new CouchbaseDocument(); @@ -786,6 +809,15 @@ public class MappingCouchbaseConverterTests { } } + static class YearMonthEntity extends BaseEntity { + private YearMonth attr0; + + public YearMonthEntity(YearMonth attr0) { + this.attr0 = attr0; + } + } + + static class BigDecimalEntity extends BaseEntity { private BigDecimal attr0;