package edu.harvard.i2b2.crc.dao.setfinder; import java.io.StringWriter; import java.sql.ResultSet; import java.sql.Statement; import java.util.List; import java.util.Map; import edu.harvard.i2b2.common.exception.I2B2DAOException; import edu.harvard.i2b2.common.exception.I2B2Exception; import edu.harvard.i2b2.common.util.jaxb.JAXBUtil; import edu.harvard.i2b2.crc.dao.CRCDAO; import edu.harvard.i2b2.crc.dao.DAOFactoryHelper; import edu.harvard.i2b2.crc.dao.IDAOFactory; import edu.harvard.i2b2.crc.dao.SetFinderDAOFactory; import edu.harvard.i2b2.crc.datavo.CRCJAXBUtil; import edu.harvard.i2b2.crc.datavo.db.DataSourceLookup; import edu.harvard.i2b2.crc.datavo.db.QtQueryResultType; import edu.harvard.i2b2.crc.datavo.i2b2result.BodyType; import edu.harvard.i2b2.crc.datavo.i2b2result.DataType; import edu.harvard.i2b2.crc.datavo.i2b2result.ResultEnvelopeType; import edu.harvard.i2b2.crc.datavo.i2b2result.ResultType; import edu.harvard.i2b2.crc.ejb.role.MissingRoleException; import edu.harvard.i2b2.crc.role.AuthrizationHelper; public class QueryResultPatientCountGenerator extends CRCDAO implements IResultGenerator { public void generateResult(Map param) throws I2B2DAOException { SetFinderConnection sfConn = (SetFinderConnection) param .get("SetFinderConnection"); SetFinderDAOFactory sfDAOFactory = (SetFinderDAOFactory) param .get("SetFinderDAOFactory"); // String patientSetId = (String)param.get("PatientSetId"); String queryInstanceId = (String) param.get("QueryInstanceId"); String TEMP_DX_TABLE = (String) param.get("TEMP_DX_TABLE"); String resultInstanceId = (String) param.get("ResultInstanceId"); List<String> roles = (List<String>) param.get("Roles"); int obfucatedRecordCount = (Integer) param.get("ObfuscatedRecordCount"); int recordCount = (Integer) param.get("RecordCount"); String resultTypeName = (String) param.get("ResultOptionName"); Boolean queryWithoutTempTableFlag = (Boolean) param .get("QueryWithoutTempTableFlag"); boolean dataObfusRole = (Boolean)param.get("ObfuscatedRoleFlag"); this.setDbSchemaName(sfDAOFactory.getDataSourceLookup().getFullSchema()); boolean errorFlag = false; int patientCount = 0, realPatientCount = 0; try { if (dataObfusRole) { patientCount = obfucatedRecordCount; realPatientCount = recordCount; } else { patientCount = recordCount; realPatientCount = recordCount; obfucatedRecordCount = recordCount; } int i = 0; ResultType resultType = new ResultType(); resultType.setName("PATIENT_COUNT_XML"); DataType mdataType = new DataType(); mdataType.setValue(String.valueOf(patientCount)); mdataType.setColumn("patient_count"); mdataType.setType("int"); resultType.getData().add(mdataType); edu.harvard.i2b2.crc.datavo.i2b2result.ObjectFactory of = new edu.harvard.i2b2.crc.datavo.i2b2result.ObjectFactory(); BodyType bodyType = new BodyType(); bodyType.getAny().add(of.createResult(resultType)); ResultEnvelopeType resultEnvelope = new ResultEnvelopeType(); resultEnvelope.setBody(bodyType); JAXBUtil jaxbUtil = CRCJAXBUtil.getJAXBUtil(); StringWriter strWriter = new StringWriter(); jaxbUtil.marshaller(of.createI2B2ResultEnvelope(resultEnvelope), strWriter); IXmlResultDao xmlResultDao = sfDAOFactory.getXmlResultDao(); xmlResultDao.createQueryXmlResult(resultInstanceId, strWriter.toString()); } catch (Exception sqlEx) { log.error( "QueryResultPatientSetGenerator.generateResult:" + sqlEx.getMessage(), sqlEx); throw new I2B2DAOException( "QueryResultPatientSetGenerator.generateResult:" + sqlEx.getMessage(), sqlEx); } finally { IQueryResultInstanceDao resultInstanceDao = sfDAOFactory .getPatientSetResultDAO(); if (errorFlag) { resultInstanceDao.updatePatientSet(resultInstanceId, QueryStatusTypeId.STATUSTYPE_ID_ERROR, 0); } else { String obfusMethod = "", description = null; if (dataObfusRole) { obfusMethod = IQueryResultInstanceDao.OBSUBTOTAL; // add () to the result type description // read the description from result type } IQueryResultTypeDao resultTypeDao = sfDAOFactory .getQueryResultTypeDao(); List<QtQueryResultType> resultTypeList = resultTypeDao .getQueryResultTypeByName(resultTypeName); String queryName = sfDAOFactory .getQueryMasterDAO() .getQueryDefinition( sfDAOFactory .getQueryInstanceDAO() .getQueryInstanceByInstanceId( queryInstanceId) .getQtQueryMaster().getQueryMasterId()) .getName(); description = resultTypeList.get(0).getDescription() + " for \"" + queryName + "\""; resultInstanceDao.updatePatientSet(resultInstanceId, QueryStatusTypeId.STATUSTYPE_ID_FINISHED, "", obfucatedRecordCount, realPatientCount, obfusMethod); resultInstanceDao.updateResultInstanceDescription( resultInstanceId, description); } } } }