com.redprairie.moca.crud.TU_AbstractCrudTableCreate.java Source code

Java tutorial

Introduction

Here is the source code for com.redprairie.moca.crud.TU_AbstractCrudTableCreate.java

Source

/*
 *  $URL$
 *  $Author$
 *  $Date$
 *  
 *  $Copyright-Start$
 *
 *  Copyright (c) 2010
 *  Sam Corporation
 *  All Rights Reserved
 *
 *  This software is furnished under a corporate license for use on a
 *  single computer system and can be copied (with inclusion of the
 *  above copyright) only for use on such a system.
 *
 *  The information in this document is subject to change without notice
 *  and should not be construed as a commitment by Sam Corporation.
 *
 *  Sam Corporation assumes no responsibility for the use of the
 *  software described in this document on equipment which has not been
 *  supplied or approved by Sam Corporation.
 *
 *  $Copyright-End$
 */

package com.redprairie.moca.crud;

import java.sql.Types;
import java.util.Collections;

import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.dialect.Dialect;
import org.hibernate.service.classloading.internal.ClassLoaderServiceImpl;
import org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;

import com.redprairie.moca.MocaContext;
import com.redprairie.moca.MocaException;
import com.redprairie.moca.components.crud.TU_CrudService;
import com.redprairie.moca.db.hibernate.HibernateTools;
import com.redprairie.moca.server.ServerUtils;
import com.redprairie.moca.server.SystemConfigurationException;
import com.redprairie.moca.server.db.DBType;
import com.redprairie.moca.server.exec.ServerContext;
import com.redprairie.moca.util.MocaUtils;

/**
 * This is an abstract class that is used to basically create a dummy table
 * for testing crud commands.
 * 
 * Copyright (c) 2010 Sam Corporation
 * All Rights Reserved
 * 
 * @author wburns
 */
public abstract class TU_AbstractCrudTableCreate {
    @BeforeClass
    public static void beforeClass() throws SystemConfigurationException {
        ServerContext context = ServerUtils.setupDaemonContext(TU_CrudService.class.getName(), true);

        // We create a temporary table of test_codmst so we can use this for
        // our testing
        StringBuilder tableCreate = new StringBuilder();
        DBType type = context.getDbType();

        DialectFactoryImpl dialectFactory = new DialectFactoryImpl();
        dialectFactory.setClassLoaderService(new ClassLoaderServiceImpl());

        switch (type) {
        case MSSQL:
            _dialect = dialectFactory.buildDialect(Collections.singletonMap(AvailableSettings.DIALECT,
                    "com.redprairie.moca.db.hibernate.UnicodeSQLServerDialect"), null);
            break;
        case ORACLE:
            _dialect = dialectFactory.buildDialect(
                    Collections.singletonMap(AvailableSettings.DIALECT, "org.hibernate.dialect.Oracle10gDialect"),
                    null);
            break;
        default:
            throw new RuntimeException("There was no database supplied!");
        }

        tableCreate.append(_dialect.getCreateTableString());
        tableCreate.append(' ');
        tableCreate.append(tableName);
        tableCreate.append(" ( ");

        if (type.equals(DBType.MSSQL)) {
            //identity column
            tableCreate.append("rowid");
            tableCreate.append(' ');
            tableCreate.append(_dialect.getTypeName(Types.INTEGER));
            tableCreate.append(' ');
            tableCreate.append(_dialect.getIdentityColumnString(Types.INTEGER));
            tableCreate.append(",  ");
        }

        // colnam
        tableCreate.append("colnam");
        tableCreate.append(' ');
        tableCreate.append(_dialect.getTypeName(Types.VARCHAR, 20, 0, 0));
        tableCreate.append(" not null ");
        tableCreate.append(",  ");
        // codval
        tableCreate.append("codval");
        tableCreate.append(' ');
        tableCreate.append(_dialect.getTypeName(Types.VARCHAR, 40, 0, 0));
        tableCreate.append(" not null ");
        tableCreate.append(", ");
        // change
        tableCreate.append("change");
        tableCreate.append(' ');
        tableCreate.append(_dialect.getTypeName(Types.VARCHAR, 40, 0, 0));
        tableCreate.append(", ");
        // change_dt
        tableCreate.append("change_dt");
        tableCreate.append(' ');
        tableCreate.append(_dialect.getTypeName(Types.TIMESTAMP));
        tableCreate.append(", ");
        // change_int
        tableCreate.append("change_int");
        tableCreate.append(' ');
        tableCreate.append(_dialect.getTypeName(Types.INTEGER));
        tableCreate.append(", ");
        // ins_dt
        tableCreate.append("ins_dt");
        tableCreate.append(' ');
        tableCreate.append(_dialect.getTypeName(Types.TIMESTAMP));
        tableCreate.append(", ");
        // ins_user_id
        tableCreate.append("ins_user_id");
        tableCreate.append(' ');
        tableCreate.append(_dialect.getTypeName(Types.VARCHAR, 20, 0, 0));
        tableCreate.append(", ");
        // last_upd_dt
        tableCreate.append("last_upd_dt");
        tableCreate.append(' ');
        tableCreate.append(_dialect.getTypeName(Types.TIMESTAMP));
        tableCreate.append(", ");
        // last_upd_user_id
        tableCreate.append("last_upd_user_id");
        tableCreate.append(' ');
        tableCreate.append(_dialect.getTypeName(Types.VARCHAR, 20, 0, 0));
        tableCreate.append(", ");
        // u_version
        tableCreate.append("u_version");
        tableCreate.append(' ');
        tableCreate.append(_dialect.getTypeName(Types.INTEGER));
        tableCreate.append(", ");
        // defaulted not null flag
        tableCreate.append("def_flg");
        tableCreate.append(' ');
        tableCreate.append(_dialect.getTypeName(Types.INTEGER));
        tableCreate.append(" default 1 not null ");
        tableCreate.append(", ");
        // int_non_null value
        tableCreate.append("int_non_null");
        tableCreate.append(' ');
        tableCreate.append(_dialect.getTypeName(Types.INTEGER));
        tableCreate.append(" not null ");

        tableCreate.append(')');

        Session session = HibernateTools.getSession();

        SQLQuery query = session.createSQLQuery(tableCreate.toString());
        query.executeUpdate();

        // We have to create an index as well, since our list
        StringBuilder indexCreate = new StringBuilder();
        indexCreate.append("alter table ");
        indexCreate.append(tableName);
        indexCreate.append(' ');
        indexCreate.append(_dialect.getAddPrimaryKeyConstraintString("pk"));
        indexCreate.append(" ( colnam, codval )");

        SQLQuery indexQuery = session.createSQLQuery(indexCreate.toString());
        indexQuery.executeUpdate();
    }

    @AfterClass
    public static void afterClass() {
        // Lastly we have to drop the table since in oracle the ddl isn't
        // transactional it gets committed automatically
        Session session = HibernateTools.getSession();
        session.createSQLQuery("drop table " + tableName).executeUpdate();

        try {
            MocaUtils.currentContext().rollback();
        } catch (MocaException e) {
            e.printStackTrace();
        }
    }

    @Before
    public void beforeEachTest() {
        _moca = MocaUtils.currentContext();
    }

    protected MocaContext _moca;
    protected final static String tableName = "test_codmst";

    private static Dialect _dialect;
}