Skip to content

Commit 98da8be

Browse files
author
Thomas Risberg
committed
DATADOC-80 changed setCustomConverters to take a Set<Object> instead of a List similar to ConversionServiceFactory.registerConverters(…)
1 parent 9324ae2 commit 98da8be

File tree

8 files changed

+34
-9
lines changed

8 files changed

+34
-9
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/AbstractMongoConverter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.Iterator;
2424
import java.util.List;
2525
import java.util.Map;
26+
import java.util.Set;
2627

2728
import com.mongodb.BasicDBList;
2829
import com.mongodb.BasicDBObject;
@@ -100,4 +101,6 @@ public BasicDBList maybeConvertList(BasicDBList dbl) {
100101
return newDbl;
101102
}
102103

104+
public abstract void setCustomConverters(Set<?> converters);
105+
103106
}

spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,9 @@ public MappingMongoConverter(
113113
*
114114
* @param converters
115115
*/
116-
public void setCustomConverters(List<Converter<?, ?>> converters) {
116+
public void setCustomConverters(Set<?> converters) {
117117
if (null != converters) {
118-
for (Converter<?, ?> c : converters) {
118+
for (Object c : converters) {
119119
registerConverter(c);
120120
}
121121
}
@@ -127,12 +127,23 @@ public void setCustomConverters(List<Converter<?, ?>> converters) {
127127
*
128128
* @param converter
129129
*/
130-
private void registerConverter(Converter<?, ?> converter) {
130+
private void registerConverter(Object converter) {
131131
Class<?>[] arguments = GenericTypeResolver.resolveTypeArguments(converter.getClass(), Converter.class);
132132
if (MONGO_TYPES.contains(arguments[1]) || MONGO_TYPES.contains(arguments[0])) {
133133
customTypeMapping.add(new ConvertiblePair(arguments[0], arguments[1]));
134134
}
135-
conversionService.addConverter(converter);
135+
boolean added = false;
136+
if (converter instanceof Converter) {
137+
this.conversionService.addConverter((Converter<?, ?>) converter);
138+
added = true;
139+
}
140+
if (converter instanceof ConverterFactory) {
141+
this.conversionService.addConverterFactory((ConverterFactory<?, ?>) converter);
142+
added = true;
143+
}
144+
if (!added) {
145+
throw new IllegalArgumentException("Given set contains element that is neither Converter nor ConverterFactory!");
146+
}
136147
}
137148

138149
private Class<?> getCustomTarget(Class<?> source, Class<?> expectedTargetType) {

spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/SimpleMongoConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ private void initializeConverters() {
176176
*
177177
* @param converters
178178
*/
179-
public void setCustomConverters(List<Converter<?, ?>> converters) {
179+
public void setCustomConverters(Set<?> converters) {
180180
for (Object converter : converters) {
181181
boolean added = false;
182182
if (converter instanceof Converter) {

spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoOperationsUnitTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.util.Arrays;
2222
import java.util.List;
23+
import java.util.Set;
2324

2425
import com.mongodb.BasicDBObject;
2526
import com.mongodb.DBObject;
@@ -82,6 +83,10 @@ public ObjectId convertObjectId(Object id) {
8283
public MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> getMappingContext() {
8384
return null;
8485
}
86+
87+
@Override
88+
public void setCustomConverters(Set<?> converters) {
89+
}
8590
};
8691
}
8792

spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/SimpleMongoConverterTests.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@
2929
import java.util.Arrays;
3030
import java.util.Date;
3131
import java.util.HashMap;
32+
import java.util.HashSet;
3233
import java.util.List;
3334
import java.util.Map;
35+
import java.util.Set;
3436

3537
import org.hamcrest.CoreMatchers;
3638
import org.joda.time.LocalDate;
@@ -327,7 +329,7 @@ public void convertsAddressCorrectly() {
327329
@Test
328330
public void convertsJodaTimeTypesCorrectly() {
329331

330-
List<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>();
332+
Set<Converter<?, ?>> converters = new HashSet<Converter<?, ?>>();
331333
converters.add(new LocalDateToDateConverter());
332334
converters.add(new DateToLocalDateConverter());
333335

spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/TestMongoConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.springframework.data.document.mongodb;
22

33
import java.util.ArrayList;
4+
import java.util.HashSet;
45
import java.util.List;
6+
import java.util.Set;
57

68
import org.springframework.context.annotation.Bean;
79
import org.springframework.core.convert.converter.Converter;
@@ -31,7 +33,7 @@ public String getMappingBasePackage() {
3133
protected void afterMappingMongoConverterCreation(
3234
MappingMongoConverter converter) {
3335
super.afterMappingMongoConverterCreation(converter);
34-
List<Converter<?, ?>> converterList = new ArrayList<Converter<?, ?>>();
36+
Set<Converter<?, ?>> converterList = new HashSet<Converter<?, ?>>();
3537
converterList.add(new org.springframework.data.document.mongodb.PersonReadConverter());
3638
converterList.add(new org.springframework.data.document.mongodb.PersonWriteConverter());
3739
converter.setCustomConverters(converterList);

spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/convert/CustomConvertersUnitTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public void setUp() throws Exception {
6868
when(dbObjectToBarConverter.convert(any(DBObject.class))).thenReturn(new Bar());
6969

7070
converter = new MappingMongoConverter(context);
71-
converter.setCustomConverters(Arrays.asList(barToDBObjectConverter, dbObjectToBarConverter));
71+
converter.setCustomConverters(new HashSet<Object>(Arrays.asList(barToDBObjectConverter, dbObjectToBarConverter)));
7272
}
7373

7474
@Test

spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
import java.util.ArrayList;
2323
import java.util.Collections;
2424
import java.util.Date;
25+
import java.util.HashSet;
2526
import java.util.List;
2627
import java.util.Locale;
2728
import java.util.Map;
29+
import java.util.Set;
2830

2931
import org.joda.time.LocalDate;
3032
import org.junit.Before;
@@ -71,7 +73,7 @@ public void convertsAddressCorrectly() {
7173
@Test
7274
public void convertsJodaTimeTypesCorrectly() {
7375

74-
List<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>();
76+
Set<Converter<?, ?>> converters = new HashSet<Converter<?, ?>>();
7577
converters.add(new LocalDateToDateConverter());
7678
converters.add(new DateToLocalDateConverter());
7779

0 commit comments

Comments
 (0)