package edu.harvard.i2b2.crc.ejb.analysis;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.harvard.i2b2.common.exception.I2B2Exception;
import edu.harvard.i2b2.common.util.jaxb.JAXBUtilException;
import edu.harvard.i2b2.crc.dao.SetFinderDAOFactory;
import edu.harvard.i2b2.crc.dao.setfinder.IAnalysisPluginDao;
import edu.harvard.i2b2.crc.dao.setfinder.IQueryMasterDao;
import edu.harvard.i2b2.crc.datavo.db.QtAnalysisPlugin;
import edu.harvard.i2b2.crc.datavo.db.QtQueryMaster;
import edu.harvard.i2b2.crc.datavo.setfinder.query.AnalysisDefinitionType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.UserType;
import edu.harvard.i2b2.crc.util.I2B2RequestMessageHelper;
public class QueryMaster {
private static Log log = LogFactory.getLog(QueryMaster.class);
private SetFinderDAOFactory sfDAOFactory = null;
public QueryMaster(SetFinderDAOFactory sfDAOFactory) {
this.sfDAOFactory = sfDAOFactory;
}
public QtAnalysisPlugin lookupAnalysisPlugin(String analysisName,
String version, String projectId) throws I2B2Exception {
log.debug("looking for: " + analysisName +":" + version + ":" + projectId);
IAnalysisPluginDao analysisPluginDao = sfDAOFactory
.getAnalysisPluginDao();
log.debug("getting QtAnalysisPlugin");
QtAnalysisPlugin analysisPlugin = analysisPluginDao
.lookupAnalysisPluginByNameVersionProject(analysisName,
version, projectId);
return analysisPlugin;
}
public String saveQuery(String requestXml, String generatedSql,
QtAnalysisPlugin analysisPlugin) throws I2B2Exception {
IQueryMasterDao queryMasterDao = sfDAOFactory.getQueryMasterDAO();
QtQueryMaster queryMaster = new QtQueryMaster();
I2B2RequestMessageHelper msgHelper = new I2B2RequestMessageHelper(
requestXml);
UserType userType = msgHelper.getUserType();
String userId = userType.getLogin();
String groupId = msgHelper.getProjectId();
queryMaster.setUserId(userId);
AnalysisDefinitionType anaDefType;
String queryMasterId = null;
try {
anaDefType = msgHelper.getAnalysisDefinition();
String analysisDefinitionXml = msgHelper
.getAnalysisDefinitionXml(anaDefType);
queryMaster.setRequestXml(analysisDefinitionXml);
queryMaster.setGroupId(groupId);
queryMaster.setCreateDate(new Date(System.currentTimeMillis()));
queryMaster.setDeleteFlag(QtQueryMaster.DELETE_OFF_FLAG);
queryMaster.setGeneratedSql(null);
queryMaster.setName(anaDefType.getAnalysisPluginName());
queryMaster.setPluginId(analysisPlugin.getPluginId());
queryMaster.setMasterTypeCd(analysisPlugin.getPluginName());
queryMasterId = queryMasterDao.createQueryMaster(queryMaster,
requestXml, null);
} catch (JAXBUtilException e) {
throw new I2B2Exception("Failed to save query definition: ["
+ e.getMessage() + "]", e);
}
return queryMasterId;
}
public AnalysisDefinitionType getAnalysisDefinitionByMasterId(
String masterId) throws JAXBUtilException {
AnalysisDefinitionType analysisDefType = null;
IQueryMasterDao queryMasterDao = sfDAOFactory.getQueryMasterDAO();
QtQueryMaster queryMaster = queryMasterDao.getQueryDefinition(masterId);
String definitionXml = queryMaster.getRequestXml();
if (definitionXml == null) {
return analysisDefType;
}
analysisDefType = I2B2RequestMessageHelper
.getAnalysisDefinitionFromXml(definitionXml);
return analysisDefType;
}
public QtQueryMaster getQueryMaster(String requestXml) throws Exception {
QtQueryMaster queryMaster = new QtQueryMaster();
I2B2RequestMessageHelper msgHelper = new I2B2RequestMessageHelper(
requestXml);
UserType userType = msgHelper.getUserType();
String userId = userType.getLogin();
String groupId = userType.getGroup();
queryMaster.setUserId(userId);
AnalysisDefinitionType anaDefType;
try {
anaDefType = msgHelper.getAnalysisDefinition();
String analysisDefinitionXml = msgHelper
.getAnalysisDefinitionXml(anaDefType);
queryMaster.setRequestXml(analysisDefinitionXml);
queryMaster.setGroupId(groupId);
queryMaster.setCreateDate(new Date(System.currentTimeMillis()));
queryMaster.setDeleteFlag(QtQueryMaster.DELETE_OFF_FLAG);
queryMaster.setGeneratedSql("generatedSql");
queryMaster.setName(anaDefType.getAnalysisPluginName());
queryMaster.setI2b2RequestXml(requestXml);
} catch (JAXBUtilException e) {
throw new I2B2Exception("Failed to save query definition: ["
+ e.getMessage() + "]", e);
}
return queryMaster;
}
}