package hibex.dao;
import hibex.dto.PersistentObject;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
public class GenericManager<PK extends Serializable, T extends PersistentObject<PK>> {
private Class<T> modelClass;
private GenericDao<T, PK> dao;
private static Map<Class<PersistentObject>, GenericManager> managersMap = new HashMap<Class<PersistentObject>, GenericManager>();
public GenericManager(Class<T> modelClass) {
this.modelClass = modelClass;
this.dao = new GenericDaoImpl<T, PK>(modelClass);
managersMap.put((Class<PersistentObject>) this.modelClass, this);
}
@SuppressWarnings("unchecked")
public static <PK2 extends Serializable, T2 extends PersistentObject<PK2>> GenericManager<PK2, T2> lookupManagerByClass(
Class<T2> modelClass) {
return managersMap.get(modelClass);
}
public void setSessionFactory(SessionFactory sessionFactory) {
dao.setSessionFactory(sessionFactory);
}
public SessionFactory getSessionFactory() {
return dao.getSessionFactory();
}
public Class<T> getModelClass() {
return modelClass;
}
public void setDao(GenericDao<T, PK> dao) {
this.dao = dao;
}
public List<T> find(DetachedCriteria criteria) {
return dao.getObjects(criteria);
}
public List<T> find(PK[] ids) {
return dao.getObjects(ids);
}
public T get(PK id) {
return dao.findById(id);
}
public List<T> findAll() {
return dao.getObjects();
}
public Serializable insert(T object) {
return dao.create(object);
}
public void update(T object) {
dao.update(object);
}
public void delete(T object) {
dao.delete(object);
}
}