use of org.simpleflatmapper.converter.Context in project SimpleFlatMapper by arnaudroger.
the class AbstractMapperBuilderTest method testPrimitive.
@Test
public void testPrimitive() {
Object[] data = { true, (byte) 1, (char) 2, (short) 3, 4, (long) 5, (float) 6, (double) 7 };
SetRowMapper<Object[], Object[][], DbPrimitiveObject, Exception> mapper;
DbPrimitiveObject o;
mapper = addPrimitiveFields(new SampleMapperBuilder<DbPrimitiveObject>(ReflectionService.newInstance().getClassMeta(DbPrimitiveObject.class)));
o = mapper.map(data);
validatePrimitiveData(o);
final List<SampleFieldKey> errors = new ArrayList<SampleFieldKey>();
MapperConfig<SampleFieldKey, Object[]> mapperConfig = MapperConfig.<SampleFieldKey, Object[]>fieldMapperConfig().fieldMapperErrorHandler(new FieldMapperErrorHandler<SampleFieldKey>() {
@Override
public void errorMappingField(SampleFieldKey key, Object source, Object target, Exception error, Context mappingContext) throws MappingException {
errors.add(key);
}
});
ReflectionService reflectionService = ReflectionService.newInstance(false);
mapper = addPrimitiveFields(new SampleMapperBuilder<DbPrimitiveObject>(reflectionService.getClassMeta(DbPrimitiveObject.class), mapperConfig));
o = mapper.map(data);
validatePrimitiveData(o);
assertTrue(errors.isEmpty());
o = mapper.map(new Object[0]);
assertEquals(8, errors.size());
assertNotNull(o);
}
use of org.simpleflatmapper.converter.Context in project SimpleFlatMapper by arnaudroger.
the class Issue675Test method testSourceFactory.
@Test
public void testSourceFactory() {
String query = "SELECT * FROM table WHERE type = :myEnum and id = :id";
SqlParameterSourceFactory<Issue675> sourceFactory = JdbcTemplateMapperFactory.newInstance().addColumnProperty("myEnum", new ConverterProperty<MyEnum, Long>(new ContextualConverter<MyEnum, Long>() {
@Override
public Long convert(MyEnum in, Context context) throws Exception {
switch(in) {
case ONE:
return 1l;
case TWO:
return 2l;
default:
throw new IllegalArgumentException();
}
}
}, MyEnum.class)).newSqlParameterSourceFactory(Issue675.class, query);
SqlParameterSource sqlParameterSource = sourceFactory.newSqlParameterSource(new Issue675(1, MyEnum.TWO));
assertEquals(1l, sqlParameterSource.getValue("id"));
assertEquals(2l, sqlParameterSource.getValue("myEnum"));
}
use of org.simpleflatmapper.converter.Context in project SimpleFlatMapper by arnaudroger.
the class JdbcTemplateMapperFactoryTest method testIssue618OverrideEnum.
@Test
public void testIssue618OverrideEnum() throws SQLException {
JdbcTemplateMapperFactory config = JdbcTemplateMapperFactory.newInstance().addGetterForType(new Predicate<Type>() {
@Override
public boolean test(Type type) {
return TypeHelper.isAssignable(LookupValue.class, type);
}
}, new ContextualGetterFactory<ResultSet, JdbcColumnKey>() {
@Override
public <P> ContextualGetter<ResultSet, P> newGetter(Type target, JdbcColumnKey key, MappingContextFactoryBuilder<?, ? extends FieldKey<?>> mappingContextFactoryBuilder, Object... properties) {
Class enumClass = TypeHelper.toClass(target);
final Enum[] values = EnumHelper.getValues(enumClass);
final int index = key.getIndex();
return new ContextualGetter<ResultSet, P>() {
@Override
public P get(ResultSet resultSet, Context context) throws Exception {
int i = resultSet.getInt(index);
for (Enum e : values) {
if (((LookupValue) e).lookupValue() == i) {
return (P) e;
}
}
return null;
}
};
}
});
ResultSetExtractorImpl<Issue618> rse = JdbcTemplateMapperFactory.newInstance(config).newResultSetExtractor(Issue618.class);
Connection conn = DbHelper.getDbConnection(DbHelper.TargetDB.POSTGRESQL);
Statement st = null;
ResultSet rs = null;
if (conn == null)
return;
try {
st = conn.createStatement();
rs = st.executeQuery("SELECT * FROM (VALUES (1, 1), (2, 2)) AS t (id, enum618) ");
List<Issue618> issue618s = rse.extractData(rs);
assertEquals(Arrays.asList(new Issue618(1, Enum618.A), new Issue618(2, Enum618.B)), issue618s);
} finally {
if (rs != null)
rs.close();
if (st != null)
st.close();
conn.close();
}
}
Aggregations