/*
* 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.Types;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.SqlUpdate;
import edu.harvard.i2b2.crc.dao.CRCDAO;
import edu.harvard.i2b2.crc.dao.DAOFactoryHelper;
import edu.harvard.i2b2.crc.datavo.db.DataSourceLookup;
import edu.harvard.i2b2.crc.datavo.db.QtQueryMaster;
/**
* 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 QueryPdoMasterSpringDao extends CRCDAO implements
IQueryPdoMasterDao {
JdbcTemplate jdbcTemplate = null;
SaveQueryMaster saveQueryMaster = null;
private DataSourceLookup dataSourceLookup = null;
public QueryPdoMasterSpringDao(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 createPdoQueryMaster(QtQueryMaster queryMaster,
String i2b2RequestXml) {
saveQueryMaster = new SaveQueryMaster(getDataSource(),
getDbSchemaName(), dataSourceLookup);
saveQueryMaster.save(queryMaster, i2b2RequestXml);
return queryMaster.getQueryMasterId();
}
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_PDO_QUERY_MASTER "
+ "(QUERY_MASTER_ID, USER_ID, GROUP_ID,CREATE_DATE,REQUEST_XML,I2B2_REQUEST_XML) "
+ "VALUES (?,?,?,?,?,?)";
setSql(INSERT_ORACLE);
SEQUENCE_ORACLE = "select " + dbSchemaName
+ "QT_SQ_PQM_QMID.nextval from dual";
declareParameter(new SqlParameter(Types.INTEGER));
} else if (dataSourceLookup.getServerType().equalsIgnoreCase(
DAOFactoryHelper.SQLSERVER) ) {
INSERT_SQLSERVER = "INSERT INTO "
+ dbSchemaName
+ "QT_PDO_QUERY_MASTER "
+ "( USER_ID, GROUP_ID,CREATE_DATE,REQUEST_XML,I2B2_REQUEST_XML) "
+ "VALUES (?,?,?,?,?)";
this.setSql(INSERT_SQLSERVER);
} else if ( dataSourceLookup.getServerType().equalsIgnoreCase(
DAOFactoryHelper.POSTGRESQL)) {
this.setReturnGeneratedKeys(true);
INSERT_POSTGRESQL = "INSERT INTO "
+ dbSchemaName
+ "QT_PDO_QUERY_MASTER "
+ "(QUERY_MASTER_ID, USER_ID, GROUP_ID,CREATE_DATE,REQUEST_XML,I2B2_REQUEST_XML) "
+ "VALUES (?,?,?,?,?,?)";
setSql(INSERT_POSTGRESQL);
SEQUENCE_POSTGRESQL = "select "// + dbSchemaName
+ "nextval('qt_pdo_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.TIMESTAMP));
declareParameter(new SqlParameter(Types.VARCHAR));
declareParameter(new SqlParameter(Types.VARCHAR));
compile();
}
public void save(QtQueryMaster queryMaster, String i2b2RequestXml) {
JdbcTemplate jdbc = getJdbcTemplate();
int masterQueryId = 0;
Object[] object = null;
int queryMasterIdentityId = 0;
if (dataSourceLookup.getServerType().equalsIgnoreCase(
DAOFactoryHelper.SQLSERVER)) {
object = new Object[] { queryMaster.getUserId(),
queryMaster.getGroupId(), queryMaster.getCreateDate(),
queryMaster.getRequestXml(), i2b2RequestXml };
update(object);
queryMasterIdentityId = jdbc.queryForInt("SELECT @@IDENTITY");
} else if (dataSourceLookup.getServerType().equalsIgnoreCase(
DAOFactoryHelper.ORACLE)) {
queryMasterIdentityId = jdbc.queryForInt(SEQUENCE_ORACLE);
object = new Object[] { queryMasterIdentityId,
queryMaster.getUserId(), queryMaster.getGroupId(),
queryMaster.getCreateDate(),
queryMaster.getRequestXml(), i2b2RequestXml };
update(object);
} else if (dataSourceLookup.getServerType().equalsIgnoreCase(
DAOFactoryHelper.POSTGRESQL)) {
queryMasterIdentityId = jdbc.queryForInt(SEQUENCE_POSTGRESQL);
object = new Object[] { queryMasterIdentityId,
queryMaster.getUserId(), queryMaster.getGroupId(),
queryMaster.getCreateDate(),
queryMaster.getRequestXml(), i2b2RequestXml };
update(object);
}
queryMaster.setQueryMasterId(String.valueOf(queryMasterIdentityId));
}
}
}