Skip to content

Commit 7477553

Browse files
sjoshidsjoshid
sjoshid
authored and
sjoshid
committed
1) Calling field setters if available before falling back to setting fields directly.
1 parent ecf49c3 commit 7477553

File tree

1 file changed

+9
-124
lines changed

1 file changed

+9
-124
lines changed

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

+9-124
Original file line numberDiff line numberDiff line change
@@ -220,12 +220,11 @@ void cacheMeasurementClass(final Class<?>... classVarAgrs) {
220220
if (influxColumnAndFieldMap == null) {
221221
influxColumnAndFieldMap = initialMap;
222222
}
223-
//sj_todo change var name.
224-
ConcurrentMap<String, Method> initialMap2 = new ConcurrentHashMap<>();
225-
//sj_todo change var name.
226-
ConcurrentMap<String, Method> influxColumnAndFieldMap2 = CLASS_SETTERS_CACHE.putIfAbsent(clazz.getName(), initialMap2);
227-
if (influxColumnAndFieldMap2 == null) {
228-
influxColumnAndFieldMap2 = initialMap2;
223+
224+
ConcurrentMap<String, Method> classFieldSetters = new ConcurrentHashMap<>();
225+
ConcurrentMap<String, Method> fieldSetters = CLASS_SETTERS_CACHE.putIfAbsent(clazz.getName(), classFieldSetters);
226+
if (fieldSetters == null) {
227+
fieldSetters = classFieldSetters;
229228
}
230229

231230
Class<?> c = clazz;
@@ -237,9 +236,8 @@ void cacheMeasurementClass(final Class<?>... classVarAgrs) {
237236
String setterName = "set".concat(fieldName.substring(0,1).toUpperCase().concat(fieldName.substring(1)));
238237
try {
239238
Method setter = c.getDeclaredMethod(setterName, field.getType());
240-
influxColumnAndFieldMap2.put(colAnnotation.name(), setter);
239+
fieldSetters.put(colAnnotation.name(), setter);
241240
} catch (NoSuchMethodException e) {
242-
//e.printStackTrace();
243241
//sj_todo ignore? maybe print a warning that no setter found?
244242
}
245243
influxColumnAndFieldMap.put(colAnnotation.name(), field);
@@ -335,6 +333,9 @@ <T> void setFieldValue(final T object, final Field field, final Method fieldSett
335333
if (!field.isAccessible()) {
336334
field.setAccessible(true);
337335
}
336+
if (!fieldSetter.isAccessible()) {
337+
fieldSetter.setAccessible(true);
338+
}
338339
if (assignInstant(fieldType, field, fieldSetter, object, value, precision)
339340
|| assignString(fieldType, field, fieldSetter, object, value)
340341
|| assignDouble(fieldType, field, fieldSetter, object, value)
@@ -467,122 +468,6 @@ <T> boolean assignBoolean(final Class<?> fieldType, final Field field, final Met
467468
return isBooleanAssigned;
468469
}
469470

470-
/*<T> boolean fieldValueModified(final Class<?> fieldType, final Field field, final Method fieldSetter, final T object, final Object value,
471-
final TimeUnit precision)
472-
throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
473-
if (String.class.isAssignableFrom(fieldType)) {
474-
final String stringValue = String.valueOf(value);
475-
if (fieldSetter != null) {
476-
fieldSetter.invoke(object, stringValue);
477-
} else {
478-
field.set(object, stringValue);
479-
}
480-
return true;
481-
}
482-
if (Instant.class.isAssignableFrom(fieldType)) {
483-
Instant instant;
484-
if (value instanceof String) {
485-
instant = Instant.from(RFC3339_FORMATTER.parse(String.valueOf(value)));
486-
} else if (value instanceof Long) {
487-
instant = Instant.ofEpochMilli(toMillis((long) value, precision));
488-
} else if (value instanceof Double) {
489-
instant = Instant.ofEpochMilli(toMillis(((Double) value).longValue(), precision));
490-
} else if (value instanceof Integer) {
491-
instant = Instant.ofEpochMilli(toMillis(((Integer) value).longValue(), precision));
492-
} else {
493-
throw new InfluxDBMapperException("Unsupported type " + field.getClass() + " for field " + field.getName());
494-
}
495-
if (fieldSetter != null) {
496-
fieldSetter.invoke(object, instant);
497-
} else {
498-
field.set(object, instant);
499-
}
500-
return true;
501-
}
502-
return false;
503-
}
504-
505-
<T> boolean fieldValueForPrimitivesModified(final Class<?> fieldType, final Field field, final Method fieldSetter, final T object,
506-
final Object value) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
507-
if (double.class.isAssignableFrom(fieldType)) {
508-
final double doubleValue = (Double) value;
509-
if (fieldSetter != null) {
510-
fieldSetter.invoke(object, doubleValue);
511-
} else {
512-
field.setDouble(object, doubleValue);
513-
}
514-
return true;
515-
}
516-
if (long.class.isAssignableFrom(fieldType)) {
517-
final long longValue = ((Double) value).longValue();
518-
if (fieldSetter != null) {
519-
fieldSetter.invoke(object, longValue);
520-
} else {
521-
field.setLong(object, longValue);
522-
}
523-
return true;
524-
}
525-
if (int.class.isAssignableFrom(fieldType)) {
526-
final int intValue = ((Double) value).intValue();
527-
if(fieldSetter != null) {
528-
fieldSetter.invoke(object, intValue);
529-
} else {
530-
field.setInt(object, intValue);
531-
}
532-
return true;
533-
}
534-
if (boolean.class.isAssignableFrom(fieldType)) {
535-
final boolean boolValue = Boolean.parseBoolean(String.valueOf(value));
536-
if (fieldSetter != null) {
537-
fieldSetter.invoke(object, boolValue);
538-
} else {
539-
field.setBoolean(object, boolValue);
540-
}
541-
return true;
542-
}
543-
return false;
544-
}
545-
546-
<T> boolean fieldValueForPrimitiveWrappersModified(final Class<?> fieldType, final Field field, final Method fieldSetter, final T object,
547-
final Object value) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
548-
if (Double.class.isAssignableFrom(fieldType)) {
549-
if (fieldSetter != null) {
550-
fieldSetter.invoke(object, value);
551-
} else {
552-
field.set(object, value);
553-
}
554-
return true;
555-
}
556-
if (Long.class.isAssignableFrom(fieldType)) {
557-
final long longValue = ((Double) value).longValue();
558-
if (fieldSetter != null) {
559-
fieldSetter.invoke(object, longValue);
560-
} else {
561-
field.set(object, longValue);
562-
}
563-
return true;
564-
}
565-
if (Integer.class.isAssignableFrom(fieldType)) {
566-
final int intValue = ((Double) value).intValue();
567-
if (fieldSetter != null) {
568-
fieldSetter.invoke(object, intValue);
569-
} else {
570-
field.set(object, intValue);
571-
}
572-
return true;
573-
}
574-
if (Boolean.class.isAssignableFrom(fieldType)) {
575-
final boolean boolValue = Boolean.parseBoolean(String.valueOf(value));
576-
if (fieldSetter != null) {
577-
fieldSetter.invoke(object, boolValue);
578-
} else {
579-
field.set(object, boolValue);
580-
}
581-
return true;
582-
}
583-
return false;
584-
}*/
585-
586471
private Long toMillis(final long value, final TimeUnit precision) {
587472

588473
return TimeUnit.MILLISECONDS.convert(value, precision);

0 commit comments

Comments
 (0)