package uk.ac.cam.echo.server;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import java.net.URI;
import java.net.URISyntaxException;
public class HibernateUtil {
private static SessionFactory sf = null;
//configureSessionFactory();
private static void applyHerokuConfigs(Configuration config) {
URI dbUri = null;
try {
dbUri = new URI(System.getenv("HEROKU_POSTGRESQL_GRAY_URL"));
} catch (URISyntaxException e) {
e.printStackTrace();
return ;
}
String username = dbUri.getUserInfo().split(":")[0];
String password = dbUri.getUserInfo().split(":")[1];
String dbUrl = "jdbc:postgresql://" + dbUri.getHost() + ':' + dbUri.getPort() + dbUri.getPath();
config.setProperty("hibernate.connection.driver_class", "org.postgresql.Driver");
config.setProperty("hibernate.connection.url", dbUrl);
config.setProperty("hibernate.connection.username", username);
config.setProperty("hibernate.connection.password", password);
config.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQL9Dialect");
}
private static Configuration getConfiguration() {
Configuration config = new Configuration();
config.configure();
if (System.getenv("PLATFORM") != null && System.getenv("PLATFORM").equals("heroku")) {
applyHerokuConfigs(config);
}
return config;
}
public static void configureSessionFactory()
throws HibernateException {
configureSessionFactory(null);
}
public static void configureSessionFactory(HibernateConfigurator configurator) {
if (sf != null)
sf.close();
Configuration configuration = getConfiguration();
if (configurator != null)
configurator.configure(configuration);
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.build();
SessionFactory sessionFactory = configuration
.buildSessionFactory(serviceRegistry);
sf = sessionFactory;
}
public static SessionFactory getSessionFactory() {
if (sf == null) {
configureSessionFactory();
}
return sf;
}
public static Session getSession() {
return getSessionFactory().getCurrentSession();
}
public static Session getTransaction() {
Session session = getSessionFactory().getCurrentSession();
Transaction transaction = session.getTransaction();
if (!transaction.isActive())
session.beginTransaction();
return session;
}
}