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

Java tutorial

Introduction

Here is the source code for edu.harvard.i2b2.crc.dao.setfinder.QueryPdoMasterSpringDao.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.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));

        }
    }

}