@SuppressWarnings("unchecked") private <S, P> ContextualSetter<T, P> getSetterForTarget(PropertyMapping<S, ?, K> pm, ContextFactoryBuilder contextFactoryBuilder) { ContextualSetter<T, P> setter = ContextualSetterAdapter.of((Setter<T, P>) pm.getColumnDefinition().getCustomSetterTo(targetType)); final SetterFactory<T, PropertyMapping<?, ?, K>> customSetterFactory = (SetterFactory<T, PropertyMapping<?, ?, K>>) pm.getColumnDefinition().getCustomSetterFactoryTo(targetType); if (customSetterFactory != null) { setter = ContextualSetterAdapter.<T, P>of(customSetterFactory.<P>getSetter(pm)); } if (setter == null){ setter = setterFactory.getSetter(pm, contextFactoryBuilder); } if (setter == null) { if (!pm.getPropertyMeta().isSelf()) { final ClassMeta<?> propertyClassMeta = pm.getPropertyMeta().getPropertyClassMeta(); if (propertyClassMeta instanceof ObjectClassMeta) { ObjectClassMeta<P> ocm = (ObjectClassMeta<P>) propertyClassMeta; if (ocm.getNumberOfProperties() == 1) { PropertyMeta<P, ?> subProp = ocm.getFirstProperty(); ContextualSetter<T, Object> subSetter = getSetterForTarget(pm.propertyMeta(subProp), contextFactoryBuilder); if (subSetter != null) { return new ContextualSetterOnGetter<T, Object, P>(subSetter, (Getter<P, Object>) subProp.getGetter()); } } } } } return setter; }
@SuppressWarnings("unchecked") private <S, P> ContextualSetter<T, P> getSetterForTarget(PropertyMapping<S, ?, K> pm, ContextFactoryBuilder contextFactoryBuilder) { ContextualSetter<T, P> setter = ContextualSetterAdapter.of((Setter<T, P>) pm.getColumnDefinition().getCustomSetterTo(targetType)); final SetterFactory<T, PropertyMapping<?, ?, K>> customSetterFactory = (SetterFactory<T, PropertyMapping<?, ?, K>>) pm.getColumnDefinition().getCustomSetterFactoryTo(targetType); if (customSetterFactory != null) { setter = ContextualSetterAdapter.<T, P>of(customSetterFactory.<P>getSetter(pm)); } if (setter == null){ setter = setterFactory.getSetter(pm, contextFactoryBuilder); } if (setter == null) { if (!pm.getPropertyMeta().isSelf()) { final ClassMeta<?> propertyClassMeta = pm.getPropertyMeta().getPropertyClassMeta(); if (propertyClassMeta instanceof ObjectClassMeta) { ObjectClassMeta<P> ocm = (ObjectClassMeta<P>) propertyClassMeta; if (ocm.getNumberOfProperties() == 1) { PropertyMeta<P, ?> subProp = ocm.getFirstProperty(); ContextualSetter<T, Object> subSetter = getSetterForTarget(pm.propertyMeta(subProp), contextFactoryBuilder); if (subSetter != null) { return new ContextualSetterOnGetter<T, Object, P>(subSetter, (Getter<P, Object>) subProp.getGetter()); } } } } } return setter; }