/*
* 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:
* Lori Phillips
*/
package edu.harvard.i2b2.ontology.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import edu.harvard.i2b2.common.exception.I2B2Exception;
import edu.harvard.i2b2.ontology.datavo.vdo.ConceptType;
import edu.harvard.i2b2.ontology.datavo.vdo.GetReturnType;
import edu.harvard.i2b2.ontology.util.OntologyUtil;
import edu.harvard.i2b2.ontology.ejb.DBInfoType;
public class SchemesDao extends JdbcDaoSupport {
private static Log log = LogFactory.getLog(SchemesDao.class);
final static String DEFAULT = " c_key, c_name ";
private SimpleJdbcTemplate jt;
private void setDataSource(String dataSource) {
DataSource ds = null;
try {
ds = OntologyUtil.getInstance().getDataSource(dataSource);
} catch (I2B2Exception e2) {
log.error(e2.getMessage());;
}
this.jt = new SimpleJdbcTemplate(ds);
}
private String getMetadataSchema() throws I2B2Exception{
return OntologyUtil.getInstance().getMetaDataSchemaName();
}
public List findSchemes(final GetReturnType returnType, final DBInfoType dbInfo) throws DataAccessException{
// find return parameters
String parameters = DEFAULT;
String metadataSchema = dbInfo.getDb_fullSchema();
setDataSource(dbInfo.getDb_dataSource());
String schemesSql = "select distinct " + parameters + " from " + metadataSchema + "schemes order by c_name";
ParameterizedRowMapper<ConceptType> mapper = new ParameterizedRowMapper<ConceptType>() {
public ConceptType mapRow(ResultSet rs, int rowNum) throws SQLException {
ConceptType scheme = new ConceptType();
//assume key is "" unless we explicitly determine otherwise
// "" is valid
scheme.setKey("");
String c_key = rs.getString("c_key");
if((c_key!=null)&&(c_key.trim().length()>0)&&(!c_key.equals("(null)")))
scheme.setKey(c_key);
scheme.setName(rs.getString("c_name"));
return scheme;
}
};
List queryResult = null;
try {
queryResult = jt.query(schemesSql, mapper);
} catch (DataAccessException e) {
log.error(e.getMessage());
throw e;
}
log.debug("result size = " + queryResult.size());
return queryResult;
}
}