package com.aceevo.ursus.db.liquibase;
import com.aceevo.ursus.config.UrsusJDBCConfiguration;
import com.aceevo.ursus.db.UrsusJDBCDataSource;
import com.aceevo.ursus.spi.liquibase.LiquibaseService;
import liquibase.Liquibase;
import liquibase.database.Database;
import liquibase.database.DatabaseFactory;
import liquibase.database.jvm.JdbcConnection;
import liquibase.resource.ClassLoaderResourceAccessor;
/**
* Created with IntelliJ IDEA.
* User: rayjenkins
* Date: 3/25/14
* Time: 6:34 PM
* To change this template use File | Settings | File Templates.
*/
public class LiquibaseServiceImpl implements LiquibaseService {
private static enum Liquibase_Command {dropall, update}
@Override
public void runLiquibaseCommand(UrsusJDBCConfiguration.Database ursusJDBCConfiguration, String command) {
final String migrationFile = ursusJDBCConfiguration.getMigrationFile();
if (migrationFile == null) {
throw new IllegalArgumentException("database.migrationFile must be set in order to run database migration.");
}
try {
UrsusJDBCDataSource ursusJDBCDataSource = new UrsusJDBCDataSource(ursusJDBCConfiguration);
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(ursusJDBCDataSource.getConnection()));
Liquibase liquibase = new Liquibase(migrationFile, new ClassLoaderResourceAccessor(), database);
Liquibase_Command liquibaseCommand = Liquibase_Command.valueOf(command.toLowerCase());
if (liquibaseCommand.equals(Liquibase_Command.dropall))
liquibase.dropAll();
else if (liquibaseCommand.equals(Liquibase_Command.update))
liquibase.update(null);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}