package com.manning.hsia.test;
import org.apache.commons.io.FileUtils;
import org.apache.lucene.store.Directory;
import org.hibernate.HibernateException;
import org.hibernate.event.PostInsertEventListener;
import org.hibernate.impl.SessionFactoryImpl;
import org.hibernate.search.event.FullTextIndexEventListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
public abstract class SearchTestCase extends HSiATestCase {
private static final Logger log = LoggerFactory.getLogger(SearchTestCase.class);
private static File indexDir;
static {
File current = getAbsoluteDir();
indexDir = new File(current, "indextemp");
log.debug("Using {} as index directory.", indexDir.getAbsolutePath());
}
@SuppressWarnings("unchecked")
protected Directory getDirectory(Class clazz) {
return getLuceneEventListener().getSearchFactoryImplementor().getDirectoryProviders(clazz)[0].getDirectory();
}
protected void delete(File sub) {
if (sub.isDirectory()) {
for (File file : sub.listFiles()) {
delete(file);
}
sub.delete();
} else {
sub.delete();
}
}
private FullTextIndexEventListener getLuceneEventListener() {
PostInsertEventListener[] listeners = ((SessionFactoryImpl) getSessions()).getEventListeners().getPostInsertEventListeners();
FullTextIndexEventListener listener = null;
for (PostInsertEventListener candidate : listeners) {
if (candidate instanceof FullTextIndexEventListener) {
listener = (FullTextIndexEventListener) candidate;
break;
}
}
if (listener == null) throw new HibernateException("Lucene event listener not initialized");
return listener;
}
protected File locateBaseDir() {
return indexDir;
}
protected static File getAbsoluteDir() {
File file = new File("dvd_index");
String absPath = file.getAbsolutePath();
return new File(absPath);
}
protected void copyIndexes() throws IOException {
File actorSrcDir = new File(new File("dvd_index_backup/com.jboss.dvd.seam.Actor").getAbsolutePath());
File categorySrcDir = new File(new File("dvd_index_backup/com.jboss.dvd.seam.Category").getAbsolutePath());
File productSrcDir = new File(new File("dvd_index_backup/com.jboss.dvd.seam.Product").getAbsolutePath());
File actorDestDir = new File(locateBaseDir().getAbsolutePath() + "/com.jboss.dvd.seam.Actor");
File categoryDestDir = new File(locateBaseDir().getAbsolutePath() + "/com.jboss.dvd.seam.Category");
File productDestDir = new File(locateBaseDir().getAbsolutePath() + "/com.jboss.dvd.seam.Product");
FileUtils.copyDirectory(actorSrcDir, actorDestDir);
FileUtils.copyDirectory(categorySrcDir, categoryDestDir);
FileUtils.copyDirectory(productSrcDir, productDestDir);
}
}