/*
* 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 ";
if (roles != null && !roles.contains("MANAGER"))
sql += " user_id = ? and ";
sql += " 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;
}
if (roles != null && roles.contains("MANAGER"))
queryMasterList = jdbcTemplate.query(sql,
new Object[] { str.toLowerCase(), DELETE_NO_FLAG }, queryMasterMapper);
else
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 ";
if (roles != null && !roles.contains("MANAGER"))
sql += " qm.user_id = ? and";
sql+= " 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;
}
if (roles != null && roles.contains("MANAGER"))
queryMasterList.addAll(jdbcTemplate.query(sql,
new Object[] { str.toLowerCase(), DELETE_NO_FLAG }, queryMasterMapper));
else
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 ";
if (roles != null && !roles.contains("MANAGER"))
sql += " 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
if (roles != null && roles.contains("MANAGER"))
args = new Object[] { str.toLowerCase(), DELETE_NO_FLAG };
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(String.valueOf(rs.getInt("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;
}
}
}