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 549c3da55..14054d84c 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 @@ -103,8 +103,6 @@ public class CustomConversions { toRegister.addAll(converters); toRegister.add(CustomToStringConverter.INSTANCE); toRegister.addAll(MongoConverters.getConvertersToRegister()); - toRegister.add(NumberToNumberConverterFactory.INSTANCE); - toRegister.addAll(JodaTimeConverters.getConvertersToRegister()); toRegister.addAll(GeoConverters.getConvertersToRegister()); toRegister.addAll(Jsr310Converters.getConvertersToRegister()); @@ -168,7 +166,8 @@ public class CustomConversions { } if (!added) { - throw new IllegalArgumentException("Given set contains element that is neither Converter nor ConverterFactory!"); + throw new IllegalArgumentException( + "Given set contains element that is neither Converter nor ConverterFactory!"); } } } @@ -398,6 +397,10 @@ public class CustomConversions { INSTANCE; + /* + * (non-Javadoc) + * @see org.springframework.core.convert.converter.GenericConverter#getConvertibleTypes() + */ public Set getConvertibleTypes() { ConvertiblePair localeToString = new ConvertiblePair(Locale.class, String.class); @@ -406,6 +409,10 @@ public class CustomConversions { return new HashSet(Arrays.asList(localeToString, booleanToString)); } + /* + * (non-Javadoc) + * @see org.springframework.core.convert.converter.GenericConverter#convert(java.lang.Object, org.springframework.core.convert.TypeDescriptor, org.springframework.core.convert.TypeDescriptor) + */ public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { return source.toString(); } 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 ddc541c21..f11403edb 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 @@ -21,10 +21,10 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Collection; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; import java.util.Currency; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; import org.bson.types.Code; import org.bson.types.ObjectId; @@ -37,6 +37,7 @@ import org.springframework.data.convert.ReadingConverter; import org.springframework.data.convert.WritingConverter; import org.springframework.data.mongodb.core.query.Term; import org.springframework.data.mongodb.core.script.NamedMongoScript; +import org.springframework.util.Assert; import org.springframework.util.NumberUtils; import org.springframework.util.StringUtils; @@ -64,9 +65,9 @@ abstract class MongoConverters { * @return * @since 1.9 */ - public static Collection> getConvertersToRegister() { + public static Collection getConvertersToRegister() { - List> converters = new ArrayList>(); + List converters = new ArrayList(); converters.add(BigDecimalToStringConverter.INSTANCE); converters.add(StringToBigDecimalConverter.INSTANCE); @@ -80,6 +81,7 @@ abstract class MongoConverters { converters.add(DBObjectToNamedMongoScriptCoverter.INSTANCE); converters.add(CurrencyToStringConverter.INSTANCE); converters.add(StringToCurrencyConverter.INSTANCE); + converters.add(NumberToNumberConverterFactory.INSTANCE); return converters; } @@ -264,7 +266,7 @@ abstract class MongoConverters { } } -/** + /** * {@link Converter} implementation converting {@link Currency} into its ISO 4217 {@link String} representation. * * @author Christoph Strobl @@ -315,34 +317,55 @@ abstract class MongoConverters { * @since 1.9 */ @WritingConverter - public static enum NumberToNumberConverterFactory implements ConverterFactory, ConditionalConverter { + public static enum NumberToNumberConverterFactory implements ConverterFactory,ConditionalConverter { INSTANCE; + /* + * (non-Javadoc) + * @see org.springframework.core.convert.converter.ConverterFactory#getConverter(java.lang.Class) + */ @Override public Converter getConverter(Class targetType) { - return new NumberToNumber(targetType); + return new NumberToNumberConverter(targetType); } + /* + * (non-Javadoc) + * @see org.springframework.core.convert.converter.ConditionalConverter#matches(org.springframework.core.convert.TypeDescriptor, org.springframework.core.convert.TypeDescriptor) + */ @Override public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { return !sourceType.equals(targetType); } - private final static class NumberToNumber implements Converter { + private final static class NumberToNumberConverter implements Converter { private final Class targetType; - public NumberToNumber(Class targetType) { + /** + * Creates a new {@link NumberToNumberConverter} for the given target type. + * + * @param targetType must not be {@literal null}. + */ + public NumberToNumberConverter(Class targetType) { + + Assert.notNull(targetType, "Target type must not be null!"); + this.targetType = targetType; } + /* + * (non-Javadoc) + * @see org.springframework.core.convert.converter.Converter#convert(java.lang.Object) + */ @Override public T convert(Number source) { if (source instanceof AtomicInteger) { return NumberUtils.convertNumberToTargetClass(((AtomicInteger) source).get(), this.targetType); } + if (source instanceof AtomicLong) { return NumberUtils.convertNumberToTargetClass(((AtomicLong) source).get(), this.targetType); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/NumberToNumberConverterFactoryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/NumberToNumberConverterFactoryUnitTests.java index 6957764bd..efce959f5 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/NumberToNumberConverterFactoryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/NumberToNumberConverterFactoryUnitTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015-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.