package se.unlogic.standardutils.dao; import java.util.HashMap; import javax.sql.DataSource; import se.unlogic.standardutils.populators.QueryParameterPopulator; public class SimpleAnnotatedDAOFactory implements AnnotatedDAOFactory{ private final DataSource dataSource; private final HashMap<Class<?>, AnnotatedDAO<?>> daoMap = new HashMap<Class<?>, AnnotatedDAO<?>>(); public SimpleAnnotatedDAOFactory(DataSource dataSource) { super(); this.dataSource = dataSource; } public SimpleAnnotatedDAOFactory() { super(); this.dataSource = null; } @SuppressWarnings("unchecked") public synchronized <T> AnnotatedDAO<T> getDAO(Class<T> beanClass) { AnnotatedDAO<T> dao = (AnnotatedDAO<T>) this.daoMap.get(beanClass); if(dao == null){ dao = new AnnotatedDAO<T>(dataSource, beanClass, this); this.daoMap.put(beanClass, dao); } return dao; } @SuppressWarnings("unchecked") public synchronized <T> AnnotatedDAO<T> getDAO(Class<T> beanClass, BeanResultSetPopulator<T> populator, QueryParameterPopulator<?>... queryParameterPopulators) { AnnotatedDAO<T> dao = (AnnotatedDAO<T>) this.daoMap.get(beanClass); if(dao == null){ dao = new AnnotatedDAO<T>(dataSource, beanClass, this, populator, queryParameterPopulators); this.daoMap.put(beanClass, dao); } return dao; } public DataSource getDataSource() { return dataSource; } public void addDAO(Class<?> beanClass, AnnotatedDAO<?> daoInstance) { daoMap.put(beanClass, daoInstance); } }