package pt.ist.fenixframework.backend.ogm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.hibernate.EmptyInterceptor;
import org.hibernate.EntityMode;
import java.io.Serializable;
import pt.ist.fenixframework.core.DomainObjectAllocator;
public class AllocationInterceptor extends EmptyInterceptor {
private static final Logger logger = LoggerFactory.getLogger(AllocationInterceptor.class);
// @Override
// public Boolean isTransient(Object entity) {
// logger.trace("isTransient(" + entity.getClass().getName() + ")?");
// try {
// OgmDomainObject obj = (OgmDomainObject)entity;
// logger.trace("isTransient(" + entity.getClass().getName() + ")?: " + (obj.getHibernate$primaryKey() == null));
// return obj.getHibernate$primaryKey() == null;
// } catch (ClassCastException ex) {
// // not a domain object
// logger.trace("isTransient(" + entity.getClass().getName() + ")?: UNKNOWN");
// return null;
// }
// }
@Override
public Object instantiate(String entityName, EntityMode entityMode, Serializable id) {
logger.trace("EntityName: " + entityName);
logger.trace("EntityMode: " + entityMode);
logger.trace(" Id: " + id);
try {
Class clazz = Class.forName(entityName);
OgmOID oid = new OgmOID(clazz, (String)id);
return DomainObjectAllocator.allocateObject(clazz, oid);
} catch (ClassNotFoundException ex) {
// Should not occur.
logger.error("ClassNotFoundException for " + entityName);
// This will probably break ahead, but we can just let hibernate try its luck
return null;
}
}
}