Skip to content

Commit 57935fb

Browse files
hacking part II
1 parent b429cca commit 57935fb

File tree

3 files changed

+22
-23
lines changed

3 files changed

+22
-23
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoConverters.java

-16
Original file line numberDiff line numberDiff line change
@@ -91,27 +91,11 @@ private MongoConverters() {}
9191
*/
9292
static Collection<Object> getConvertersToRegister() {
9393

94-
Environment env = new StandardEnvironment();
95-
boolean flagPresent = env.containsProperty("mongo.decimal128.representation");
96-
boolean decimalToString = !flagPresent || env.getProperty("mongo.decimal128.representation", String.class, "string").equals("string");
97-
9894
List<Object> converters = new ArrayList<>();
9995

100-
if(decimalToString) {
101-
converters.add(BigDecimalToStringConverter.INSTANCE);
102-
converters.add(StringToBigDecimalConverter.INSTANCE);
103-
} else {
104-
//converters.add(new NumberToNumberConverter<>())
105-
}
106-
10796
converters.add(BigDecimalToDecimal128Converter.INSTANCE);
10897
converters.add(Decimal128ToBigDecimalConverter.INSTANCE);
10998

110-
if(decimalToString) {
111-
converters.add(BigIntegerToStringConverter.INSTANCE);
112-
converters.add(StringToBigIntegerConverter.INSTANCE);
113-
}
114-
11599
converters.add(URLToStringConverter.INSTANCE);
116100
converters.add(StringToURLConverter.INSTANCE);
117101
converters.add(DocumentToStringConverter.INSTANCE);

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoCustomConversions.java

+21-6
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@
4747
import org.springframework.data.convert.SimplePropertyValueConversions;
4848
import org.springframework.data.convert.WritingConverter;
4949
import org.springframework.data.mapping.model.SimpleTypeHolder;
50+
import org.springframework.data.mongodb.core.convert.MongoConverters.BigDecimalToStringConverter;
51+
import org.springframework.data.mongodb.core.convert.MongoConverters.BigIntegerToStringConverter;
52+
import org.springframework.data.mongodb.core.convert.MongoConverters.StringToBigDecimalConverter;
53+
import org.springframework.data.mongodb.core.convert.MongoConverters.StringToBigIntegerConverter;
5054
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
5155
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
5256
import org.springframework.data.mongodb.core.mapping.MongoSimpleTypes;
@@ -157,16 +161,16 @@ public static class MongoConverterConfigurationAdapter {
157161
private static final Set<Class<?>> JAVA_DRIVER_TIME_SIMPLE_TYPES = Set.of(LocalDate.class, LocalTime.class, LocalDateTime.class);
158162

159163
private boolean useNativeDriverJavaTimeCodecs = false;
160-
private boolean defaultToDecimal128;
164+
private String numericFormat;
161165
private final List<Object> customConverters = new ArrayList<>();
162166

163167
private final PropertyValueConversions internalValueConversion = PropertyValueConversions.simple(it -> {});
164168
private PropertyValueConversions propertyValueConversions = internalValueConversion;
165169

166170
{
167171
Environment env = new StandardEnvironment();
168-
boolean flagPresent = env.containsProperty("mongo.decimal128.representation");
169-
defaultToDecimal128 = !flagPresent || env.getProperty("mongo.decimal128.representation", String.class, "string").equals("string");
172+
boolean flagPresent = env.containsProperty("mongo.numeric.format");
173+
numericFormat = flagPresent ? env.getProperty("mongo.numeric.format", String.class, "string") : "string";
170174
}
171175

172176
/**
@@ -308,6 +312,10 @@ public MongoConverterConfigurationAdapter useSpringDataJavaTimeCodecs() {
308312
return useNativeDriverJavaTimeCodecs(false);
309313
}
310314

315+
public MongoConverterConfigurationAdapter numericFormat(String format) {
316+
this.numericFormat = format;
317+
return this;
318+
}
311319
/**
312320
* Optionally set the {@link PropertyValueConversions} to be applied during mapping.
313321
* <p>
@@ -357,17 +365,24 @@ ConverterConfiguration createConverterConfiguration() {
357365
svc.init();
358366
}
359367

360-
// TODO: all the config must go here now and omg get rid of the static blocks!!
368+
List<Object> converters = new ArrayList<>(STORE_CONVERTERS.size() + 7);
369+
if(numericFormat.equals("string")) {
370+
converters.add(BigDecimalToStringConverter.INSTANCE);
371+
converters.add(StringToBigDecimalConverter.INSTANCE);
372+
converters.add(BigIntegerToStringConverter.INSTANCE);
373+
converters.add(StringToBigIntegerConverter.INSTANCE);
374+
}
361375

362376
if (!useNativeDriverJavaTimeCodecs) {
363-
return new ConverterConfiguration(STORE_CONVERSIONS, this.customConverters, convertiblePair -> true,
377+
378+
converters.addAll(customConverters);
379+
return new ConverterConfiguration(STORE_CONVERSIONS, converters, convertiblePair -> true,
364380
this.propertyValueConversions);
365381
}
366382

367383
/*
368384
* We need to have those converters using UTC as the default ones would go on with the systemDefault.
369385
*/
370-
List<Object> converters = new ArrayList<>(STORE_CONVERTERS.size() + 3);
371386
converters.add(DateToUtcLocalDateConverter.INSTANCE);
372387
converters.add(DateToUtcLocalTimeConverter.INSTANCE);
373388
converters.add(DateToUtcLocalDateTimeConverter.INSTANCE);

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3376,7 +3376,7 @@ void convertsBigIntegerToDecimal128IfFieldTypeIndicatesConversion() {
33763376
}
33773377

33783378
@Test // GH-3444
3379-
@SetSystemProperty(key = "mongo.decimal128.representation", value = "decimal128")
3379+
@SetSystemProperty(key = "mongo.numeric.format", value = "decimal128")
33803380
void usesConfiguredNumericFormat() {
33813381

33823382
MongoCustomConversions conversions = new MongoCustomConversions(

0 commit comments

Comments
 (0)