edu.harvard.i2b2.crc.dao.setfinder.QueryMasterSpringDao.java Source code

Java tutorial

Introduction

Here is the source code for edu.harvard.i2b2.crc.dao.setfinder.QueryMasterSpringDao.java

Source

/*
 * Copyright (c) 2006-2007 Massachusetts General Hospital 
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the i2b2 Software License v1.0 
 * which accompanies this distribution. 
 * 
 * Contributors: 
 *     Rajesh Kuttan
 */
package edu.harvard.i2b2.crc.dao.setfinder;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Date;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.dao.DataAccessException;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.SqlUpdate;

import edu.harvard.i2b2.common.exception.I2B2DAOException;
import edu.harvard.i2b2.common.exception.I2B2Exception;
import edu.harvard.i2b2.crc.dao.CRCDAO;
import edu.harvard.i2b2.crc.dao.DAOFactoryHelper;
import edu.harvard.i2b2.crc.dao.setfinder.querybuilder.DateConstrainHandler;
import edu.harvard.i2b2.crc.datavo.db.DataSourceLookup;
import edu.harvard.i2b2.crc.datavo.db.QtQueryMaster;
import edu.harvard.i2b2.crc.datavo.i2b2message.SecurityType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.FindByChildType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.MatchStrType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.UserRequestType;
import edu.harvard.i2b2.crc.util.CacheUtil;

/**
 * Class to manager persistance operation of QtQueryMaster $Id:
 * QueryMasterSpringDao.java,v 1.3 2008/04/08 19:36:52 rk903 Exp $
 * 
 * @author rkuttan
 * @see QtQueryMaster
 */
public class QueryMasterSpringDao extends CRCDAO implements IQueryMasterDao {

    JdbcTemplate jdbcTemplate = null;
    SaveQueryMaster saveQueryMaster = null;
    QtQueryMasterRowMapper queryMasterMapper = new QtQueryMasterRowMapper();

    public final String DELETE_YES_FLAG = "Y";
    public final String DELETE_NO_FLAG = "N";

    private DataSourceLookup dataSourceLookup = null;

    public QueryMasterSpringDao(DataSource dataSource, DataSourceLookup dataSourceLookup) {
        setDataSource(dataSource);
        setDbSchemaName(dataSourceLookup.getFullSchema());
        jdbcTemplate = new JdbcTemplate(dataSource);
        this.dataSourceLookup = dataSourceLookup;

    }

    /**
     * Function to create query master By default sets delete flag to false
     * 
     * @param queryMaster
     * @return query master id
     */
    public String createQueryMaster(QtQueryMaster queryMaster, String i2b2RequestXml, String pmXml) {
        queryMaster.setDeleteFlag(DELETE_NO_FLAG);
        saveQueryMaster = new SaveQueryMaster(getDataSource(), getDbSchemaName(), dataSourceLookup);
        saveQueryMaster.save(queryMaster, i2b2RequestXml, pmXml);
        return queryMaster.getQueryMasterId();
    }

    /**
     * Write query sql for the master id
     * 
     * @param masterId
     * @param generatedSql
     */
    public void updateQueryAfterRun(String masterId, String generatedSql, String masterType) {
        String sql = "UPDATE " + getDbSchemaName()
                + "QT_QUERY_MASTER set  GENERATED_SQL = ?, MASTER_TYPE_CD = ? where query_master_id = ?";
        jdbcTemplate.update(sql, new Object[] { generatedSql, masterType, Integer.parseInt(masterId) });
        // jdbcTemplate.update(sql);
    }

    /**
     * Returns list of query master by find search
     * 
     * @param userId
     * @return List<QtQueryMaster>
     * @throws I2B2Exception 
     */
    @SuppressWarnings("unchecked")
    public List<QtQueryMaster> getQueryMasterByNameInfo(SecurityType userRequestType, FindByChildType findChildType)
            throws I2B2DAOException {

        String rolePath = dataSourceLookup.getDomainId() + dataSourceLookup.getProjectPath()
                + userRequestType.getUsername();

        //List<String> roles = (List<String>) cache.getRoot().get(rolePath);
        log.debug("Roles from get " + rolePath);
        List<String> roles = (List<String>) CacheUtil.get(rolePath);

        String sql = "select ";

        int fetchSize = findChildType.getMax();
        List<QtQueryMaster> queryMasterList = null;

        String str = "";
        MatchStrType matchStr = findChildType.getMatchStr();
        if (matchStr.getStrategy().toLowerCase().equals("right")
                || matchStr.getStrategy().toLowerCase().equals("contains"))
            str = "%";
        str += matchStr.getValue();
        if (matchStr.getStrategy().toLowerCase().equals("left")
                || matchStr.getStrategy().toLowerCase().equals("contains"))
            str += "%";

        if (fetchSize > 0 && dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.SQLSERVER)) {
            sql += " top " + fetchSize;
        }
        if ((findChildType.getCategory().toLowerCase().equals("top"))
                || (findChildType.getCategory().toLowerCase().equals("@"))) {
            sql += " query_master_id,name,user_id,group_id,create_date,delete_date,null as request_xml,delete_flag,generated_sql, null as i2b2_request_xml, master_type_cd, null as plugin_id from "
                    + getDbSchemaName() + "qt_query_master "
                    + " where user_id = ? and LOWER(name) like ? and delete_flag = ? "; //and master_type_cd is NULL";
            if (findChildType.getCreateDate() != null) {
                DateConstrainHandler dateConstrainHandler = new DateConstrainHandler(dataSourceLookup);

                if (findChildType.isAscending())
                    sql += " and " + dateConstrainHandler.constructDateConstrainClause("create_date", "create_date",
                            null, null, findChildType.getCreateDate(), null);
                else
                    sql += " and " + dateConstrainHandler.constructDateConstrainClause("create_date", "create_date",
                            null, null, null, findChildType.getCreateDate());
                sql += " order by create_date  ";

            } else {
                sql += " order by create_date  ";
            }
            //   if (findChildType.isAscending())
            sql += "desc";
            //   else 
            //      sql += "asc";
        }
        if ((findChildType.getCategory().equals("@"))) {
            if (fetchSize > 0) {
                if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.ORACLE))
                    sql = "select * from ( " + sql + " ) where " + "  rownum <= " + fetchSize;
                else if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.POSTGRESQL))
                    sql += " limit " + fetchSize;
            }
            queryMasterList = jdbcTemplate.query(sql,
                    new Object[] { userRequestType.getUsername(), str.toLowerCase(), DELETE_NO_FLAG },
                    queryMasterMapper);

            sql = "select ";
            if (fetchSize > 0 && dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.SQLSERVER)) {
                sql += " top " + fetchSize;
            }
        }
        if ((findChildType.getCategory().toLowerCase().equals("results"))
                || (findChildType.getCategory().equals("@"))) {
            sql += " qm.query_master_id,qm.name,qm.user_id,qm.group_id,qm.create_date,qm.delete_date,null as request_xml,qm.delete_flag,qm.generated_sql, null as i2b2_request_xml, qm.master_type_cd, null as plugin_id  from "
                    + getDbSchemaName() + "qt_query_master qm, " + getDbSchemaName() + "qt_query_instance qi, "
                    + getDbSchemaName() + "qt_query_result_instance qri where "
                    + "qm.QUERY_MASTER_ID = qi.QUERY_MASTER_ID and "
                    + "qi.QUERY_INSTANCE_ID = qri.QUERY_INSTANCE_ID and "

                    + "  qm.user_id = ? and LOWER(qri.DESCRIPTION) like ? and qm.delete_flag = ? "; //and qm.master_type_cd is NULL";
            if (findChildType.getCreateDate() != null) {
                DateConstrainHandler dateConstrainHandler = new DateConstrainHandler(dataSourceLookup);

                if (!findChildType.isAscending())
                    sql += " and " + dateConstrainHandler.constructDateConstrainClause("create_date", "create_date",
                            null, null, findChildType.getCreateDate(), null);
                else
                    sql += " and " + dateConstrainHandler.constructDateConstrainClause("create_date", "create_date",
                            null, null, null, findChildType.getCreateDate());
                sql += " order by qm.create_date  ";

            } else {
                sql += " order by qm.create_date  ";
            }
            //   if (findChildType.isAscending())
            sql += "desc";
            //   else 
            //      sql += "asc";
        }
        if ((findChildType.getCategory().toLowerCase().equals("@"))) {

            if (fetchSize > 0) {
                if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.ORACLE))
                    sql = "select * from ( " + sql + " ) where " + "  rownum <= " + fetchSize;
                else if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.POSTGRESQL))
                    sql += " limit " + fetchSize;

            }
            queryMasterList.addAll(jdbcTemplate.query(sql,
                    new Object[] { userRequestType.getUsername(), str.toLowerCase(), DELETE_NO_FLAG },
                    queryMasterMapper));

            sql = " select ";
            if (fetchSize > 0 && dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.SQLSERVER)) {
                sql += " distinct top " + fetchSize;
            } else {
                sql += " distinct ";
            }
        }
        if ((findChildType.getCategory().toLowerCase().equals("pdo"))
                || (findChildType.getCategory().toLowerCase().equals("@"))) {
            sql += "  qm.query_master_id,qm.name,qm.user_id,qm.group_id,qm.create_date,qm.delete_date,null as request_xml,qm.delete_flag,null as generated_sql, null as i2b2_request_xml, qm.master_type_cd, null as plugin_id  from "
                    + getDbSchemaName() + "qt_query_master qm, " + getDbSchemaName() + "qt_query_instance qi, "
                    + getDbSchemaName() + "QT_PATIENT_SET_COLLECTION qp, " + getDbSchemaName()
                    + "qt_query_result_instance qri where " + "qm.QUERY_MASTER_ID = qi.QUERY_MASTER_ID and "
                    + "qi.QUERY_INSTANCE_ID = qri.QUERY_INSTANCE_ID and "
                    + "qri.RESULT_INSTANCE_ID = qp.RESULT_INSTANCE_ID and " + "  qm.user_id = ? and ";
            if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.POSTGRESQL))
                sql += " CAST(qp.patient_num AS TEXT) like ? and qm.delete_flag = ? ";
            else
                sql += " qp.patient_num like ? and qm.delete_flag = ? ";

            if (findChildType.getCreateDate() != null) {
                DateConstrainHandler dateConstrainHandler = new DateConstrainHandler(dataSourceLookup);

                if (!findChildType.isAscending())
                    sql += " and " + dateConstrainHandler.constructDateConstrainClause("create_date", "create_date",
                            null, null, findChildType.getCreateDate(), null);
                else
                    sql += " and " + dateConstrainHandler.constructDateConstrainClause("create_date", "create_date",
                            null, null, null, findChildType.getCreateDate());

                sql += " order by qm.create_date  ";
            } else {
                sql += " order by qm.create_date  ";
            }
            //   if (findChildType.isAscending())
            sql += "desc";
            //   else 
            //      sql += "asc";
        }

        if (fetchSize > 0) {
            if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.ORACLE))
                sql = "select * from ( " + sql + " ) where " + "  rownum <= " + fetchSize;
            else if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.POSTGRESQL))
                sql += " limit " + fetchSize;

        }

        //      if (findChildType.getCategory().toLowerCase().equals("@"))
        //         queryMasterList = jdbcTemplate.query(sql,
        //               new Object[] { userRequestType.getUsername(), str, DELETE_NO_FLAG, userRequestType.getUsername(), str, DELETE_NO_FLAG, userRequestType.getUsername(), str, DELETE_NO_FLAG }, queryMasterMapper);
        //      else
        Object[] args = null;
        String userid = userRequestType.getUsername();
        if (findChildType.getUserId() != null && roles != null && roles.contains("MANAGER"))
            userid = findChildType.getUserId();
        else if (findChildType.getUserId() != null)
            throw new I2B2DAOException("Permisison denied");
        //      if (findChildType.getCreateDate() != null)
        //          args = new Object[] { userid, str.toLowerCase(), DELETE_NO_FLAG,findChildType.getCreateDate() };
        //      else
        args = new Object[] { userid, str.toLowerCase(), DELETE_NO_FLAG };

        if (!findChildType.getCategory().toLowerCase().equals("@")) {
            queryMasterList = jdbcTemplate.query(sql, args, queryMasterMapper);
        } else {
            queryMasterList.addAll(jdbcTemplate.query(sql, args, queryMasterMapper));
        }
        return queryMasterList;
    }

    /**
     * Returns list of query master by user id
     * 
     * @param userId
     * @return List<QtQueryMaster>
     */
    @SuppressWarnings("unchecked")
    public List<QtQueryMaster> getQueryMasterByUserId(String userId, int fetchSize) {

        String sql = "select ";

        if (fetchSize > 0 && dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.SQLSERVER)) {
            sql += " top " + fetchSize;
        }
        sql += " query_master_id,name,user_id,group_id,create_date,delete_date,null as request_xml,delete_flag,generated_sql, null as i2b2_request_xml,  master_type_cd, null as plugin_id from "
                + getDbSchemaName() + "qt_query_master " + " where user_id = ? and delete_flag = ? ";// and master_type_cd is NULL";

        sql += " order by create_date desc  ";

        if (fetchSize > 0) {
            if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.ORACLE))
                sql = "select * from ( " + sql + " ) where " + "  rownum <= " + fetchSize;
            else if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.POSTGRESQL))
                sql += " limit " + fetchSize;

        }

        List<QtQueryMaster> queryMasterList = jdbcTemplate.query(sql, new Object[] { userId, DELETE_NO_FLAG },
                queryMasterMapper);

        return queryMasterList;
    }

    /**
     * Returns list of query master by group id
     * 
     * @param groupId
     * @return List<QtQueryMaster>
     */
    @SuppressWarnings("unchecked")
    public List<QtQueryMaster> getQueryMasterByGroupId(String groupId, int fetchSize) {

        String sql = "select ";
        if (fetchSize > 0 && dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.SQLSERVER)) {
            sql += " top " + fetchSize;
        }
        sql += " query_master_id,name,user_id,group_id,create_date,delete_date,null as request_xml,delete_flag,generated_sql,null as i2b2_request_xml, master_type_cd, null as plugin_id from "
                + getDbSchemaName() + "qt_query_master " + " where group_id = ? and delete_flag = ? "; //and master_type_cd is NULL";

        sql += " order by create_date desc  ";

        if (fetchSize > 0) {
            if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.ORACLE))
                sql = " select * from (  " + sql + " ) where  rownum <= " + fetchSize;
            else if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.POSTGRESQL))
                sql += " limit " + fetchSize;

        }
        List<QtQueryMaster> queryMasterList = jdbcTemplate.query(sql, new Object[] { groupId, DELETE_NO_FLAG },
                queryMasterMapper);
        return queryMasterList;
    }

    /**
     * Find Query master by id
     * 
     * @param masterId
     * @return QtQueryMaster
     */
    public QtQueryMaster getQueryDefinition(String masterId) {
        String sql = "select * from " + getDbSchemaName() + "qt_query_master "
                + " where query_master_id = ? and delete_flag = ? ";
        QtQueryMaster queryMaster = null;
        try {
            queryMaster = (QtQueryMaster) jdbcTemplate.queryForObject(sql,
                    new Object[] { Integer.parseInt(masterId), DELETE_NO_FLAG }, queryMasterMapper);
        } catch (IncorrectResultSizeDataAccessException inResultEx) {
            log.error("Query doesn't exists for masterId :[" + masterId + "]");
        } catch (DataAccessException e) {
            log.error("Could not execute query master for masterId :[" + masterId + "]");
        }
        return queryMaster;
    }

    public List<QtQueryMaster> getQueryByName(String queryName) {
        String sql = "select * from " + getDbSchemaName() + "qt_query_master "
                + " where name = ? and delete_flag = ? ";
        List<QtQueryMaster> queryMasterList = jdbcTemplate.query(sql, new Object[] { queryName, DELETE_NO_FLAG },
                queryMasterMapper);
        return queryMasterList;
    }

    /**
     * Function to rename query master
     * 
     * @param masterId
     * @param queryNewName
     * @throws I2B2DAOException
     */
    public void renameQuery(String masterId, String queryNewName) throws I2B2DAOException {
        log.debug("Rename  masterId=" + masterId + " new query name" + queryNewName);

        String sql = "update " + getDbSchemaName()
                + "qt_query_master set name = ? where query_master_id = ? and delete_flag = ?";
        int updatedRow = jdbcTemplate.update(sql, new Object[] { queryNewName, masterId, DELETE_NO_FLAG });
        if (updatedRow < 1) {
            throw new I2B2DAOException("Query with master id " + masterId + " not found");
        }

    }

    /**
     * Function to delete query using user and master id This function will not
     * delete permanently, it will set delete flag field in query master, query
     * instance and result instance to true
     * 
     * @param masterId
     * @throws I2B2DAOException
     */
    @SuppressWarnings("unchecked")
    public void deleteQuery(String masterId) throws I2B2DAOException {
        log.debug("Delete query for master id=" + masterId);
        String resultInstanceSql = "update " + getDbSchemaName() + "qt_query_result_instance set "
                + " delete_flag=? where query_instance_id in (select " + "query_instance_id from "
                + getDbSchemaName() + "qt_query_instance where query_master_id=?) ";
        if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.SQLSERVER)) {
            resultInstanceSql = " update " + getDbSchemaName() + "qt_query_result_instance set  delete_flag=? "
                    + " from " + getDbSchemaName() + "qt_query_result_instance qri inner join " + getDbSchemaName()
                    + "qt_query_instance qi " + " on  qri.query_instance_id = qi.query_instance_id "
                    + " where qi.query_master_id = ?";
        }
        String queryInstanceSql = "update " + getDbSchemaName()
                + "qt_query_instance set delete_flag = ? where query_master_id = ?  and delete_flag = ?";
        String queryMasterSql = "update " + getDbSchemaName()
                + "qt_query_master set delete_flag =?,delete_date=? where query_master_id = ? and delete_flag = ?";
        Date deleteDate = new Date(System.currentTimeMillis());
        int queryMasterCount = jdbcTemplate.update(queryMasterSql,
                new Object[] { DELETE_YES_FLAG, deleteDate, masterId, DELETE_NO_FLAG });
        if (queryMasterCount < 1) {
            throw new I2B2DAOException("Query not found with masterid =[" + masterId + "]");
        }

        int queryInstanceCount = jdbcTemplate.update(queryInstanceSql,
                new Object[] { DELETE_YES_FLAG, masterId, DELETE_NO_FLAG });
        log.debug("Total no. of query instance deleted" + queryInstanceCount);
        int queryResultInstanceCount = jdbcTemplate.update(resultInstanceSql,
                new Object[] { DELETE_YES_FLAG, masterId });
        log.debug("Total no. of query result deleted " + queryResultInstanceCount);
    }

    private static class SaveQueryMaster extends SqlUpdate {

        private String INSERT_ORACLE = "";
        private String INSERT_SQLSERVER = "";
        private String SEQUENCE_ORACLE = "";
        private String SEQUENCE_POSTGRESQL = "";
        private String INSERT_POSTGRESQL = "";

        private DataSourceLookup dataSourceLookup = null;

        public SaveQueryMaster(DataSource dataSource, String dbSchemaName, DataSourceLookup dataSourceLookup) {
            super();
            this.setDataSource(dataSource);
            if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.ORACLE)) {
                this.setReturnGeneratedKeys(true);
                INSERT_ORACLE = "INSERT INTO " + dbSchemaName + "QT_QUERY_MASTER "
                        + "(QUERY_MASTER_ID, NAME, USER_ID, GROUP_ID,MASTER_TYPE_CD,PLUGIN_ID,CREATE_DATE,DELETE_DATE,REQUEST_XML,DELETE_FLAG,GENERATED_SQL,I2B2_REQUEST_XML, PM_XML) "
                        + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)";
                setSql(INSERT_ORACLE);
                SEQUENCE_ORACLE = "select " + dbSchemaName + "QT_SQ_QM_QMID.nextval from dual";
                declareParameter(new SqlParameter(Types.INTEGER));
            } else if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.SQLSERVER)) {
                INSERT_SQLSERVER = "INSERT INTO " + dbSchemaName + "QT_QUERY_MASTER "
                        + "( NAME, USER_ID, GROUP_ID,MASTER_TYPE_CD,PLUGIN_ID,CREATE_DATE,DELETE_DATE,REQUEST_XML,DELETE_FLAG,GENERATED_SQL,I2B2_REQUEST_XML,PM_XML) "
                        + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?)";
                this.setSql(INSERT_SQLSERVER);
            } else if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.POSTGRESQL)) {
                this.setReturnGeneratedKeys(true);
                INSERT_POSTGRESQL = "INSERT INTO " + dbSchemaName + "QT_QUERY_MASTER "
                        + "(QUERY_MASTER_ID, NAME, USER_ID, GROUP_ID,MASTER_TYPE_CD,PLUGIN_ID,CREATE_DATE,DELETE_DATE,REQUEST_XML,DELETE_FLAG,GENERATED_SQL,I2B2_REQUEST_XML, PM_XML) "
                        + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)";
                setSql(INSERT_POSTGRESQL);
                SEQUENCE_POSTGRESQL = "select " //+ dbSchemaName
                        + " nextval('qt_query_master_query_master_id_seq') ";
                declareParameter(new SqlParameter(Types.INTEGER));
            }
            this.dataSourceLookup = dataSourceLookup;

            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.INTEGER));
            declareParameter(new SqlParameter(Types.TIMESTAMP));
            declareParameter(new SqlParameter(Types.TIMESTAMP));
            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.VARCHAR));
            declareParameter(new SqlParameter(Types.VARCHAR));
            compile();

        }

        public void save(QtQueryMaster queryMaster, String i2b2RequestXml, String pmXml) {
            JdbcTemplate jdbc = getJdbcTemplate();
            int masterQueryId = 0;
            Object[] object = null;
            int queryMasterIdentityId = 0;

            if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.SQLSERVER)) {
                object = new Object[] { queryMaster.getName(), queryMaster.getUserId(), queryMaster.getGroupId(),
                        queryMaster.getMasterTypeCd(), queryMaster.getPluginId(), queryMaster.getCreateDate(),
                        queryMaster.getDeleteDate(), queryMaster.getRequestXml(), queryMaster.getDeleteFlag(),
                        queryMaster.getGeneratedSql(), i2b2RequestXml, pmXml };
                update(object);
                queryMasterIdentityId = jdbc.queryForInt("SELECT @@IDENTITY");

            } else if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.ORACLE)) {
                queryMasterIdentityId = jdbc.queryForInt(SEQUENCE_ORACLE);
                object = new Object[] { queryMasterIdentityId, queryMaster.getName(), queryMaster.getUserId(),
                        queryMaster.getGroupId(), queryMaster.getMasterTypeCd(), queryMaster.getPluginId(),
                        queryMaster.getCreateDate(), queryMaster.getDeleteDate(), queryMaster.getRequestXml(),
                        queryMaster.getDeleteFlag(), queryMaster.getGeneratedSql(), i2b2RequestXml, pmXml };
                update(object);

            } else if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.POSTGRESQL)) {
                queryMasterIdentityId = jdbc.queryForInt(SEQUENCE_POSTGRESQL);
                object = new Object[] { queryMasterIdentityId, queryMaster.getName(), queryMaster.getUserId(),
                        queryMaster.getGroupId(), queryMaster.getMasterTypeCd(), queryMaster.getPluginId(),
                        queryMaster.getCreateDate(), queryMaster.getDeleteDate(), queryMaster.getRequestXml(),
                        queryMaster.getDeleteFlag(), queryMaster.getGeneratedSql(), i2b2RequestXml, pmXml };
                update(object);
            }

            queryMaster.setQueryMasterId(String.valueOf(queryMasterIdentityId));

        }
    }

    private static class QtQueryMasterRowMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            QtQueryMaster queryMaster = new QtQueryMaster();
            queryMaster.setQueryMasterId(rs.getString("QUERY_MASTER_ID"));
            queryMaster.setName(rs.getString("NAME"));
            queryMaster.setUserId(rs.getString("USER_ID"));
            queryMaster.setGroupId(rs.getString("GROUP_ID"));
            queryMaster.setMasterTypeCd(rs.getString("MASTER_TYPE_CD"));
            queryMaster.setPluginId(rs.getString("PLUGIN_ID"));
            queryMaster.setCreateDate(rs.getTimestamp("CREATE_DATE"));
            queryMaster.setDeleteDate(rs.getTimestamp("DELETE_DATE"));
            queryMaster.setRequestXml(rs.getString("REQUEST_XML"));
            queryMaster.setDeleteFlag(rs.getString("DELETE_FLAG"));
            queryMaster.setGeneratedSql(rs.getString("GENERATED_SQL"));
            queryMaster.setI2b2RequestXml(rs.getString("I2B2_REQUEST_XML"));
            return queryMaster;
        }
    }

}