Package com.celum.dbtool.configuration

Source Code of com.celum.dbtool.configuration.SelfInitConfiguration

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;
        }
    }
}
TOP

Related Classes of com.celum.dbtool.configuration.SelfInitConfiguration

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.