TableCreator.java

package org.ferris.riviera.console.table;

import static java.lang.String.format;
import java.sql.Connection;
import java.sql.Statement;
import java.util.StringJoiner;
import javax.annotation.Priority;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.apache.log4j.Logger;
import org.ferris.riviera.console.connection.ConnectionHandler;
import static org.ferris.riviera.console.table.TableFinderEvent.CREATE;

/**
 *
 * @author Michael Remijan mjremijan@yahoo.com @mjremijan
 */
@Singleton
public class TableCreator {

    @Inject
    protected Logger log;

    @Inject
    protected ConnectionHandler handler;

    protected void createScriptTable(
        @Observes @Priority(CREATE) TableFinderEvent event
    ) {
        log.info("ENTER");

        if (event.wasFound()) {
            log.debug("Table already exists, do not create it again");
            event.setWasCreated(false);
            return;
        }

        String sql = new StringJoiner(",", "CREATE TABLE SCRIPT_HISTORY (", ")")
            .add("RELEASE_VERSION VARCHAR(8) NOT NULL")
            .add("RELEASE_TITLE VARCHAR(50)")
            .add("MAJOR INT NOT NULL")
            .add("FEATURE INT NOT NULL")
            .add("BUG INT NOT NULL")
            .add("BUILD INT NOT NULL")
            .add("FILE_DESCRIPTION VARCHAR(50)")
            .add("FILE_NAME VARCHAR(100) NOT NULL")
            .add("APPLIED_ON TIMESTAMP NOT NULL")
            .add(
                new StringJoiner(",", "PRIMARY KEY (", ")")
                    .add("MAJOR").add("FEATURE").add("BUG").add("BUILD")
                    .toString()
            )
            .toString();

        try (
            Connection conn = handler.getConnection();
            Statement stmt = conn.createStatement();
        ) {
            log.info(format("Creating script table:%n%s", sql));
            event.setWasCreated(
                stmt.execute(sql)
            );
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}