package uk.co.optimisticpanda.dropwizard.commands;
import net.sourceforge.argparse4j.inf.Namespace;
import uk.co.optimisticpanda.dropwizard.DbDeployConfigurationStrategy;
import uk.co.optimisticpanda.dropwizard.DbDeployDatabaseConfiguration;
import uk.co.optimisticpanda.dropwizard.DbDeployProperties;
import uk.co.optimisticpanda.dropwizard.dbdeploy.ClasspathDbDeploy;
import com.yammer.dropwizard.cli.ConfiguredCommand;
import com.yammer.dropwizard.config.Bootstrap;
import com.yammer.dropwizard.config.Configuration;
public abstract class AbstractDbDeployCommand<T extends Configuration> extends ConfiguredCommand<T> {
private final DbDeployConfigurationStrategy<T> strategy;
private final Class<T> configurationClass;
protected AbstractDbDeployCommand(String name, String description, DbDeployConfigurationStrategy<T> strategy, Class<T> configurationClass) {
super(name, description);
this.strategy = strategy;
this.configurationClass = configurationClass;
}
@Override
protected Class<T> getConfigurationClass() {
return configurationClass;
}
@Override
protected void run(Bootstrap<T> bootstrap, Namespace namespace, T configuration) throws Exception {
DbDeployDatabaseConfiguration dbConfig = strategy.getDatabaseConfiguration(configuration);
dbConfig.setMaxSize(1);
dbConfig.setMinSize(1);
ClasspathDbDeploy dbdeploy = getDbDeploy(dbConfig);
run(namespace, dbdeploy, strategy.getDatabaseConfiguration(configuration));
}
public ClasspathDbDeploy getDbDeploy(DbDeployDatabaseConfiguration dbConfig) {
ClasspathDbDeploy dbdeploy = new ClasspathDbDeploy();
dbdeploy.setDriver(dbConfig.getDriverClass());
dbdeploy.setUrl(dbConfig.getUrl());
dbdeploy.setPassword(dbConfig.getPassword());
dbdeploy.setUserid(dbConfig.getUser());
DbDeployProperties dbdeployProps = dbConfig.getDbdeploy() != null ? dbConfig.getDbdeploy() : new DbDeployProperties();
dbdeploy.setChangeLogTableName(dbdeployProps.getChangelogTableName());
dbdeploy.setDbms(dbdeployProps.getDbms());
dbdeploy.setDelimiter(dbdeployProps.getDelimiter());
dbdeploy.setDelimiterType(dbdeployProps.getDelimiterType());
dbdeploy.setEncoding(dbdeployProps.getEncoding());
dbdeploy.setLastChangeToApply(dbdeployProps.getLastChangeToApply());
dbdeploy.setLineEnding(dbdeployProps.getLineEnding());
dbdeploy.setScriptLocation(dbdeployProps.getScriptLocation());
dbdeploy.setOutputfile(dbdeployProps.getOutputFile());
dbdeploy.setTemplateLocation(dbdeployProps.getTemplatesLocation());
dbdeploy.setUndoOutputfile(dbdeployProps.getUndoOutputFile());
return dbdeploy;
}
protected abstract void run(Namespace namespace, ClasspathDbDeploy dbdeploy, DbDeployDatabaseConfiguration config) throws Exception;
}