20
20
*/
21
21
package org .influxdb .impl ;
22
22
23
+ import org .influxdb .InfluxDBMapperException ;
24
+ import org .influxdb .annotation .Column ;
25
+ import org .influxdb .annotation .Measurement ;
26
+ import org .influxdb .dto .QueryResult ;
27
+
23
28
import java .lang .reflect .Field ;
24
29
import java .lang .reflect .InvocationTargetException ;
25
30
import java .lang .reflect .Method ;
35
40
import java .util .concurrent .ConcurrentMap ;
36
41
import java .util .concurrent .TimeUnit ;
37
42
38
- import org .influxdb .InfluxDBMapperException ;
39
- import org .influxdb .annotation .Column ;
40
- import org .influxdb .annotation .Measurement ;
41
- import org .influxdb .dto .QueryResult ;
42
-
43
43
/**
44
44
* Main class responsible for mapping a QueryResult to a POJO.
45
45
*
@@ -335,9 +335,12 @@ <T> void setFieldValue(final T object, final Field field, final Method fieldSett
335
335
if (!field .isAccessible ()) {
336
336
field .setAccessible (true );
337
337
}
338
- if (fieldValueModified (fieldType , field , fieldSetter , object , value , precision )
339
- || fieldValueForPrimitivesModified (fieldType , field , fieldSetter , object , value )
340
- || fieldValueForPrimitiveWrappersModified (fieldType , field , fieldSetter , object , value )) {
338
+ if (assignInstant (fieldType , field , fieldSetter , object , value , precision )
339
+ || assignString (fieldType , field , fieldSetter , object , value )
340
+ || assignDouble (fieldType , field , fieldSetter , object , value )
341
+ || assignInteger (fieldType , field , fieldSetter , object , value )
342
+ || assignLong (fieldType , field , fieldSetter , object , value )
343
+ || assignBoolean (fieldType , field , fieldSetter , object , value )) {
341
344
return ;
342
345
}
343
346
String msg = "Class '%s' field '%s' is from an unsupported type '%s'." ;
@@ -351,7 +354,120 @@ <T> void setFieldValue(final T object, final Field field, final Method fieldSett
351
354
}
352
355
}
353
356
354
- <T > boolean fieldValueModified (final Class <?> fieldType , final Field field , final Method fieldSetter , final T object , final Object value ,
357
+ <T > boolean assignInstant (final Class <?> fieldType , final Field field , final Method fieldSetter , final T object , final Object value , final TimeUnit precision ) throws InvocationTargetException , IllegalAccessException {
358
+ boolean isInstantAssigned = false ;
359
+ if (Instant .class .isAssignableFrom (fieldType )) {
360
+ Instant instant ;
361
+ if (value instanceof String ) {
362
+ instant = Instant .from (RFC3339_FORMATTER .parse (String .valueOf (value )));
363
+ } else if (value instanceof Long ) {
364
+ instant = Instant .ofEpochMilli (toMillis ((long ) value , precision ));
365
+ } else if (value instanceof Double ) {
366
+ instant = Instant .ofEpochMilli (toMillis (((Double ) value ).longValue (), precision ));
367
+ } else if (value instanceof Integer ) {
368
+ instant = Instant .ofEpochMilli (toMillis (((Integer ) value ).longValue (), precision ));
369
+ } else {
370
+ throw new InfluxDBMapperException ("Unsupported type " + field .getClass () + " for field " + field .getName ());
371
+ }
372
+ if (fieldSetter != null && fieldSetter .isAccessible ()) {
373
+ fieldSetter .invoke (object , instant );
374
+ isInstantAssigned = true ;
375
+ } else {
376
+ field .set (object , instant );
377
+ isInstantAssigned = true ;
378
+ }
379
+ }
380
+ return isInstantAssigned ;
381
+ }
382
+
383
+ <T > boolean assignString (final Class <?> fieldType , final Field field , final Method fieldSetter , final T object , final Object value ) throws InvocationTargetException , IllegalAccessException {
384
+ boolean isStringAssigned = false ;
385
+ if (String .class .isAssignableFrom (fieldType )) {
386
+ final String stringValue = String .valueOf (value );
387
+ if (fieldSetter != null && fieldSetter .isAccessible ()) {
388
+ fieldSetter .invoke (object , stringValue );
389
+ isStringAssigned = true ;
390
+ } else {
391
+ field .set (object , stringValue );
392
+ isStringAssigned = true ;
393
+ }
394
+ }
395
+ return isStringAssigned ;
396
+ }
397
+
398
+ <T > boolean assignDouble (final Class <?> fieldType , final Field field , final Method fieldSetter , final T object , final Object value ) throws InvocationTargetException , IllegalAccessException {
399
+ boolean isDoubleAssigned = false ;
400
+ if (double .class .isAssignableFrom (fieldType ) || Double .class .isAssignableFrom (fieldType )) {
401
+ if (fieldSetter != null && fieldSetter .isAccessible ()) {
402
+ fieldSetter .invoke (object , value );
403
+ isDoubleAssigned = true ;
404
+ } else if (double .class .isAssignableFrom (fieldType )) {
405
+ final double doubleValue = (Double ) value ;
406
+ field .setDouble (object , doubleValue );
407
+ isDoubleAssigned = true ;
408
+ } else if (Double .class .isAssignableFrom (fieldType )) {
409
+ field .set (object , value );
410
+ isDoubleAssigned = true ;
411
+ }
412
+ }
413
+ return isDoubleAssigned ;
414
+ }
415
+
416
+ <T > boolean assignLong (final Class <?> fieldType , final Field field , final Method fieldSetter , final T object , final Object value ) throws InvocationTargetException , IllegalAccessException {
417
+ boolean isLongAssigned = false ;
418
+ if (long .class .isAssignableFrom (fieldType ) || Long .class .isAssignableFrom (fieldType )) {
419
+ final long longValue = ((Double ) value ).longValue ();
420
+ if (fieldSetter != null && fieldSetter .isAccessible ()) {
421
+ fieldSetter .invoke (object , longValue );
422
+ isLongAssigned = true ;
423
+ } else if (long .class .isAssignableFrom (fieldType )) {
424
+ field .setLong (object , longValue );
425
+ isLongAssigned = true ;
426
+ } else if (Long .class .isAssignableFrom (fieldType )) {
427
+ field .set (object , longValue );
428
+ isLongAssigned = true ;
429
+ }
430
+ }
431
+ return isLongAssigned ;
432
+ }
433
+
434
+ <T > boolean assignInteger (final Class <?> fieldType , final Field field , final Method fieldSetter , final T object , final Object value ) throws InvocationTargetException , IllegalAccessException {
435
+ boolean isIntegerAssigned = false ;
436
+ if (int .class .isAssignableFrom (fieldType ) || Integer .class .isAssignableFrom (fieldType )) {
437
+ final int intValue = ((Double ) value ).intValue ();
438
+ if (fieldSetter != null && fieldSetter .isAccessible ()) {
439
+ fieldSetter .invoke (object , intValue );
440
+ isIntegerAssigned = true ;
441
+ } else if (int .class .isAssignableFrom (fieldType )) {
442
+ field .setInt (object , intValue );
443
+ isIntegerAssigned = true ;
444
+ } else if (Integer .class .isAssignableFrom (fieldType )) {
445
+ field .set (object , intValue );
446
+ isIntegerAssigned = true ;
447
+ }
448
+ }
449
+ return isIntegerAssigned ;
450
+ }
451
+
452
+ <T > boolean assignBoolean (final Class <?> fieldType , final Field field , final Method fieldSetter , final T object , final Object value ) throws InvocationTargetException , IllegalAccessException {
453
+ boolean isBooleanAssigned = false ;
454
+ if (boolean .class .isAssignableFrom (fieldType ) || Boolean .class .isAssignableFrom (fieldType )) {
455
+ final boolean boolValue = Boolean .parseBoolean (String .valueOf (value ));
456
+ if (fieldSetter != null && fieldSetter .isAccessible ()) {
457
+ fieldSetter .invoke (object , boolValue );
458
+ isBooleanAssigned = true ;
459
+ } else if (boolean .class .isAssignableFrom (fieldType )) {
460
+ field .setBoolean (object , boolValue );
461
+ isBooleanAssigned = true ;
462
+ } else if (Boolean .class .isAssignableFrom (fieldType )) {
463
+ field .set (object , boolValue );
464
+ isBooleanAssigned = true ;
465
+ }
466
+ }
467
+ return isBooleanAssigned ;
468
+ }
469
+
470
+ /*<T> boolean fieldValueModified(final Class<?> fieldType, final Field field, final Method fieldSetter, final T object, final Object value,
355
471
final TimeUnit precision)
356
472
throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
357
473
if (String.class.isAssignableFrom(fieldType)) {
@@ -465,7 +581,7 @@ <T> boolean fieldValueForPrimitiveWrappersModified(final Class<?> fieldType, fin
465
581
return true;
466
582
}
467
583
return false;
468
- }
584
+ }*/
469
585
470
586
private Long toMillis (final long value , final TimeUnit precision ) {
471
587
0 commit comments