DATADOC-80 changed setCustomConverters to take a Set<Object> instead of a List similar to ConversionServiceFactory.registerConverters(…)

This commit is contained in:
Thomas Risberg
2011-05-20 08:04:13 -04:00
parent 9324ae2593
commit 98da8beb67
8 changed files with 34 additions and 9 deletions

View File

@@ -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);
}

View File

@@ -113,9 +113,9 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App
*
* @param converters
*/
public void setCustomConverters(List<Converter<?, ?>> 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) {

View File

@@ -176,7 +176,7 @@ public class SimpleMongoConverter extends AbstractMongoConverter implements Init
*
* @param converters
*/
public void setCustomConverters(List<Converter<?, ?>> converters) {
public void setCustomConverters(Set<?> converters) {
for (Object converter : converters) {
boolean added = false;
if (converter instanceof Converter) {

View File

@@ -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<? extends MongoPersistentEntity<?>, MongoPersistentProperty> getMappingContext() {
return null;
}
@Override
public void setCustomConverters(Set<?> converters) {
}
};
}

View File

@@ -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<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>();
Set<Converter<?, ?>> converters = new HashSet<Converter<?, ?>>();
converters.add(new LocalDateToDateConverter());
converters.add(new DateToLocalDateConverter());

View File

@@ -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<Converter<?, ?>> converterList = new ArrayList<Converter<?, ?>>();
Set<Converter<?, ?>> converterList = new HashSet<Converter<?, ?>>();
converterList.add(new org.springframework.data.document.mongodb.PersonReadConverter());
converterList.add(new org.springframework.data.document.mongodb.PersonWriteConverter());
converter.setCustomConverters(converterList);

View File

@@ -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<Object>(Arrays.asList(barToDBObjectConverter, dbObjectToBarConverter)));
}
@Test

View File

@@ -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<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>();
Set<Converter<?, ?>> converters = new HashSet<Converter<?, ?>>();
converters.add(new LocalDateToDateConverter());
converters.add(new DateToLocalDateConverter());