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

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

package org.sfm.jdbc;

import java.io.IOException;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import org.sfm.map.FieldMapperErrorHandler;
import org.sfm.map.MapperBuilderErrorHandler;
import org.sfm.map.RethrowFieldMapperErrorHandler;
import org.sfm.map.RethrowMapperBuilderErrorHandler;
import org.sfm.reflect.SetterFactory;
import org.sfm.reflect.asm.AsmFactory;

public final class JdbcMapperFactory {
	
	/**
	 * instantiate a new JdbcMapperFactory
	 * @return a new JdbcMapperFactory
	 */
	public static JdbcMapperFactory newInstance() {
		return new JdbcMapperFactory();
	}
	
	private FieldMapperErrorHandler fieldMapperErrorHandler = new RethrowFieldMapperErrorHandler();
	private MapperBuilderErrorHandler mapperBuilderErrorHandler = new RethrowMapperBuilderErrorHandler();
	
	private boolean useAsm = true;
	
	
	
	/**
	 * Will create a instance of mapper based on the metadata and the target class;
	 * @param target the target class of the mapper
	 * @param metaData the metadata to create the mapper from
	 * @return a mapper that will map the data represented by the metadata to an instance of target
	 * @throws SQLException
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 * @throws IOException 
	 */
	public  JdbcMapper newMapper(final Class target, final ResultSetMetaData metaData) throws SQLException, NoSuchMethodException, SecurityException, IOException {
		ResultSetMapperBuilder builder = new ResultSetMapperBuilderImpl<>(target, getSetterFactory(), AsmHelper.isAsmPresent());
		
		builder.fieldMapperErrorHandler(fieldMapperErrorHandler);
		builder.mapperBuilderErrorHandler(mapperBuilderErrorHandler);
		builder.addMapping(metaData);
		
		return builder.mapper();
	}
	
	/**
	 * 
	 * @param fieldMapperErrorHandler 
	 * @return the factory
	 */
	public JdbcMapperFactory fieldMapperErrorHandler(final FieldMapperErrorHandler fieldMapperErrorHandler) {
		this.fieldMapperErrorHandler = fieldMapperErrorHandler;
		return this;
	}

	/**
	 * 
	 * @param mapperBuilderErrorHandler
	 * @return the factory
	 */
	public JdbcMapperFactory mapperBuilderErrorHandler(final MapperBuilderErrorHandler mapperBuilderErrorHandler) {
		this.mapperBuilderErrorHandler = mapperBuilderErrorHandler;
		return this;
	}

	/**
	 * 
	 * @param useAsm false if you want to disable asm usage.
	 * @return the factory
	 */
	public JdbcMapperFactory useAsm(final boolean useAsm) {
		this.useAsm = useAsm;
		return this;
	}

	/**
	 * 
	 * @param target the targeted class for the mapper
	 * @return a jdbc mapper that will map to the targeted class.
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 */
	public  JdbcMapper newMapper(final Class target) throws NoSuchMethodException, SecurityException {
		return new DynamicJdbcMapper(target, getSetterFactory(), fieldMapperErrorHandler, mapperBuilderErrorHandler);
	}

	private AsmFactory getAsmSetterFactory() {
		return !useAsm ? null : AsmHelper.getAsmSetterFactory();
	}

	private SetterFactory getSetterFactory() {
		return new SetterFactory(getAsmSetterFactory());
	}


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy