org.appfuse.dao.BaseDaoTestCase Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of appfuse-hibernate Show documentation
Show all versions of appfuse-hibernate Show documentation
AppFuse DAO backend implemented with Hibernate (http://hibernate.org).
package org.appfuse.dao;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.SessionFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.hibernate.Session;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
/**
* Base class for running DAO tests.
*
* @author Matt Raible
* @author jgarcia (updated: migrate to hibernate 4; moved from compass-search to hibernate-search
*/
@ContextConfiguration(
locations = {"classpath:/applicationContext-resources.xml",
"classpath:/applicationContext-dao.xml",
"classpath*:/applicationContext.xml",
"classpath:**/applicationContext*.xml"})
public abstract class BaseDaoTestCase extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private SessionFactory sessionFactory;
/**
* Log variable for all child classes. Uses LogFactory.getLog(getClass()) from Commons Logging
*/
protected final Log log = LogFactory.getLog(getClass());
/**
* ResourceBundle loaded from src/test/resources/${package.name}/ClassName.properties (if exists)
*/
protected ResourceBundle rb;
/**
* Default constructor - populates "rb" variable if properties file exists for the class in
* src/test/resources.
*/
public BaseDaoTestCase() {
// Since a ResourceBundle is not required for each class, just
// do a simple check to see if one exists
String className = this.getClass().getName();
try {
rb = ResourceBundle.getBundle(className);
} catch (MissingResourceException mre) {
log.trace("No resource bundle found for: " + className);
}
}
/**
* Utility method to populate a javabean-style object with values
* from a Properties file
*
* @param obj the model object to populate
* @return Object populated object
* @throws Exception if BeanUtils fails to copy properly
*/
protected Object populate(final Object obj) throws Exception {
// loop through all the beans methods and set its properties from its .properties file
Map map = new HashMap();
for (Enumeration keys = rb.getKeys(); keys.hasMoreElements();) {
String key = keys.nextElement();
map.put(key, rb.getString(key));
}
BeanUtils.copyProperties(obj, map);
return obj;
}
/**
* Create a HibernateTemplate from the SessionFactory and call flush() and clear() on it.
* Designed to be used after "save" methods in tests: http://issues.appfuse.org/browse/APF-178.
*
* @throws org.springframework.beans.BeansException
* when can't find 'sessionFactory' bean
*/
protected void flush() throws BeansException {
Session currentSession = sessionFactory.getCurrentSession();
currentSession.flush();
}
/**
* Flush search indexes, to be done after a reindex() or reindexAll() operation
*/
public void flushSearchIndexes() {
Session currentSession = sessionFactory.getCurrentSession();
final FullTextSession fullTextSession = Search.getFullTextSession(currentSession);
fullTextSession.flushToIndexes();
}
}