All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fastnate.generator.provider.HibernateProvider Maven / Gradle / Ivy

There is a newer version: 1.5.0
Show newest version
package org.fastnate.generator.provider;

import java.util.Properties;

import org.fastnate.generator.context.GeneratorContext;
import org.fastnate.generator.dialect.GeneratorDialect;
import org.fastnate.generator.dialect.H2Dialect;
import org.fastnate.generator.dialect.MsSqlDialect;
import org.fastnate.generator.dialect.MySqlDialect;
import org.fastnate.generator.dialect.OracleDialect;
import org.fastnate.generator.dialect.PostgresDialect;
import org.hibernate.cfg.AvailableSettings;

/**
 * Encapsulates implementation details of Hibernate as JPA provider.
 *
 * @author Tobias Liefke
 */
public class HibernateProvider implements JpaProvider {

	private static Class getGeneratorDialectFromConnectionDriver(
			final Properties settings) {
		final String connectionDriver = settings.getProperty(AvailableSettings.DRIVER);
		if (connectionDriver != null) {
			if (connectionDriver.contains("postgresql")) {
				return PostgresDialect.class;
			}
			if (connectionDriver.contains("mysql")) {
				return MySqlDialect.class;
			}
			if (connectionDriver.contains("sqlserver")) {
				return MsSqlDialect.class;
			}
			if (connectionDriver.contains(".h2.")) {
				return H2Dialect.class;
			}
			if (connectionDriver.contains("oracle")) {
				return OracleDialect.class;
			}
		}
		return null;
	}

	private static Class getGeneratorDialectFromConnectionUrl(final Properties settings) {
		final String connectionUrl = settings.getProperty(AvailableSettings.URL);
		if (connectionUrl != null) {
			if (connectionUrl.contains(":oracle:")) {
				return OracleDialect.class;
			}
			if (connectionUrl.contains(":postgresql:")) {
				return PostgresDialect.class;
			}
			if (connectionUrl.contains(":mysql:")) {
				return MySqlDialect.class;
			}
			if (connectionUrl.contains(":sqlserver:")) {
				return MsSqlDialect.class;
			}
			if (connectionUrl.contains(":h2:")) {
				return H2Dialect.class;
			}
		}
		return null;
	}

	private static Class getGeneratorDialectFromHibernateDialect(
			final Properties settings) {
		final String hibernateDialect = settings.getProperty(AvailableSettings.DIALECT);
		if (hibernateDialect != null) {
			if (hibernateDialect.contains("Oracle")) {
				return OracleDialect.class;
			}
			if (hibernateDialect.contains("PostgreSQL")) {
				return PostgresDialect.class;
			}
			if (hibernateDialect.contains("MySQL")) {
				return MySqlDialect.class;
			}
			if (hibernateDialect.contains("SQLServer")) {
				return MsSqlDialect.class;
			}
			if (hibernateDialect.contains("H2Dialect")) {
				return H2Dialect.class;
			}
		}
		return null;
	}

	@Override
	public String getDefaultSequence() {
		return "hibernate_sequence";
	}

	@Override
	public void initialize(final Properties settings) {
		if (!settings.contains(GeneratorContext.DIALECT_KEY)) {
			// Try to determine the dialect dynamically
			Class dialect = getGeneratorDialectFromHibernateDialect(settings);
			if (dialect == null) {
				dialect = getGeneratorDialectFromConnectionUrl(settings);
				if (dialect == null) {
					dialect = getGeneratorDialectFromConnectionDriver(settings);
				}
			}
			if (dialect != null) {
				settings.setProperty(GeneratorContext.DIALECT_KEY, dialect.getName());
			}
		}
	}

	@Override
	public boolean isJoinedDiscriminatorNeeded() {
		return false;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy