package com.celum.dbtool.configuration;
import com.celum.dbtool.Db;
import com.celum.dbtool.installer.DbVars;
import com.celum.dbtool.installer.VelocityInterceptor;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import static com.celum.nyx.Sql.*;
/**
*
*/
public class SelfInitConfiguration extends DefaultConfiguration {
/**
* init script try to create version table. When you don't specify
* some concrete script, the default universal script in 'com.celum.dbtool.configuration'
* package will be used.
* */
private InputStream initScript = this.getClass().getResourceAsStream("/com/celum/dbtool/configuration/init.sql");
/**
* Constructor
* @param versionTable
*/
SelfInitConfiguration(String versionTable)
{
super(versionTable);
initScript = this.getClass().getResourceAsStream("/com/celum/dbtool/configuration/init.sql");
}
@Override
public Db build()
{
init();
return super.build();
}
public SelfInitConfiguration setInitScriptAsStream(InputStream initScript)
{
if (initScript != null) {
this.initScript = initScript;
}
return this;
}
/**
* do self-init of version table (if it's needed)
*/
private void init()
{
//prepare values for placeholders
Map<String, String> values = new HashMap<String, String>();
values.put(DbVars.PATCHTABLE, this.versionTable);
VelocityInterceptor placeholders = new VelocityInterceptor(values);
//check if version table is available
if (!isVersionTableExist(placeholders)) {
sql(initScript).interceptWith(new VelocityInterceptor(values)).on(getDataSource()).run();
}
}
/**
* method execute simple select on version table, if query fail, the
* table is probably not existing.
*/
private boolean isVersionTableExist(VelocityInterceptor placeholders)
{
try {
sql("SELECT * FROM $" + DbVars.PATCHTABLE).interceptWith(placeholders).on(getDataSource()).run();
return true;
} catch (Exception e) {
return false;
}
}
}