package edu.harvard.i2b2.crc.dao.setfinder;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import edu.harvard.i2b2.common.exception.I2B2DAOException;
import edu.harvard.i2b2.crc.dao.CRCDAO;
import edu.harvard.i2b2.crc.datavo.db.DataSourceLookup;
import edu.harvard.i2b2.crc.datavo.db.QtAnalysisPlugin;
public class AnalysisPluginSpringDao extends CRCDAO implements
IAnalysisPluginDao {
JdbcTemplate jdbcTemplate = null;
QtAnalysisPluginRowMapper analysisPluginMapper = new QtAnalysisPluginRowMapper();
private DataSourceLookup dataSourceLookup = null;
public AnalysisPluginSpringDao(DataSource dataSource,
DataSourceLookup dataSourceLookup) {
setDataSource(dataSource);
setDbSchemaName(dataSourceLookup.getFullSchema());
jdbcTemplate = new JdbcTemplate(dataSource);
this.dataSourceLookup = dataSourceLookup;
}
/**
* Return plugin metadata
*
* @param analysisName
* @param projectId
* @return
*/
public List<QtAnalysisPlugin> getAnalysisPluginMetadata(
String analysisName, String projectId) {
List<QtAnalysisPlugin> analysisPluginList = null;
// if the analysis name is ALL, then return all the plugin
if (analysisName != null && analysisName.equalsIgnoreCase("ALL")) {
String lookupSql = "select * from " + getDbSchemaName()
+ "qt_analysis_plugin where group_id = ? or group_id = '@'";
analysisPluginList = jdbcTemplate.query(lookupSql,
new Object[] { projectId }, analysisPluginMapper);
} else {
// if not get analysisname and the project = projectId or
// project='@'
String lookupSql = "select * from "
+ getDbSchemaName()
+ "qt_analysis_plugin where plugin_name = ? and (group_id = ? or group_id = '@')";
analysisPluginList = jdbcTemplate.query(lookupSql, new Object[] {
analysisName, projectId }, analysisPluginMapper);
}
return analysisPluginList;
}
public QtAnalysisPlugin lookupAnalysisPluginByNameVersionProject(
String analysisName, String version, String projectId)
throws I2B2DAOException {
List<QtAnalysisPlugin> analysisPluginList = null;
boolean getMaxVersionFlag = false;
String maxVersionCd = null, errorMsg = "";
QtAnalysisPlugin analysisPlugin = null;
if (version == null) {
getMaxVersionFlag = true;
}
analysisPluginList = getAnalysisPluginByNameAndProject(analysisName,
projectId);
// if the list is empty, then try with group_id = @s
if (analysisPluginList.size() < 1) {
projectId = "@";
analysisPluginList = getAnalysisPluginByNameAndProject(
analysisName, projectId);
}
if (analysisPluginList.size() > 0) {
if (getMaxVersionFlag) {
maxVersionCd = getMaxAnalysisPluginVersion(analysisName,
projectId);
version = maxVersionCd;
}
if (version == null) {
analysisPluginList = getAnalysisPluginByNameAndProject(
analysisName, projectId);
} else {
analysisPluginList = getAnalysisPluginByNameVersionProject(
analysisName, version, projectId);
}
}
if (analysisPluginList.size() > 0) {
analysisPlugin = analysisPluginList.get(0);
} else {
errorMsg = "Could not match plugin by name[" + analysisName
+ "] + version [" + version + "] and group [" + projectId
+ "]";
throw new I2B2DAOException(errorMsg);
}
return analysisPlugin;
}
private List<QtAnalysisPlugin> getAnalysisPluginByNameAndProject(
String analysisName, String projectId) {
String lookupSql = "select * from " + getDbSchemaName()
+ "qt_analysis_plugin where plugin_name = ? and group_id = ?";
List<QtAnalysisPlugin> analysisPluginList = jdbcTemplate.query(
lookupSql, new Object[] { analysisName, projectId },
analysisPluginMapper);
return analysisPluginList;
}
private String getMaxAnalysisPluginVersion(String analysisName,
String projectId) {
String lookupSql = "select max(version_cd) as maxversion from "
+ getDbSchemaName()
+ "qt_analysis_plugin where plugin_name = ? and group_id = ?";
String maxVersion = (String) jdbcTemplate.queryForObject(lookupSql,
new Object[] { analysisName, projectId }, String.class);
return maxVersion;
}
private List<QtAnalysisPlugin> getAnalysisPluginByNameVersionProject(
String analysisName, String version, String projectId) {
String lookupSql = "select * from "
+ getDbSchemaName()
+ "qt_analysis_plugin where plugin_name = ? and version_cd = ? and group_id = ?";
List<QtAnalysisPlugin> analysisPluginList = jdbcTemplate.query(
lookupSql, new Object[] { analysisName, version, projectId },
analysisPluginMapper);
return analysisPluginList;
}
public QtAnalysisPlugin getAnalysisPluginById(int analysisId)
throws I2B2DAOException {
String lookupSql = "select * from " + getDbSchemaName()
+ "qt_analysis_plugin where plugin_id = ?";
QtAnalysisPlugin analysisPlugin = (QtAnalysisPlugin) jdbcTemplate
.queryForObject(lookupSql, new Object[] { analysisId },
analysisPluginMapper);
return analysisPlugin;
}
private static class QtAnalysisPluginRowMapper implements RowMapper {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
QtAnalysisPlugin analysisPlugin = new QtAnalysisPlugin();
analysisPlugin.setPluginId(rs.getString("PLUGIN_ID"));
analysisPlugin.setPluginName(rs.getString("PLUGIN_NAME"));
analysisPlugin.setDescription(rs.getString("DESCRIPTION"));
analysisPlugin.setVersion(rs.getString("VERSION_CD"));
analysisPlugin.setCommandOptionCd(rs.getString("COMMANDOPTION_CD"));
analysisPlugin.setParameterInfo(rs.getString("PARAMETER_INFO"));
analysisPlugin.setParameterInfoXsd(rs
.getString("PARAMETER_INFO_XSD"));
analysisPlugin.setCommandLine(rs.getString("COMMAND_LINE"));
analysisPlugin.setWorkingFolder(rs.getString("WORKING_FOLDER"));
analysisPlugin.setPluginIcon(rs.getString("PLUGIN_ICON"));
analysisPlugin.setStatusId(rs.getString("STATUS_CD"));
analysisPlugin.setUserId(rs.getString("USER_ID"));
analysisPlugin.setGroupId(rs.getString("GROUP_ID"));
analysisPlugin.setCreateDate(rs.getTimestamp("CREATE_DATE"));
analysisPlugin.setUpdateDate(rs.getTimestamp("UPDATE_DATE"));
return analysisPlugin;
}
}
}