package org.needle4j.junit;
import org.needle4j.configuration.NeedleConfiguration;
import org.needle4j.db.DatabaseTestcase;
import org.needle4j.db.operation.AbstractDBOperation;
@SuppressWarnings("unchecked")
public abstract class AbstractDatabaseRuleBuilder<B, R extends DatabaseTestcase> extends AbstractRuleBuilder<B, R> {
private Class<? extends AbstractDBOperation> dbOperationClass;
private String persistenceUnitName;
private String jdbcUrl;
private String jdbcDriver;
private String jdbcUser;
private String jdbcPassword;
private String hibernateCfgFilename;
@Override
public B fromResource(final String configurationResourceName) {
this.configurationResourceName = configurationResourceName;
return (B) this;
}
public B withDBOperation(final Class<? extends AbstractDBOperation> dbOperationClass) {
this.dbOperationClass = dbOperationClass;
return (B) this;
}
public B withJdbcUser(final String jdbcUser) {
this.jdbcUser = jdbcUser;
return (B) this;
}
public B withJdbcPassword(final String jdbcPassword) {
this.jdbcPassword = jdbcPassword;
return (B) this;
}
public B withJdbcUrl(final String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
return (B) this;
}
public B withPersistenceUnit(final String name) {
this.persistenceUnitName = name;
return (B) this;
}
public B withHibernateCfgFilename(final String name) {
this.hibernateCfgFilename = name;
return (B) this;
}
public B withJdbcDriver(final String jdbcDriver) {
this.jdbcDriver = jdbcDriver;
return (B) this;
}
@Override
protected final R build(final NeedleConfiguration needleConfiguration) {
needleConfiguration.setDBOperationClassName(dbOperationClass != null ? dbOperationClass.getName()
: needleConfiguration.getDBOperationClassName());
needleConfiguration.setJdbcDriver(jdbcDriver != null ? jdbcDriver : needleConfiguration.getJdbcDriver());
needleConfiguration.setJdbcUser(jdbcUser != null ? jdbcUser : needleConfiguration.getJdbcUser());
needleConfiguration
.setJdbcPassword(jdbcPassword != null ? jdbcPassword : needleConfiguration.getJdbcPassword());
needleConfiguration.setJdbcUrl(jdbcUrl != null ? jdbcUrl : needleConfiguration.getJdbcUrl());
needleConfiguration.setPersistenceunitName(persistenceUnitName != null ? persistenceUnitName
: needleConfiguration.getPersistenceunitName());
needleConfiguration.setHibernateCfgFilename(hibernateCfgFilename != null ? hibernateCfgFilename
: needleConfiguration.getHibernateCfgFilename());
return createRule(needleConfiguration);
}
protected abstract R createRule(final NeedleConfiguration needleConfiguration);
}