return result;
}
private Object interceptGetter(Method method) throws Throwable {
Object result = null;
PropertyMeta propertyMeta = this.getterMetas.get(method);
// Load fields into target object
if (!this.alreadyLoaded.contains(method)) {
log.trace("Loading property {}", propertyMeta.getPropertyName());
if (context.isClusteredCounter()) {
counterLoader.loadClusteredCounterColumn(context, target, propertyMeta);
} else {
loader.loadPropertyIntoObject(context, target, propertyMeta);
}
alreadyLoaded.add(method);
}
log.trace("Get value from field {} on real object", propertyMeta.getPropertyName());
Object rawValue = invoker.getValueFromField(target, propertyMeta.getField());
// Build proxy when necessary
switch (propertyMeta.type()) {
case COUNTER:
if (rawValue == null) {
final Counter counter = InternalCounterBuilder.initialValue(null);
propertyMeta.forValues().setValueToField(target, counter);
}
result = rawValue;
break;
case LIST:
if (rawValue != null) {
log.trace("Build list wrapper for property {} of entity of class {} ", propertyMeta.getPropertyName(),
propertyMeta.getEntityClassName());
@SuppressWarnings("unchecked")
List<Object> list = (List<Object>) rawValue;
result = ListWrapperBuilder.builder(list).dirtyMap(dirtyMap).setter(propertyMeta.getSetter())
.propertyMeta(this.getPropertyMetaByProperty(method)).build();
}
break;
case SET:
if (rawValue != null) {
log.trace("Build set wrapper for property {} of entity of class {} ", propertyMeta.getPropertyName(),
propertyMeta.getEntityClassName());
@SuppressWarnings("unchecked")
Set<Object> set = (Set<Object>) rawValue;
result = SetWrapperBuilder.builder(set).dirtyMap(dirtyMap).setter(propertyMeta.getSetter())
.propertyMeta(this.getPropertyMetaByProperty(method)).build();
}
break;
case MAP:
if (rawValue != null) {
log.trace("Build map wrapper for property {} of entity of class {} ", propertyMeta.getPropertyName(),
propertyMeta.getEntityClassName());
@SuppressWarnings("unchecked")
Map<Object, Object> map = (Map<Object, Object>) rawValue;
result = MapWrapperBuilder.builder(map).dirtyMap(dirtyMap).setter(propertyMeta.getSetter())
.propertyMeta(this.getPropertyMetaByProperty(method)).build();
}
break;
default:
log.trace("Return un-mapped raw value {} for property {} of entity of class {} ",
propertyMeta.getPropertyName(), propertyMeta.getEntityClassName());
result = rawValue;
break;
}
return result;