package edu.harvard.i2b2.crc.dao; import javax.sql.DataSource; import edu.harvard.i2b2.common.exception.I2B2DAOException; import edu.harvard.i2b2.common.exception.I2B2Exception; import edu.harvard.i2b2.crc.datavo.db.DataSourceLookup; public class DAOFactoryHelper { public static final String ORACLE = "ORACLE"; public static final String SQLSERVER = "SQLSERVER"; public static final String POSTGRESQL = "POSTGRESQL"; DataSourceLookup dataSourceLookup = null; DataSource dataSource = null; DataSourceLookup originalDataSourceLookup = null; public DAOFactoryHelper(String hiveId, String projectId, String ownerId) throws I2B2DAOException { originalDataSourceLookup = new DataSourceLookup(); originalDataSourceLookup.setProjectPath(projectId); originalDataSourceLookup.setOwnerId(ownerId); originalDataSourceLookup.setDomainId(hiveId); try { DataSourceLookupHelper dsHelper = new DataSourceLookupHelper(); dataSourceLookup = dsHelper.matchDataSource(hiveId, projectId, ownerId); } catch (I2B2Exception i2b2Ex) { throw new I2B2DAOException("DataSource lookup error" + i2b2Ex.getMessage(), i2b2Ex); } } public DAOFactoryHelper(DataSourceLookup dataSourceLookup) throws I2B2DAOException { this(dataSourceLookup.getDomainId(), dataSourceLookup.getProjectPath(), dataSourceLookup.getOwnerId()); } public DAOFactoryHelper(DataSourceLookup dataSourceLookup, DataSource dataSource) { this.dataSourceLookup = dataSourceLookup; this.dataSource = dataSource; } public DataSourceLookup getDataSourceLookup() { return dataSourceLookup; } public DataSourceLookup getOriginalDataSource() { return originalDataSourceLookup; } public IDAOFactory getDAOFactory() throws I2B2DAOException { String dataSourceName = dataSourceLookup.getServerType(); if (dataSourceName.equalsIgnoreCase(ORACLE)) { if (dataSource != null) { return new OracleDAOFactory(dataSourceLookup, dataSource); } else { return new OracleDAOFactory(dataSourceLookup, originalDataSourceLookup); } } else if (dataSourceName.equalsIgnoreCase(SQLSERVER)) { if (dataSource != null) { return new OracleDAOFactory(dataSourceLookup, dataSource); } else { return new OracleDAOFactory(dataSourceLookup, originalDataSourceLookup); } } else if (dataSourceName.equalsIgnoreCase(POSTGRESQL)) { if (dataSource != null) { return new OracleDAOFactory(dataSourceLookup, dataSource); } else { return new OracleDAOFactory(dataSourceLookup, originalDataSourceLookup); } } else { return null; } } }