21
21
import java .net .URL ;
22
22
import java .util .ArrayList ;
23
23
import java .util .Collection ;
24
- import java .util .concurrent .atomic .AtomicInteger ;
25
- import java .util .concurrent .atomic .AtomicLong ;
26
24
import java .util .Currency ;
27
25
import java .util .List ;
26
+ import java .util .concurrent .atomic .AtomicInteger ;
27
+ import java .util .concurrent .atomic .AtomicLong ;
28
28
29
29
import org .bson .types .Code ;
30
30
import org .bson .types .ObjectId ;
37
37
import org .springframework .data .convert .WritingConverter ;
38
38
import org .springframework .data .mongodb .core .query .Term ;
39
39
import org .springframework .data .mongodb .core .script .NamedMongoScript ;
40
+ import org .springframework .util .Assert ;
40
41
import org .springframework .util .NumberUtils ;
41
42
import org .springframework .util .StringUtils ;
42
43
@@ -64,9 +65,9 @@ private MongoConverters() {}
64
65
* @return
65
66
* @since 1.9
66
67
*/
67
- public static Collection <Converter <?, ?> > getConvertersToRegister () {
68
+ public static Collection <Object > getConvertersToRegister () {
68
69
69
- List <Converter <?, ?>> converters = new ArrayList <Converter <?, ?> >();
70
+ List <Object > converters = new ArrayList <Object >();
70
71
71
72
converters .add (BigDecimalToStringConverter .INSTANCE );
72
73
converters .add (StringToBigDecimalConverter .INSTANCE );
@@ -80,6 +81,7 @@ private MongoConverters() {}
80
81
converters .add (DBObjectToNamedMongoScriptCoverter .INSTANCE );
81
82
converters .add (CurrencyToStringConverter .INSTANCE );
82
83
converters .add (StringToCurrencyConverter .INSTANCE );
84
+ converters .add (NumberToNumberConverterFactory .INSTANCE );
83
85
84
86
return converters ;
85
87
}
@@ -264,7 +266,7 @@ public DBObject convert(NamedMongoScript source) {
264
266
}
265
267
}
266
268
267
- /**
269
+ /**
268
270
* {@link Converter} implementation converting {@link Currency} into its ISO 4217 {@link String} representation.
269
271
*
270
272
* @author Christoph Strobl
@@ -315,34 +317,55 @@ public Currency convert(String source) {
315
317
* @since 1.9
316
318
*/
317
319
@ WritingConverter
318
- public static enum NumberToNumberConverterFactory implements ConverterFactory <Number , Number >, ConditionalConverter {
320
+ public static enum NumberToNumberConverterFactory implements ConverterFactory <Number , Number >,ConditionalConverter {
319
321
320
322
INSTANCE ;
321
323
324
+ /*
325
+ * (non-Javadoc)
326
+ * @see org.springframework.core.convert.converter.ConverterFactory#getConverter(java.lang.Class)
327
+ */
322
328
@ Override
323
329
public <T extends Number > Converter <Number , T > getConverter (Class <T > targetType ) {
324
- return new NumberToNumber <T >(targetType );
330
+ return new NumberToNumberConverter <T >(targetType );
325
331
}
326
332
333
+ /*
334
+ * (non-Javadoc)
335
+ * @see org.springframework.core.convert.converter.ConditionalConverter#matches(org.springframework.core.convert.TypeDescriptor, org.springframework.core.convert.TypeDescriptor)
336
+ */
327
337
@ Override
328
338
public boolean matches (TypeDescriptor sourceType , TypeDescriptor targetType ) {
329
339
return !sourceType .equals (targetType );
330
340
}
331
341
332
- private final static class NumberToNumber <T extends Number > implements Converter <Number , T > {
342
+ private final static class NumberToNumberConverter <T extends Number > implements Converter <Number , T > {
333
343
334
344
private final Class <T > targetType ;
335
345
336
- public NumberToNumber (Class <T > targetType ) {
346
+ /**
347
+ * Creates a new {@link NumberToNumberConverter} for the given target type.
348
+ *
349
+ * @param targetType must not be {@literal null}.
350
+ */
351
+ public NumberToNumberConverter (Class <T > targetType ) {
352
+
353
+ Assert .notNull (targetType , "Target type must not be null!" );
354
+
337
355
this .targetType = targetType ;
338
356
}
339
357
358
+ /*
359
+ * (non-Javadoc)
360
+ * @see org.springframework.core.convert.converter.Converter#convert(java.lang.Object)
361
+ */
340
362
@ Override
341
363
public T convert (Number source ) {
342
364
343
365
if (source instanceof AtomicInteger ) {
344
366
return NumberUtils .convertNumberToTargetClass (((AtomicInteger ) source ).get (), this .targetType );
345
367
}
368
+
346
369
if (source instanceof AtomicLong ) {
347
370
return NumberUtils .convertNumberToTargetClass (((AtomicLong ) source ).get (), this .targetType );
348
371
}
0 commit comments