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")));
+ }
}