br.jpe.dallahits.script.core.InicializadorDB.java Source code

Java tutorial

Introduction

Here is the source code for br.jpe.dallahits.script.core.InicializadorDB.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jpe.dallahits.script.core;

import br.jpe.dallahits.exception.DAOException;
import br.jpe.dallahits.util.db.Conexao;
import br.jpe.dallahits.util.db.ConnFactory;
import br.jpe.dallahits.util.db.ConnManager;
import br.jpe.dallahits.util.db.ContextUtils;
import br.jpe.dallahits.util.db.DBUtils;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.apache.ibatis.jdbc.ScriptRunner;

/**
 * Classe InicializadorDB
 *
 * @author Joaov
 */
public class InicializadorDB {

    /** Diretrio relativo do script de criao das tabelas */
    private static final String SC_TABLES = "/META-INF/modelo/BD_Tables.sql";
    /** Diretrio relativo do script de inicializao de dados */
    private static final String SC_INIT = "/META-INF/modelo/BD_Init.sql";
    /** Diretrio relativo do script de criao das views */
    private static final String SC_VIEWS = "/META-INF/modelo/BD_Views.sql";

    /** Diretrio base */
    private final String dirBase;

    /**
     * Construtor default que recebe o diretrio base
     *
     * @param dirBase
     */
    public InicializadorDB(String dirBase) {
        this.dirBase = dirBase;
    }

    /**
     * Executa criao das tabelas do banco
     *
     * @throws IOException Falha ao ler Script SQL de gerao das tabelas
     * @throws DAOException Falha ao executar a criao das tabelas
     */
    public void exec() throws IOException, DAOException {
        Conexao conn = null;
        try {
            // Define as propriedades da conexo
            ConnManager.setProperties(ContextUtils.lePropriedadesConexao(dirBase));
            // Cria conexo e prepara o ScriptRunner
            conn = ConnFactory.criaConexaoTransacao();
            criaBaseDados();
            ScriptRunner sr = new ScriptRunner(conn.get());
            // Roda os scripts
            criaTabelas(sr);
            inicializaDados(sr);
            criaViews(sr);
        } catch (IOException e) {
            throw e;
        } finally {
            // Encerra conexo
            DBUtils.close(conn);
        }
    }

    /**
     * Roda o script de criao das tabelas
     *
     * @param sr ScriptRunner
     * @throws FileNotFoundException
     */
    private void criaTabelas(ScriptRunner sr) throws FileNotFoundException {
        sr.runScript(getReaderFor(SC_TABLES));
    }

    /**
     * Roda o script de inicializao dos dados
     *
     * @param sr ScriptRunner
     * @throws FileNotFoundException
     */
    private void inicializaDados(ScriptRunner sr) throws FileNotFoundException {
        sr.runScript(getReaderFor(SC_INIT));
    }

    /**
     * Roda o script de criao das tabelas
     *
     * @param sr ScriptRunner
     * @throws FileNotFoundException
     */
    private void criaViews(ScriptRunner sr) throws FileNotFoundException {
        sr.runScript(getReaderFor(SC_VIEWS));
    }

    /**
     * Cria um Reader(leitor) para determinado arquivo
     *
     * @param fileName Nome do arquivo
     * @return BufferedReader Leitor bufferizado
     * @throws FileNotFoundException
     */
    private BufferedReader getReaderFor(String fileName) throws FileNotFoundException {
        try {
            return ContextUtils.getResourcesAsReader(fileName);
        } catch (Exception e) {
            return new BufferedReader(new FileReader(dirBase + fileName));
        }
    }

    /**
     * Retorna o SQL de DROP database
     *
     * @return String
     */
    private String getSqlDropDB() {
        return "DROP SCHEMA IF EXISTS " + ConnManager.getDatabaseName();
    }

    /**
     * Retorna o SQL de CREATE database
     *
     * @return String
     */
    private String getSqlCreateDB() {
        return "CREATE SCHEMA IF NOT EXISTS " + ConnManager.getDatabaseName()
                + " DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci";
    }

    /**
     * Retorna o SQL de USE database
     *
     * @return String
     */
    private String getSqlUseDB() {
        return "USE " + ConnManager.getDatabaseName();
    }

    /**
     * Executa criao do Database (Schema)
     *
     * @throws DAOException
     */
    private void criaBaseDados() throws DAOException {
        try (Conexao conn = ConnFactory.criaConexaoTransacao()) {
            conn.execSQL(getSqlDropDB());
            conn.execSQL(getSqlCreateDB());
            conn.execSQL(getSqlUseDB());
        }
    }

}