/*
* 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.ejb;
import java.rmi.RemoteException;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.harvard.i2b2.common.exception.I2B2DAOException;
import edu.harvard.i2b2.common.util.jaxb.DTOFactory;
import edu.harvard.i2b2.crc.dao.DAOFactoryHelper;
import edu.harvard.i2b2.crc.dao.SetFinderDAOFactory;
import edu.harvard.i2b2.crc.dao.setfinder.IQueryResultInstanceDao;
import edu.harvard.i2b2.crc.dao.setfinder.IXmlResultDao;
import edu.harvard.i2b2.crc.datavo.PSMFactory;
import edu.harvard.i2b2.crc.datavo.db.DataSourceLookup;
import edu.harvard.i2b2.crc.datavo.db.QtQueryResultInstance;
import edu.harvard.i2b2.crc.datavo.db.QtXmlResult;
import edu.harvard.i2b2.crc.datavo.setfinder.query.CrcXmlResultResponseType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.QueryResultInstanceType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.ResultResponseType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.XmlResultType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.XmlValueType;
/**
* Ejb manager class for query operation
*
*
* @ejb.bean description="QueryTool Query Result"
* display-name="QueryTool Query Result"
* jndi-name="ejb.querytool.QueryResult"
* local-jndi-name="ejb.querytool.QueryResultLocal"
* name="querytool.QueryResult" type="Stateless" view-type="both"
* transaction-type="Container"
*
*
*
* @ejb.interface remote-class="edu.harvard.i2b2.crc.ejb.QueryResultRemote"
*
*
*/
public class QueryResultBean { // implements SessionBean {
private static Log log = LogFactory.getLog(QueryResultBean.class);
/**
*
*
* @throws I2B2DAOException
* @ejb.interface-method view-type="both"
* @ejb.transaction type="Required"
*
*
*/
public ResultResponseType getResultInstanceFromQueryInstanceId(DataSourceLookup dataSourceLookup,String userId, String queryInstanceId) throws I2B2DAOException {
SetFinderDAOFactory sfDaoFactory = this.getSetFinderDaoFactory(dataSourceLookup.getDomainId(), dataSourceLookup.getProjectPath(), dataSourceLookup.getOwnerId());
IQueryResultInstanceDao patientSetResultDao = sfDaoFactory.getPatientSetResultDAO();
log.debug("got resultinstancesdao" + patientSetResultDao.toString());
List<QtQueryResultInstance> queryResultInstanceList = patientSetResultDao.getResultInstanceList( queryInstanceId);
log.debug("got QtQueryResultInstance" + queryResultInstanceList.size());
ResultResponseType resultResponseType = new ResultResponseType();
DTOFactory dtoFactory = new DTOFactory();
for(QtQueryResultInstance resultInstance: queryResultInstanceList) {
QueryResultInstanceType queryResultInstanceType = PSMFactory.buildQueryResultInstanceType(resultInstance);
//System.out.println("RESULT INSTANCE " + resultInstance.getResultInstanceId() );
resultResponseType.getQueryResultInstance().add(queryResultInstanceType);
}
//System.out.print("SIZE OF RESULT INSTANCE "+ resultResponseType.getQueryResultInstance().size());
return resultResponseType;
}
/**
*
*
* @throws I2B2DAOException
* @ejb.interface-method view-type="both"
* @ejb.transaction type="Required"
*
*/
public CrcXmlResultResponseType getXmlResultFromResultInstanceId(DataSourceLookup dataSourceLookup,String queryResultInstanceId) throws I2B2DAOException {
SetFinderDAOFactory sfDaoFactory = this.getSetFinderDaoFactory(dataSourceLookup.getDomainId(), dataSourceLookup.getProjectPath(), dataSourceLookup.getOwnerId());
IXmlResultDao xmlResultDao = sfDaoFactory.getXmlResultDao();
QtXmlResult xmlResult = xmlResultDao.getXmlResultByResultInstanceId(queryResultInstanceId);
CrcXmlResultResponseType resultResponseType = new CrcXmlResultResponseType();
IQueryResultInstanceDao queryResultInstanceDao = sfDaoFactory.getPatientSetResultDAO();
QtQueryResultInstance resultInstance = queryResultInstanceDao.getResultInstanceById(queryResultInstanceId);
QueryResultInstanceType resultInstanceType = new QueryResultInstanceType();
if (resultInstance != null) {
resultInstanceType = PSMFactory.buildQueryResultInstanceType(resultInstance);
}
resultResponseType.setQueryResultInstance(resultInstanceType);
if (xmlResult !=null) {
XmlResultType xmlResultType = new XmlResultType();
xmlResultType.setXmlResultId(xmlResult.getXmlResultId());
String xmlValue = xmlResult.getXmlValue();
if (xmlValue != null) {
XmlValueType xmlValueType = new XmlValueType();
xmlValueType.getContent().add(xmlValue);
xmlResultType.setXmlValue(xmlValueType);
}
xmlResultType.setResultInstanceId(xmlResult.getQtQueryResultInstance().getResultInstanceId());
resultResponseType.setCrcXmlResult(xmlResultType);
}
return resultResponseType;
}
private SetFinderDAOFactory getSetFinderDaoFactory(String domainId,String projectPath,String ownerId) throws I2B2DAOException {
DAOFactoryHelper helper = new DAOFactoryHelper(domainId,projectPath,ownerId);
SetFinderDAOFactory sfDaoFactory = helper.getDAOFactory().getSetFinderDAOFactory();
return sfDaoFactory;
}
}