From 98da8beb67870bde853ad6ec954bc2a7db01b8b9 Mon Sep 17 00:00:00 2001 From: Thomas Risberg Date: Fri, 20 May 2011 08:04:13 -0400 Subject: [PATCH] =?UTF-8?q?DATADOC-80=20changed=20setCustomConverters=20to?= =?UTF-8?q?=20take=20a=20Set=20instead=20of=20a=20List=20similar?= =?UTF-8?q?=20to=20ConversionServiceFactory.registerConverters(=E2=80=A6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../convert/AbstractMongoConverter.java | 3 +++ .../convert/MappingMongoConverter.java | 19 +++++++++++++++---- .../mongodb/convert/SimpleMongoConverter.java | 2 +- .../mongodb/MongoOperationsUnitTests.java | 5 +++++ .../mongodb/SimpleMongoConverterTests.java | 4 +++- .../mongodb/TestMongoConfiguration.java | 4 +++- .../convert/CustomConvertersUnitTests.java | 2 +- .../MappingMongoConverterUnitTests.java | 4 +++- 8 files changed, 34 insertions(+), 9 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/AbstractMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/AbstractMongoConverter.java index bd9d1c41e..10da8ca25 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/AbstractMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/AbstractMongoConverter.java @@ -23,6 +23,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; @@ -100,4 +101,6 @@ public abstract class AbstractMongoConverter implements MongoConverter { return newDbl; } + public abstract void setCustomConverters(Set converters); + } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java index 0c97dee72..604fdfb16 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java @@ -113,9 +113,9 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App * * @param converters */ - public void setCustomConverters(List> converters) { + public void setCustomConverters(Set converters) { if (null != converters) { - for (Converter c : converters) { + for (Object c : converters) { registerConverter(c); } } @@ -127,12 +127,23 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App * * @param converter */ - private void registerConverter(Converter converter) { + private void registerConverter(Object converter) { Class[] arguments = GenericTypeResolver.resolveTypeArguments(converter.getClass(), Converter.class); if (MONGO_TYPES.contains(arguments[1]) || MONGO_TYPES.contains(arguments[0])) { customTypeMapping.add(new ConvertiblePair(arguments[0], arguments[1])); } - conversionService.addConverter(converter); + boolean added = false; + if (converter instanceof Converter) { + this.conversionService.addConverter((Converter) converter); + added = true; + } + if (converter instanceof ConverterFactory) { + this.conversionService.addConverterFactory((ConverterFactory) converter); + added = true; + } + if (!added) { + throw new IllegalArgumentException("Given set contains element that is neither Converter nor ConverterFactory!"); + } } private Class getCustomTarget(Class source, Class expectedTargetType) { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/SimpleMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/SimpleMongoConverter.java index ce72ed43d..1704bfffd 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/SimpleMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/SimpleMongoConverter.java @@ -176,7 +176,7 @@ public class SimpleMongoConverter extends AbstractMongoConverter implements Init * * @param converters */ - public void setCustomConverters(List> converters) { + public void setCustomConverters(Set converters) { for (Object converter : converters) { boolean added = false; if (converter instanceof Converter) { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoOperationsUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoOperationsUnitTests.java index 27e1bd485..ba48bd520 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoOperationsUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoOperationsUnitTests.java @@ -20,6 +20,7 @@ import static org.junit.Assert.*; import java.util.Arrays; import java.util.List; +import java.util.Set; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; @@ -82,6 +83,10 @@ public abstract class MongoOperationsUnitTests { public MappingContext, MongoPersistentProperty> getMappingContext() { return null; } + + @Override + public void setCustomConverters(Set converters) { + } }; } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/SimpleMongoConverterTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/SimpleMongoConverterTests.java index 80c24c58b..10cc6cd8b 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/SimpleMongoConverterTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/SimpleMongoConverterTests.java @@ -29,8 +29,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.hamcrest.CoreMatchers; import org.joda.time.LocalDate; @@ -327,7 +329,7 @@ public class SimpleMongoConverterTests { @Test public void convertsJodaTimeTypesCorrectly() { - List> converters = new ArrayList>(); + Set> converters = new HashSet>(); converters.add(new LocalDateToDateConverter()); converters.add(new DateToLocalDateConverter()); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/TestMongoConfiguration.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/TestMongoConfiguration.java index 3573a003e..5d5390579 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/TestMongoConfiguration.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/TestMongoConfiguration.java @@ -1,7 +1,9 @@ package org.springframework.data.document.mongodb; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.springframework.context.annotation.Bean; import org.springframework.core.convert.converter.Converter; @@ -31,7 +33,7 @@ public class TestMongoConfiguration extends AbstractMongoConfiguration { protected void afterMappingMongoConverterCreation( MappingMongoConverter converter) { super.afterMappingMongoConverterCreation(converter); - List> converterList = new ArrayList>(); + Set> converterList = new HashSet>(); converterList.add(new org.springframework.data.document.mongodb.PersonReadConverter()); converterList.add(new org.springframework.data.document.mongodb.PersonWriteConverter()); converter.setCustomConverters(converterList); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/convert/CustomConvertersUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/convert/CustomConvertersUnitTests.java index 630adfad8..14bdbcfd9 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/convert/CustomConvertersUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/convert/CustomConvertersUnitTests.java @@ -68,7 +68,7 @@ public class CustomConvertersUnitTests { when(dbObjectToBarConverter.convert(any(DBObject.class))).thenReturn(new Bar()); converter = new MappingMongoConverter(context); - converter.setCustomConverters(Arrays.asList(barToDBObjectConverter, dbObjectToBarConverter)); + converter.setCustomConverters(new HashSet(Arrays.asList(barToDBObjectConverter, dbObjectToBarConverter))); } @Test diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java index f9dfe5959..c5263bcfd 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java @@ -22,9 +22,11 @@ import static org.junit.Assert.*; import java.util.ArrayList; import java.util.Collections; import java.util.Date; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import org.joda.time.LocalDate; import org.junit.Before; @@ -71,7 +73,7 @@ public class MappingMongoConverterUnitTests { @Test public void convertsJodaTimeTypesCorrectly() { - List> converters = new ArrayList>(); + Set> converters = new HashSet>(); converters.add(new LocalDateToDateConverter()); converters.add(new DateToLocalDateConverter());