Example usage for org.apache.commons.lang3.exception ContextedRuntimeException ContextedRuntimeException

List of usage examples for org.apache.commons.lang3.exception ContextedRuntimeException ContextedRuntimeException

Introduction

In this page you can find the example usage for org.apache.commons.lang3.exception ContextedRuntimeException ContextedRuntimeException.

Prototype

public ContextedRuntimeException() 

Source Link

Document

Instantiates ContextedRuntimeException without message or cause.

Usage

From source file:net.certifi.audittablegen.ChangeSourceFactory.java

List<DBChangeUnit> getDBChangeList(TableDef baseTableDef) {

    List<DBChangeUnit> tableChangeUnits = new ArrayList();
    List<DBChangeUnit> renameColumnChangeUnits = new ArrayList();
    List<DBChangeUnit> alterTableChangeUnits = new ArrayList();

    DBChangeUnit workUnit;/*  www  . j a  va2  s  .c  o m*/
    String baseTableName = baseTableDef.getName();

    String newColumnName;

    if (baseTableDef == null) {
        logger.error("Invalid input. null TableDef");
        return tableChangeUnits;
    }

    if (baseTableDef.getColumns().isEmpty()) {
        ContextedRuntimeException e = new ContextedRuntimeException();
        e.setContextValue("tableName", baseTableDef.getName());
        logger.error("Invalid Input. TableDef has no columns.", e);
        return tableChangeUnits;
    }

    String auditTableName = tablePrefix + baseTableName + tablePostfix;

    String auditActionColumn = columnPrefix + "action" + columnPostfix;

    String auditTimeStampColumn = columnPrefix + "ts" + columnPostfix;

    String auditUserColumn = columnPrefix + "userId" + columnPostfix;

    String sessionUserColumn = columnPrefix + "sessionUser" + columnPostfix;

    TableDef auditTableDef = null;
    if (auditTablesMap.containsKey(auditTableName)) {
        auditTableDef = auditTablesMap.get(auditTableName);
    }

    if (isTableExcluded(baseTableName)) {
        //drop all audit triggers
        tableChangeUnits.add(new DBChangeUnit(DBChangeType.begin));
        workUnit = new DBChangeUnit(DBChangeType.dropTriggers);
        workUnit.setTableName(baseTableName);
        tableChangeUnits.add(workUnit);
        tableChangeUnits.add(new DBChangeUnit(DBChangeType.end));

        //done.  We don't want to alter any exising audit table
        return tableChangeUnits;
    }

    //create or alter audit table
    if (null == auditTableDef) {
        //create table
        tableChangeUnits.add(new DBChangeUnit(DBChangeType.begin));
        workUnit = new DBChangeUnit(DBChangeType.createTable);
        workUnit.tableName = auditTableName;
        tableChangeUnits.add(workUnit);

        //create id column
        workUnit = new DBChangeUnit(DBChangeType.addColumn);
        workUnit.setColumnName(auditTableName + "Id");
        workUnit.setTableName(auditTableName);
        workUnit.setTypeName(auditIdTypeName);
        workUnit.setIdentity(Boolean.TRUE);
        tableChangeUnits.add(workUnit);

        //create all columns on the base table
        for (ColumnDef baseColumn : baseTableDef.getColumns()) {
            workUnit = new DBChangeUnit(DBChangeType.addColumn);
            workUnit.setColumnName(baseColumn.getName());
            workUnit.setTableName(auditTableName);
            workUnit.setTypeName(baseColumn.getTypeName());
            workUnit.setSize(baseColumn.getSize());
            workUnit.setDecimalSize(baseColumn.getDecimalSize());
            tableChangeUnits.add(workUnit);
        }

        //create the audit tracking columns
        //action
        workUnit = new DBChangeUnit(DBChangeType.addColumn);
        workUnit.setColumnName(auditActionColumn);
        workUnit.setTableName(auditTableName);
        workUnit.setTypeName(auditActionTypeName); //insert, update, or delete
        workUnit.setSize(6);
        workUnit.setDecimalSize(0);
        tableChangeUnits.add(workUnit);

        //user
        workUnit = new DBChangeUnit(DBChangeType.addColumn);
        workUnit.setColumnName(auditUserColumn);
        workUnit.setTableName(auditTableName);
        workUnit.setTypeName(auditUserTypeName);
        workUnit.setSize(configSource.getMaxUserNameLength());
        workUnit.setDecimalSize(0);
        tableChangeUnits.add(workUnit);

        //timestamp
        workUnit = new DBChangeUnit(DBChangeType.addColumn);
        workUnit.setColumnName(auditTimeStampColumn);
        workUnit.setTableName(auditTableName);
        workUnit.setTypeName(auditTimeStampTypeName);
        workUnit.setSize(0);
        workUnit.setDecimalSize(0);
        tableChangeUnits.add(workUnit);

        //sessionUser
        if (!sessionUserSQL.isEmpty()) {
            workUnit = new DBChangeUnit(DBChangeType.addColumn);
            workUnit.setColumnName(sessionUserColumn);
            workUnit.setTableName(auditTableName);
            workUnit.setTypeName(sessionUserTypeName);
            workUnit.setSize(sessionUserDataSize);
            workUnit.setDecimalSize(0);
            tableChangeUnits.add(workUnit);
        }

        //end of table
        tableChangeUnits.add(new DBChangeUnit(DBChangeType.end));
    } else {
        //alter table
        //there might not be any changes, so store up any changes in 
        //a temporary list, and evaluate.
        alterTableChangeUnits.add(new DBChangeUnit(DBChangeType.begin));
        workUnit = new DBChangeUnit(DBChangeType.alterTable);
        workUnit.setTableName(auditTableName);
        alterTableChangeUnits.add(workUnit);

        //to make this a little easier, get a map for the column list
        Map<String, ColumnDef> auditColumnMap = new CaseInsensitiveMap();
        for (ColumnDef auditColumn : auditTableDef.getColumns()) {
            auditColumnMap.put(auditColumn.getName(), auditColumn);
        }

        //make sure the audit columns and the id exist
        //create the audit tracking columns
        //action
        if (!auditColumnMap.containsKey(auditActionColumn)) {
            logger.warn("Existing audit table {} does not contain column {}. Creating", auditTableName,
                    auditActionColumn);
            workUnit = new DBChangeUnit(DBChangeType.addColumn);
            workUnit.setColumnName(auditActionColumn);
            workUnit.setTableName(auditTableName);
            workUnit.setTypeName(auditActionTypeName); //insert, update, or delete
            workUnit.setSize(6);
            workUnit.setDecimalSize(0);
            alterTableChangeUnits.add(workUnit);
        }

        //user
        if (!auditColumnMap.containsKey(auditUserColumn)) {
            logger.warn("Existing audit table {} does not contain column {}. Creating", auditTableName,
                    auditUserColumn);
            workUnit = new DBChangeUnit(DBChangeType.addColumn);
            workUnit.setColumnName(auditUserColumn);
            workUnit.setTableName(auditTableName);
            workUnit.setTypeName(auditUserTypeName);
            workUnit.setSize(configSource.getMaxUserNameLength());
            workUnit.setDecimalSize(0);
            alterTableChangeUnits.add(workUnit);
        }

        //timestamp
        if (!auditColumnMap.containsKey(auditTimeStampColumn)) {
            logger.warn("Existing audit table {} does not contain column {}. Creating", auditTableName,
                    auditTimeStampColumn);
            workUnit = new DBChangeUnit(DBChangeType.addColumn);
            workUnit.setColumnName(auditTimeStampColumn);
            workUnit.setTableName(auditTableName);
            workUnit.setTypeName(auditTimeStampTypeName);
            workUnit.setSize(0);
            workUnit.setDecimalSize(0);
            alterTableChangeUnits.add(workUnit);
        }

        //seesionuser
        if (!sessionUserSQL.isEmpty()) {
            if (!auditColumnMap.containsKey(sessionUserColumn)) {
                logger.warn("Existing audit table {} does not contain column {}. Creating", auditTableName,
                        sessionUserColumn);
                workUnit = new DBChangeUnit(DBChangeType.addColumn);
                workUnit.setColumnName(sessionUserColumn);
                workUnit.setTableName(auditTableName);
                workUnit.setTypeName(sessionUserTypeName);
                workUnit.setSize(sessionUserDataSize);
                workUnit.setDecimalSize(0);
                alterTableChangeUnits.add(workUnit);
            }
        }

        //add or alter columns
        for (ColumnDef baseColumn : baseTableDef.getColumns()) {
            if (auditColumnMap.containsKey(baseColumn.name)) {
                //existing column
                ColumnDef auditColumn = auditColumnMap.get(baseColumn.name);
                if (auditColumn.getTypeName().equalsIgnoreCase(baseColumn.getTypeName())
                        && auditColumn.getSize() >= baseColumn.getSize()
                        && auditColumn.getDecimalSize() >= baseColumn.getDecimalSize()) {
                    //nothing to do
                } else if (auditColumn.getTypeName().equalsIgnoreCase(baseColumn.getTypeName())
                        && (auditColumn.getSize() < baseColumn.getSize()
                                || auditColumn.getDecimalSize() < baseColumn.getDecimalSize())) {
                    //type is the same, but size increased
                    workUnit = new DBChangeUnit(DBChangeType.alterColumnSize);
                    workUnit.setTableName(auditTableName);
                    workUnit.setColumnName(baseColumn.getName());
                    workUnit.setTypeName(baseColumn.getTypeName());
                    workUnit.setSize(baseColumn.getSize());
                    workUnit.setDecimalSize(baseColumn.getDecimalSize());
                    alterTableChangeUnits.add(workUnit);
                } else {
                    //type changes or size shrunk. Rename existing column
                    //and create new column in its place.  This requires
                    //the column rename to be done as a sepereate command
                    //from the other column changes.  (At least it does on
                    //postgres.
                    int i = 1;
                    do {
                        newColumnName = String.format("%s_prev%d", auditColumn.getName(), i);
                        i++;
                    } while (auditColumnMap.containsKey(newColumnName));
                    //rename the old version of the audit column
                    renameColumnChangeUnits.add((new DBChangeUnit(DBChangeType.begin)));
                    workUnit = new DBChangeUnit(DBChangeType.alterTable);
                    workUnit.setTableName(auditTableName);
                    renameColumnChangeUnits.add(workUnit);
                    workUnit = new DBChangeUnit(DBChangeType.alterColumnName);
                    workUnit.setTableName(auditTableName);
                    workUnit.setColumnName(auditColumn.getName());
                    workUnit.setNewColumnName(newColumnName);
                    workUnit.setTypeName(auditColumn.getTypeName());
                    workUnit.setSize(auditColumn.getSize());
                    workUnit.setDecimalSize(auditColumn.getDecimalSize());
                    renameColumnChangeUnits.add(workUnit);
                    renameColumnChangeUnits.add((new DBChangeUnit(DBChangeType.end)));

                    //now add the new version of the column
                    workUnit = new DBChangeUnit(DBChangeType.addColumn);
                    workUnit.setTableName(auditTableName);
                    workUnit.setColumnName(baseColumn.getName());
                    workUnit.setTypeName(baseColumn.getTypeName());
                    workUnit.setSize(baseColumn.getSize());
                    workUnit.setDecimalSize(baseColumn.getDecimalSize());
                    alterTableChangeUnits.add(workUnit);
                }
            } else {
                //new column
                workUnit = new DBChangeUnit(DBChangeType.addColumn);
                workUnit.setTableName(auditTableName);
                workUnit.setColumnName(baseColumn.getName());
                workUnit.setTypeName(baseColumn.getTypeName());
                workUnit.setSize(baseColumn.getSize());
                workUnit.setDecimalSize(baseColumn.getDecimalSize());
                alterTableChangeUnits.add(workUnit);
            }
        }

        //end of table
        alterTableChangeUnits.add(new DBChangeUnit(DBChangeType.end));

        //add the workUnits to the return value
        if (!renameColumnChangeUnits.isEmpty()) {
            tableChangeUnits.addAll(renameColumnChangeUnits);
        }

        if (alterTableChangeUnits.size() > 3) {
            tableChangeUnits.addAll(alterTableChangeUnits);
        }

    }

    //begin trigger changes
    tableChangeUnits.add(new DBChangeUnit(DBChangeType.begin));
    workUnit = new DBChangeUnit(DBChangeType.createTriggers);
    workUnit.setTableName(baseTableName);
    workUnit.setAuditTableName(auditTableName);
    tableChangeUnits.add(workUnit);

    //insert trigger
    workUnit = new DBChangeUnit(DBChangeType.fireOnInsert);
    workUnit.setTableName(baseTableName);
    workUnit.setAuditTableName(auditTableName);
    workUnit.setFiresTrigger(hasTriggerType(baseTableName, ConfigAttributeTypes.auditinsert));
    tableChangeUnits.add(workUnit);

    //update trigger
    workUnit = new DBChangeUnit(DBChangeType.fireOnUpdate);
    workUnit.setTableName(baseTableName);
    workUnit.setAuditTableName(auditTableName);
    workUnit.setFiresTrigger(hasTriggerType(baseTableName, ConfigAttributeTypes.auditupdate));
    tableChangeUnits.add(workUnit);

    //delete trigger
    workUnit = new DBChangeUnit(DBChangeType.fireOnDelete);
    workUnit.setTableName(baseTableName);
    workUnit.setAuditTableName(auditTableName);
    workUnit.setFiresTrigger(hasTriggerType(baseTableName, ConfigAttributeTypes.auditdelete));
    tableChangeUnits.add(workUnit);

    //now add the columns that will be included in the trigger
    //and set whether or not they will cause it to fire (default is true)
    for (ColumnDef baseColumnDef : baseTableDef.getColumns()) {
        workUnit = new DBChangeUnit(DBChangeType.addTriggerColumn);
        workUnit.setTableName(baseTableName);
        workUnit.setAuditTableName(auditTableName);
        workUnit.setColumnName(baseColumnDef.getName());
        if (isColumnExcluded(baseTableDef.getName(), baseColumnDef.getName())) {
            workUnit.setFiresTrigger(Boolean.FALSE);
        }
        tableChangeUnits.add(workUnit);
    }

    //add the audit tracking columns

    //action
    workUnit = new DBChangeUnit(DBChangeType.addTriggerAction);
    workUnit.setColumnName(auditActionColumn);
    workUnit.setTableName(baseTableName);
    workUnit.setAuditTableName(auditTableName);
    tableChangeUnits.add(workUnit);

    //user
    workUnit = new DBChangeUnit(DBChangeType.addTriggerUser);
    workUnit.setColumnName(auditUserColumn);
    workUnit.setTableName(baseTableName);
    workUnit.setAuditTableName(auditTableName);
    tableChangeUnits.add(workUnit);

    //timestamp
    workUnit = new DBChangeUnit(DBChangeType.addTriggerTimeStamp);
    workUnit.setColumnName(auditTimeStampColumn);
    workUnit.setTableName(baseTableName);
    workUnit.setAuditTableName(auditTableName);
    tableChangeUnits.add(workUnit);

    //sessionuser
    if (!sessionUserSQL.isEmpty()) {
        workUnit = new DBChangeUnit(DBChangeType.addTriggerSessionUser);
        workUnit.setColumnName(sessionUserColumn);
        workUnit.setTableName(baseTableName);
        workUnit.setAuditTableName(auditTableName);
        tableChangeUnits.add(workUnit);
    }

    //end trigger changes
    tableChangeUnits.add(new DBChangeUnit(DBChangeType.end));

    return tableChangeUnits;

}