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; }
@Test public void testCustomSetterFactory() throws Exception { Object o = new Object(); newFieldMapperAndMapToPS(new ConstantGetter<Object, Object>(o), Object.class, new SetterFactoryProperty(new SetterFactory<PreparedStatement, PropertyMapping<?, ?, ?>>() { @Override public <P> Setter<PreparedStatement, P> getSetter(PropertyMapping<?, ?, ?> arg) { return new Setter<PreparedStatement, P>() { @Override public void set(PreparedStatement target, P value) throws Exception { ps.setString(36, "bb"); } }; } })); verify(ps).setString(36, "bb"); }
public SetterFactoryProperty(SetterFactory<?, ?> setterFactory) { this(setterFactory, getTargetType(setterFactory)); } public SetterFactoryProperty(SetterFactory<?, ?> setterFactory, Type targetType) {
@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; }
@Test public void jdbcMapperExtrapolateOverrideSetterFactory() { JdbcMapperFactory .newInstance() .addColumnProperty("bar", new SetterFactoryProperty( new SetterFactory<PreparedStatement, PropertyMapping<?, ?, JdbcColumnKey>>() { @SuppressWarnings("unchecked") @Override public <P> Setter<PreparedStatement, P> getSetter(final PropertyMapping<?, ?, JdbcColumnKey> arg) { return (Setter<PreparedStatement, P>) new Setter<PreparedStatement, Bar2Prop>() { @Override public void set(PreparedStatement target, Bar2Prop value) throws Exception { target.setString(arg.getColumnKey().getIndex(), value.getVal()); target.setInt(arg.getColumnKey().getIndex() + 1, value.getI()); } }; } } )) .buildFrom(Foo2.class) .addColumn("bar") .mapper(); }
public SetterFactoryProperty(SetterFactory<?, ?> setterFactory) { this(setterFactory, getTargetType(setterFactory)); } public SetterFactoryProperty(SetterFactory<?, ?> setterFactory, Type targetType) {
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; }