Skip to content

Commit ecf49c3

Browse files
sjoshidsjoshid
sjoshid
authored and
sjoshid
committed
1) Lot of refactoring.
1 parent 8c6e2f8 commit ecf49c3

File tree

1 file changed

+126
-10
lines changed

1 file changed

+126
-10
lines changed

src/main/java/org/influxdb/impl/InfluxDBResultMapper.java

+126-10
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
*/
2121
package org.influxdb.impl;
2222

23+
import org.influxdb.InfluxDBMapperException;
24+
import org.influxdb.annotation.Column;
25+
import org.influxdb.annotation.Measurement;
26+
import org.influxdb.dto.QueryResult;
27+
2328
import java.lang.reflect.Field;
2429
import java.lang.reflect.InvocationTargetException;
2530
import java.lang.reflect.Method;
@@ -35,11 +40,6 @@
3540
import java.util.concurrent.ConcurrentMap;
3641
import java.util.concurrent.TimeUnit;
3742

38-
import org.influxdb.InfluxDBMapperException;
39-
import org.influxdb.annotation.Column;
40-
import org.influxdb.annotation.Measurement;
41-
import org.influxdb.dto.QueryResult;
42-
4343
/**
4444
* Main class responsible for mapping a QueryResult to a POJO.
4545
*
@@ -335,9 +335,12 @@ <T> void setFieldValue(final T object, final Field field, final Method fieldSett
335335
if (!field.isAccessible()) {
336336
field.setAccessible(true);
337337
}
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)) {
341344
return;
342345
}
343346
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
351354
}
352355
}
353356

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,
355471
final TimeUnit precision)
356472
throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
357473
if (String.class.isAssignableFrom(fieldType)) {
@@ -465,7 +581,7 @@ <T> boolean fieldValueForPrimitiveWrappersModified(final Class<?> fieldType, fin
465581
return true;
466582
}
467583
return false;
468-
}
584+
}*/
469585

470586
private Long toMillis(final long value, final TimeUnit precision) {
471587

0 commit comments

Comments
 (0)