Package io.lumify.sql

Source Code of io.lumify.sql.SqlBootstrapBindingProvider

package io.lumify.sql;

import com.google.common.collect.ImmutableSet;
import com.google.inject.Binder;
import com.google.inject.Provider;
import com.google.inject.Scopes;
import io.lumify.core.bootstrap.BootstrapBindingProvider;
import io.lumify.core.config.Configuration;
import io.lumify.core.exception.LumifyException;
import io.lumify.core.util.LumifyLogger;
import io.lumify.core.util.LumifyLoggerFactory;
import io.lumify.sql.model.HibernateSessionManager;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;

import java.io.File;
import java.util.Set;

public class SqlBootstrapBindingProvider implements BootstrapBindingProvider {
    private static final LumifyLogger LOGGER = LumifyLoggerFactory.getLogger(SqlBootstrapBindingProvider.class);
    private static final String HIBERNATE_CFG_XML = "hibernate.cfg.xml";
    private static final String HIBERNATE_PROPERTY_PREFIX = "hibernate";
    private static final Set<String> OTHER_HIBERNATE_PROPERTIES = ImmutableSet.of("show_sql", "hbm2ddl.auto");

    @Override
    public void addBindings(Binder binder, final Configuration lumifyConfiguration) {
        binder.bind(HibernateSessionManager.class)
                .toProvider(new Provider<HibernateSessionManager>() {
                    @Override
                    public HibernateSessionManager get() {
                        org.hibernate.cfg.Configuration hibernateConfiguration = new org.hibernate.cfg.Configuration();

                        File configFile = lumifyConfiguration.resolveFileName(HIBERNATE_CFG_XML);
                        if (!configFile.exists()) {
                            throw new LumifyException("Hibernate configuration file not found: " + HIBERNATE_CFG_XML);
                        }
                        hibernateConfiguration.configure(configFile);

                        for (String key : lumifyConfiguration.getKeys()) {
                            if (key.startsWith(HIBERNATE_PROPERTY_PREFIX) || OTHER_HIBERNATE_PROPERTIES.contains(key)) {
                                String xmlValue = hibernateConfiguration.getProperty(key);
                                String lumifyValue = lumifyConfiguration.getOrNull(key);
                                if (lumifyValue != null) {
                                    if (xmlValue == null) {
                                        LOGGER.info("setting Hibernate configuration %s with Lumify configuration value", key);
                                        hibernateConfiguration.setProperty(key, lumifyValue);
                                    } else if (!lumifyValue.equals(xmlValue)) {
                                        LOGGER.info("overriding Hibernate configuration %s with Lumify configuration value", key);
                                        hibernateConfiguration.setProperty(key, lumifyValue);
                                    }
                                }
                            }
                        }

                        ServiceRegistry serviceRegistryBuilder = new StandardServiceRegistryBuilder().applySettings(hibernateConfiguration.getProperties()).build();
                        SessionFactory sessionFactory = hibernateConfiguration.buildSessionFactory(serviceRegistryBuilder);
                        return new HibernateSessionManager(sessionFactory);
                    }
                })
                .in(Scopes.SINGLETON);
    }
}
TOP

Related Classes of io.lumify.sql.SqlBootstrapBindingProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.