All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sfm.jdbc.JdbcMapperBuilder Maven / Gradle / Ivy

package org.sfm.jdbc;

import java.lang.reflect.Type;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Map;

import org.sfm.jdbc.impl.JdbcMapperImpl;
import org.sfm.jdbc.impl.ResultSetFieldMapperFactory;
import org.sfm.jdbc.impl.getter.ResultSetGetterFactory;
import org.sfm.map.FieldMapperErrorHandler;
import org.sfm.map.MapperBuilderErrorHandler;
import org.sfm.map.MapperBuildingException;
import org.sfm.map.RowHandlerErrorHandler;
import org.sfm.map.impl.AbstractFieldMapperMapperBuilder;
import org.sfm.map.impl.FieldMapper;
import org.sfm.map.impl.KeyFieldMapperCouple;
import org.sfm.map.impl.RethrowRowHandlerErrorHandler;
import org.sfm.reflect.ReflectionService;
import org.sfm.reflect.meta.ClassMeta;

public final class JdbcMapperBuilder extends AbstractFieldMapperMapperBuilder  {

	private int columnIndex = 1;
	private RowHandlerErrorHandler jdbcMapperErrorHandler = new RethrowRowHandlerErrorHandler();

	public JdbcMapperBuilder(final Type target) throws MapperBuildingException {
		this(target, new ReflectionService());
	}
	public JdbcMapperBuilder(final Type target, ReflectionService reflectService) throws MapperBuildingException {
		this(target, reflectService, null, null);
	}
	@SuppressWarnings("unchecked")
	public JdbcMapperBuilder(final Type target, ReflectionService reflectService, final Map aliases, Map> customMappings) throws MapperBuildingException {
		this(target, (ClassMeta) reflectService.getClassMeta(target), aliases, customMappings);
	}
	
	public JdbcMapperBuilder(final Type target, final ClassMeta classMeta, final Map aliases, Map> customMappings) throws MapperBuildingException {
		super(target, ResultSet.class, classMeta, new ResultSetGetterFactory(), new ResultSetFieldMapperFactory(new ResultSetGetterFactory()), aliases, customMappings);
	}
	
	@Override
	public JdbcMapper mapper() {
		if (reflectionService.isAsmActivated()) {
			try {
				return reflectionService.getAsmFactory().createJdbcMapper(fields(), getInstantiator(), getTargetClass(), jdbcMapperErrorHandler);
			} catch(Exception e) {
				return new JdbcMapperImpl(fields(), getInstantiator(), jdbcMapperErrorHandler);
			}
		} else {
			return new JdbcMapperImpl(fields(), getInstantiator(), jdbcMapperErrorHandler);
		}
	}

	
	public JdbcMapperBuilder addMapping(String column) {
		return addMapping(column, columnIndex++);
	}
	public JdbcMapperBuilder addMapping(String column, int index) {
		return addMapping(column, index, JdbcColumnKey.UNDEFINED_TYPE);
	}
	
	public JdbcMapperBuilder addMapper(FieldMapper mapper) {
		mappers.add(new KeyFieldMapperCouple(null, mapper));
		return this;
	}
	
	public JdbcMapperBuilder addMapping(final String column, final int columnIndex, final int sqlType) {
		addMapping(new JdbcColumnKey(column, columnIndex, sqlType));
		return this;
	}
	
	public JdbcMapperBuilder addMapping(final ResultSetMetaData metaData) throws SQLException {
		for(int i = 1; i <= metaData.getColumnCount(); i++) {
			addMapping(metaData.getColumnLabel(i), i, metaData.getColumnType(i));
		}
		
		return this;
	}

	
	public JdbcMapperBuilder fieldMapperErrorHandler(FieldMapperErrorHandler errorHandler) {
		setFieldMapperErrorHandler(errorHandler);
		return this;
	}
	
	public JdbcMapperBuilder mapperBuilderErrorHandler(MapperBuilderErrorHandler errorHandler) {
		setMapperBuilderErrorHandler(errorHandler);
		return this;
	}
	
	
	@Override
	protected  AbstractFieldMapperMapperBuilder newSubBuilder(Type type, ClassMeta classMeta) {
		return new  JdbcMapperBuilder(type, classMeta, aliases, customMappings);
	}
	

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy