diff --git a/pom.xml b/pom.xml index 1d9b760700..fe6740801d 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.9.0.BUILD-SNAPSHOT + 1.9.0.DATAMONGO-1372-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml index fd36debedd..f618f4baf7 100644 --- a/spring-data-mongodb-cross-store/pom.xml +++ b/spring-data-mongodb-cross-store/pom.xml @@ -6,7 +6,7 @@ org.springframework.data spring-data-mongodb-parent - 1.9.0.BUILD-SNAPSHOT + 1.9.0.DATAMONGO-1372-SNAPSHOT ../pom.xml @@ -48,7 +48,7 @@ org.springframework.data spring-data-mongodb - 1.9.0.BUILD-SNAPSHOT + 1.9.0.DATAMONGO-1372-SNAPSHOT diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 28c91bc332..4ccdcf1e92 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 1.9.0.BUILD-SNAPSHOT + 1.9.0.DATAMONGO-1372-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-log4j/pom.xml b/spring-data-mongodb-log4j/pom.xml index dfe146ff96..1c1e1137a5 100644 --- a/spring-data-mongodb-log4j/pom.xml +++ b/spring-data-mongodb-log4j/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.9.0.BUILD-SNAPSHOT + 1.9.0.DATAMONGO-1372-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 0fcdb2f39f..12ef2cda59 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -11,7 +11,7 @@ org.springframework.data spring-data-mongodb-parent - 1.9.0.BUILD-SNAPSHOT + 1.9.0.DATAMONGO-1372-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/CustomConversions.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/CustomConversions.java index d782492f50..1111924812 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/CustomConversions.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/CustomConversions.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2015 the original author or authors. + * Copyright 2011-2016 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. @@ -42,16 +42,6 @@ import org.springframework.data.convert.ThreeTenBackPortConverters; import org.springframework.data.convert.WritingConverter; import org.springframework.data.mapping.model.SimpleTypeHolder; -import org.springframework.data.mongodb.core.convert.MongoConverters.BigDecimalToStringConverter; -import org.springframework.data.mongodb.core.convert.MongoConverters.BigIntegerToStringConverter; -import org.springframework.data.mongodb.core.convert.MongoConverters.DBObjectToNamedMongoScriptCoverter; -import org.springframework.data.mongodb.core.convert.MongoConverters.DBObjectToStringConverter; -import org.springframework.data.mongodb.core.convert.MongoConverters.NamedMongoScriptToDBObjectConverter; -import org.springframework.data.mongodb.core.convert.MongoConverters.StringToBigDecimalConverter; -import org.springframework.data.mongodb.core.convert.MongoConverters.StringToBigIntegerConverter; -import org.springframework.data.mongodb.core.convert.MongoConverters.StringToURLConverter; -import org.springframework.data.mongodb.core.convert.MongoConverters.TermToStringConverter; -import org.springframework.data.mongodb.core.convert.MongoConverters.URLToStringConverter; import org.springframework.data.mongodb.core.mapping.MongoSimpleTypes; import org.springframework.data.util.CacheValue; import org.springframework.util.Assert; @@ -112,16 +102,7 @@ public CustomConversions(List converters) { // Add user provided converters to make sure they can override the defaults toRegister.addAll(converters); toRegister.add(CustomToStringConverter.INSTANCE); - toRegister.add(BigDecimalToStringConverter.INSTANCE); - toRegister.add(StringToBigDecimalConverter.INSTANCE); - toRegister.add(BigIntegerToStringConverter.INSTANCE); - toRegister.add(StringToBigIntegerConverter.INSTANCE); - toRegister.add(URLToStringConverter.INSTANCE); - toRegister.add(StringToURLConverter.INSTANCE); - toRegister.add(DBObjectToStringConverter.INSTANCE); - toRegister.add(TermToStringConverter.INSTANCE); - toRegister.add(NamedMongoScriptToDBObjectConverter.INSTANCE); - toRegister.add(DBObjectToNamedMongoScriptCoverter.INSTANCE); + toRegister.addAll(MongoConverters.getConvertersToRegister()); toRegister.addAll(JodaTimeConverters.getConvertersToRegister()); toRegister.addAll(GeoConverters.getConvertersToRegister()); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoConverters.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoConverters.java index dfc796628d..20e2960313 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoConverters.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoConverters.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2015 the original author or authors. + * Copyright 2011-2016 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. @@ -19,6 +19,10 @@ import java.math.BigInteger; import java.net.MalformedURLException; import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Currency; +import java.util.List; import org.bson.types.Code; import org.bson.types.ObjectId; @@ -49,6 +53,32 @@ abstract class MongoConverters { */ private MongoConverters() {} + /** + * Returns the converters to be registered. + * + * @return + * @since 1.9 + */ + public static Collection> getConvertersToRegister() { + + List> converters = new ArrayList>(); + + converters.add(BigDecimalToStringConverter.INSTANCE); + converters.add(StringToBigDecimalConverter.INSTANCE); + converters.add(BigIntegerToStringConverter.INSTANCE); + converters.add(StringToBigIntegerConverter.INSTANCE); + converters.add(URLToStringConverter.INSTANCE); + converters.add(StringToURLConverter.INSTANCE); + converters.add(DBObjectToStringConverter.INSTANCE); + converters.add(TermToStringConverter.INSTANCE); + converters.add(NamedMongoScriptToDBObjectConverter.INSTANCE); + converters.add(DBObjectToNamedMongoScriptCoverter.INSTANCE); + converters.add(CurrencyToStringConverter.INSTANCE); + converters.add(StringToCurrencyConverter.INSTANCE); + + return converters; + } + /** * Simple singleton to convert {@link ObjectId}s to their {@link String} representation. * @@ -228,4 +258,54 @@ public DBObject convert(NamedMongoScript source) { return builder.get(); } } + + /** + * {@link Converter} implementation converting {@link Currency} into its ISO 4217 {@link String} representation. + * + * @author Christoph Strobl + * @since 1.9 + */ + @WritingConverter + public static enum CurrencyToStringConverter implements Converter { + INSTANCE; + + /* + * (non-Javadoc) + * @see org.springframework.core.convert.converter.Converter#convert(java.lang.Object) + */ + @Override + public String convert(Currency source) { + + if (source == null) { + return null; + } + + return source.getCurrencyCode(); + } + } + + /** + * {@link Converter} implementation converting ISO 4217 {@link String} into {@link Currency}. + * + * @author Christoph Strobl + * @since 1.9 + */ + @ReadingConverter + public static enum StringToCurrencyConverter implements Converter { + INSTANCE; + + /* + * (non-Javadoc) + * @see org.springframework.core.convert.converter.Converter#convert(java.lang.Object) + */ + @Override + public Currency convert(String source) { + + if (!StringUtils.hasText(source)) { + return null; + } + + return Currency.getInstance(source); + } + } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/CustomConversionsUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/CustomConversionsUnitTests.java index 924b30bce3..ecba618599 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/CustomConversionsUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/CustomConversionsUnitTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2015 the original author or authors. + * Copyright 2011-2016 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. @@ -24,6 +24,7 @@ import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Collections; +import java.util.Currency; import java.util.Date; import java.util.Locale; import java.util.UUID; @@ -271,6 +272,18 @@ public void registersConverterFactoryCorrectly() { assertThat(customConversions.getCustomWriteTarget(String.class, SimpleDateFormat.class), notNullValue()); } + /** + * @see DATAMONGO-1372 + */ + @Test + public void registersConvertersForCurrency() { + + CustomConversions customConversions = new CustomConversions(); + + assertThat(customConversions.hasCustomWriteTarget(Currency.class), is(true)); + assertThat(customConversions.hasCustomReadTarget(String.class, Currency.class), is(true)); + } + private static Class createProxyTypeFor(Class type) { ProxyFactory factory = new ProxyFactory(); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MongoConvertersUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MongoConvertersUnitTests.java index 0f4ace0e02..6b7103afe7 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MongoConvertersUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MongoConvertersUnitTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2014 by the original author(s). + * Copyright (c) 2011-2016 by the original author(s). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ import static org.junit.Assert.*; import java.math.BigDecimal; +import java.util.Currency; import org.junit.Test; import org.springframework.data.geo.Box; @@ -27,7 +28,9 @@ import org.springframework.data.geo.Polygon; import org.springframework.data.geo.Shape; import org.springframework.data.mongodb.core.convert.MongoConverters.BigDecimalToStringConverter; +import org.springframework.data.mongodb.core.convert.MongoConverters.CurrencyToStringConverter; import org.springframework.data.mongodb.core.convert.MongoConverters.StringToBigDecimalConverter; +import org.springframework.data.mongodb.core.convert.MongoConverters.StringToCurrencyConverter; import org.springframework.data.mongodb.core.geo.Sphere; import com.mongodb.DBObject; @@ -37,6 +40,7 @@ * * @author Oliver Gierke * @author Thomas Darimont + * @author Christoph Strobl */ public class MongoConvertersUnitTests { @@ -120,4 +124,20 @@ public void convertsPointToListAndBackCorrectly() { assertThat(converted, is((org.springframework.data.geo.Point) point)); } + + /** + * @see DATAMONGO-1372 + */ + @Test + public void convertsCurrencyToStringCorrectly() { + assertThat(CurrencyToStringConverter.INSTANCE.convert(Currency.getInstance("USD")), is("USD")); + } + + /** + * @see DATAMONGO-1372 + */ + @Test + public void convertsStringToCurrencyCorrectly() { + assertThat(StringToCurrencyConverter.INSTANCE.convert("USD"), is(Currency.getInstance("USD"))); + } }