
it.amattioli.dominate.hibernate.HibernateRepositoryFactory Maven / Gradle / Ivy
package it.amattioli.dominate.hibernate;
import it.amattioli.dominate.Entity;
import it.amattioli.dominate.Repository;
import it.amattioli.dominate.memory.CollectionRepository;
import it.amattioli.dominate.repositories.AbstractRepositoryFactory;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import org.hibernate.collection.AbstractPersistentCollection;
/**
* Creates a ClassHibernateRepository for objects of the given class if this class
* is mapped with Hibernate.
* If the given class is not mapped with Hibernate the {@link #getRepository(Class)}
* method will return null.
*
* As this class extends {@link AbstractRepositoryFactory} it will first look for a
* custom factory method before trying to instantiate a default repository.
*
* @author andrea
*
*/
public class HibernateRepositoryFactory extends AbstractRepositoryFactory {
private boolean isPersisted(Class> c) {
Map,?> metadata = HibernateSessionManager.getSessionFactory().getAllClassMetadata();
return metadata.containsKey(c.getName());
}
@Override
public > Repository getRepository(Collection coll) {
if (coll instanceof AbstractPersistentCollection) {
CollectionHibernateRepository result = new CollectionHibernateRepository(coll);
return result;
} else {
return new CollectionRepository(coll);
}
}
protected > Repository getDefaultRepository(Class c) {
if (!isPersisted(c)) {
return null;
}
AbstractHibernateRepository result = new ClassHibernateRepository(c);
return result;
}
public > Repository cloneRepository(AbstractHibernateRepository rep) throws CloneNotSupportedException {
AbstractHibernateRepository result = (AbstractHibernateRepository)rep.clone();
return result;
}
}