package org.deephacks.westty.config;
import org.deephacks.confit.Config;
import org.deephacks.confit.ConfigScope;
import java.util.Properties;
/**
* Jpa configuration that inherits configuration from DataSourceConfig if not set explicitly.
*/
@Config(name="jpa")
@ConfigScope
public class JpaConfig {
public static final String JPA_UNIT = "unit";
public static final String JPA_UNIT_DEFAULT = "default";
public static final String USER = "javax.persistence.jdbc.user";
public static final String PASSWORD = "javax.persistence.jdbc.password";
public static final String URL = "javax.persistence.jdbc.url";
public static final String DRIVER = "javax.persistence.jdbc.driver";
public static final String PROVIDER = "javax.persistence.provider";
public static final String TX_TYPE = "javax.persistence.transactionType";
public static final String VALIDATION_PRE_PERSIST = "javax.persistence.validation.group.pre-persist";
public static final String VALIDATION_PRE_UPDATE = "javax.persistence.validation.group.pre-update";
public static final String VALIDATION_PRE_REMOVE = "javax.persistence.transactionType";
public static final String VALIDATION_MODE = "javax.persistence.validation.mode";
public static final String HIBERNATE_DIALECT = "hibernate.dialect";
public static final String HIBERNATE_HBM2DDL_AUTO = "hibernate.hbm2ddl.auto";
public static final String HIBERNATE_SHOW_SQL = "hibernate.show_sql";
@Config(name = JPA_UNIT)
private String unit = JPA_UNIT_DEFAULT;
@Config(name = USER)
private String user;
@Config(name = PASSWORD)
private String password;
@Config(name = URL)
private String url;
@Config(name = DRIVER)
private String driver;
@Config(name = PROVIDER)
private String provider = "org.hibernate.ejb.HibernatePersistence";
@Config(name = TX_TYPE)
private String txType = "RESOURCE_LOCAL";
@Config(name = VALIDATION_MODE)
private String validationMode;
@Config(name = VALIDATION_PRE_PERSIST)
private String validationPrePersist;
@Config(name = VALIDATION_PRE_UPDATE)
private String validationPreUpdate;
@Config(name = VALIDATION_PRE_REMOVE)
private String validationPreRemove;
@Config(name = HIBERNATE_SHOW_SQL)
private Boolean hibernateShowSql = false;
@Config(name = HIBERNATE_HBM2DDL_AUTO)
private Boolean hibernateHbm2ddlAuto = false;
@Config(name = HIBERNATE_DIALECT)
private String hibernateDialect = "org.hibernate.dialect.DerbyTenSevenDialect";
@Config
private DataSourceConfig dataSourceConfig;
public Properties getProperties() {
Properties properties = new Properties();
properties.setProperty(JPA_UNIT_DEFAULT, getJpaUnit());
properties.setProperty(USER, getUsername());
properties.setProperty(PASSWORD, getPassword());
properties.setProperty(URL, getUrl());
properties.setProperty(DRIVER, getDriver());
properties.setProperty(PROVIDER, getProvider());
properties.setProperty(TX_TYPE, getTxType());
if (getValidationPrePersist() != null) {
properties.setProperty(VALIDATION_PRE_PERSIST, getValidationPrePersist());
}
if (getValidationPreRemove() != null) {
properties.setProperty(VALIDATION_PRE_REMOVE, getValidationPreRemove());
}
if (getValidationPreUpdate() != null) {
properties.setProperty(VALIDATION_PRE_UPDATE, getValidationPreUpdate());
}
properties.setProperty(HIBERNATE_SHOW_SQL, Boolean.toString(getHibernateShowSql()));
properties.setProperty(HIBERNATE_HBM2DDL_AUTO, Boolean.toString(getHibernateHbm2ddlAuto()));
properties.setProperty(HIBERNATE_DIALECT, getHibernateDialect());
return properties;
}
public String getJpaUnit() {
return unit;
}
public String getUsername() {
if (user == null) {
initDataSourceConfig();
return dataSourceConfig.getUser();
}
return user;
}
public String getPassword() {
if (password == null) {
initDataSourceConfig();
return dataSourceConfig.getPassword();
}
return password;
}
public String getUrl() {
if (url == null) {
initDataSourceConfig();
return dataSourceConfig.getUrl();
}
return url;
}
public String getDriver() {
if (driver == null) {
initDataSourceConfig();
return dataSourceConfig.getDriver();
}
return driver;
}
public String getProvider() {
return provider;
}
public String getTxType() {
return txType;
}
public String getValidationMode() {
return validationMode;
}
public String getValidationPrePersist() {
return validationPrePersist;
}
public String getValidationPreUpdate() {
return validationPreUpdate;
}
public String getValidationPreRemove() {
return validationPreRemove;
}
public boolean getHibernateShowSql() {
return hibernateShowSql;
}
public boolean getHibernateHbm2ddlAuto() {
return hibernateHbm2ddlAuto;
}
public String getHibernateDialect() {
return hibernateDialect;
}
private void initDataSourceConfig() {
if (dataSourceConfig == null) {
dataSourceConfig = new DataSourceConfig();
}
}
}