package org.gmod.schema.test;
import static org.junit.Assert.assertNotNull;
import org.genedb.db.test.tools.BuildTestDatabase;
import org.gmod.schema.cfg.ChadoAnnotationConfiguration;
import org.gmod.schema.feature.AbstractGene;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import org.hibernate.connection.UserSuppliedConnectionProvider;
import org.hibernate.metadata.ClassMetadata;
import org.hsqldb.jdbc.jdbcDataSource;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import java.net.URL;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class HibernateTest {
private static SessionFactory sessionFactory;
private static jdbcDataSource dataSource;
private Session session;
private static Logger logger;
public static void configureLogging() {
URL url = BuildTestDatabase.class.getResource("/log4j.test.properties");
if (url == null) {
throw new RuntimeException("Could not find classpath resource /log4j.test.properties");
}
System.out.printf("Configuring Log4J from '%s'\n", url);
PropertyConfigurator.configure(url);
logger = Logger.getLogger(HibernateTest.class);
}
@BeforeClass
public static void createSessionFactory() {
configureLogging();
dataSource = new org.hsqldb.jdbc.jdbcDataSource();
dataSource.setDatabase("jdbc:hsqldb:file:test-data/hsqldb/pfalciparum");
dataSource.setUser("sa");
Configuration cfg = new ChadoAnnotationConfiguration()
.setDataSource(dataSource)
.addPackage("org.gmod.schema.mapped")
.addPackage("org.gmod.schema.feature")
.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect")
.setProperty("hibernate.search.default.indexBase", "/tmp")
.setProperty(Environment.CONNECTION_PROVIDER, UserSuppliedConnectionProvider.class.getName());
sessionFactory = cfg.buildSessionFactory();
}
@Test
public void testConnection() throws SQLException {
assertNotNull(dataSource.getConnection());
}
@Before
public void getSession() throws SQLException {
this.session = sessionFactory.openSession(dataSource.getConnection());
}
@After
public void closeSession() {
session.close();
}
@Test
public void loadMappedEntities() {
@SuppressWarnings("unchecked")
Map<String,ClassMetadata> classMetadataByName = sessionFactory.getAllClassMetadata();
for (String name: classMetadataByName.keySet()) {
logger.info(name);
session.createQuery("from " + name).setMaxResults(100).list();
}
}
@Test
public void fetchGeneStarts() {
@SuppressWarnings("unchecked")
List<AbstractGene> genes = session.createCriteria(AbstractGene.class).setMaxResults(100).list();
for (AbstractGene gene: genes) {
logger.info(String.format("Gene '%s' starts at %d", gene.getUniqueName(), gene.getStart()));
}
}
}