public SetterFactory<?, ?> getCustomSetterFactoryTo(Type targetType) { for(SetterFactoryProperty getterFactoryProperty : lookForAll(SetterFactoryProperty.class)) { if (getterFactoryProperty.getTargetType() == null || TypeHelper.isAssignable(getterFactoryProperty.getTargetType(), targetType)) { return getterFactoryProperty.getSetterFactory(); } } return null; }
public SetterFactory<?, ?> getCustomSetterFactoryTo(Type targetType) { for(SetterFactoryProperty getterFactoryProperty : lookForAll(SetterFactoryProperty.class)) { if (getterFactoryProperty.getTargetType() == null || TypeHelper.isAssignable(getterFactoryProperty.getTargetType(), targetType)) { return getterFactoryProperty.getSetterFactory(); } } return null; }
@Test public void testSetterFactoryProperty() { SetterFactory<Object, Object> setterFactory = new SetterFactory<Object, Object>() { @Override public <P> Setter<Object, P> getSetter(Object arg) { return null; } @Override public String toString() { return "SF"; } }; SetterFactoryProperty property = new SetterFactoryProperty(setterFactory); assertSame(setterFactory, property.getSetterFactory()); assertEquals("SetterFactory{SF}", property.toString()); }
@SuppressWarnings("unchecked") private <S, P> ContextualSetter<Appendable, ? super P> setterFromFactory(PropertyMapping<S, P, CsvColumnKey> pm) { ContextualSetter<Appendable, ? super P> setter = null; final SetterFactoryProperty setterFactoryProperty = pm.getColumnDefinition().lookFor(SetterFactoryProperty.class); if (setterFactoryProperty != null) { final SetterFactory<Appendable, PropertyMapping<S, P, CsvColumnKey>> setterFactory = (SetterFactory<Appendable, PropertyMapping<S, P, CsvColumnKey>>) setterFactoryProperty.getSetterFactory(); setter = ContextualSetterAdapter.of(setterFactory.getSetter(pm)); } if (setter == null) { if (!pm.getPropertyMeta().isSelf()) { final ClassMeta<P> classMeta = pm.getPropertyMeta().getPropertyClassMeta(); if (classMeta instanceof ObjectClassMeta) { ObjectClassMeta<P> ocm = (ObjectClassMeta<P>) classMeta; if (ocm.getNumberOfProperties() == 1) { PropertyMeta<P, ?> subProp = ocm.getFirstProperty(); ContextualSetter<Appendable, Object> subSetter = (ContextualSetter<Appendable, Object>) setterFromFactory(pm.propertyMeta(subProp)); if (subSetter != null) { setter = new ContextualSetterOnGetter<Appendable, Object, P>(subSetter, (Getter<P, Object>) subProp.getGetter()); } else { return new ObjectToStringSetter<P>(subProp.getGetter()); } } } } } return setter; }
@SuppressWarnings("unchecked") private <S, P> ContextualSetter<Appendable, ? super P> setterFromFactory(PropertyMapping<S, P, CsvColumnKey> pm) { ContextualSetter<Appendable, ? super P> setter = null; final SetterFactoryProperty setterFactoryProperty = pm.getColumnDefinition().lookFor(SetterFactoryProperty.class); if (setterFactoryProperty != null) { final SetterFactory<Appendable, PropertyMapping<S, P, CsvColumnKey>> setterFactory = (SetterFactory<Appendable, PropertyMapping<S, P, CsvColumnKey>>) setterFactoryProperty.getSetterFactory(); setter = ContextualSetterAdapter.of(setterFactory.getSetter(pm)); } if (setter == null) { if (!pm.getPropertyMeta().isSelf()) { final ClassMeta<P> classMeta = pm.getPropertyMeta().getPropertyClassMeta(); if (classMeta instanceof ObjectClassMeta) { ObjectClassMeta<P> ocm = (ObjectClassMeta<P>) classMeta; if (ocm.getNumberOfProperties() == 1) { PropertyMeta<P, ?> subProp = ocm.getFirstProperty(); ContextualSetter<Appendable, Object> subSetter = (ContextualSetter<Appendable, Object>) setterFromFactory(pm.propertyMeta(subProp)); if (subSetter != null) { setter = new ContextualSetterOnGetter<Appendable, Object, P>(subSetter, (Getter<P, Object>) subProp.getGetter()); } else { return new ObjectToStringSetter<P>(subProp.getGetter()); } } } } } return setter; }