package edu.harvard.i2b2.ontology.dao; import java.io.File; import java.util.Date; import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.jdbc.core.support.JdbcDaoSupport; import edu.harvard.i2b2.common.exception.I2B2Exception; import edu.harvard.i2b2.common.exception.StackTraceUtil; import edu.harvard.i2b2.ontology.datavo.crcloader.query.LoadDataResponseType; import edu.harvard.i2b2.ontology.datavo.i2b2message.MessageHeaderType; import edu.harvard.i2b2.ontology.datavo.i2b2message.SecurityType; import edu.harvard.i2b2.ontology.datavo.pm.ProjectType; import edu.harvard.i2b2.ontology.datavo.vdo.OntologyProcessStatusType; import edu.harvard.i2b2.ontology.delegate.crc.CallCRCUtil; import edu.harvard.i2b2.ontology.delegate.fr.CallFileRepositoryUtil; import edu.harvard.i2b2.ontology.ejb.DBInfoType; import edu.harvard.i2b2.ontology.util.OntologyUtil; public class CRCConceptUpdateDao extends JdbcDaoSupport { private static Log log = LogFactory.getLog(CRCConceptUpdateDao.class); private DataSource dataSource = null; public void setDataSourceObject(DataSource dataSource) { this.dataSource = dataSource; } private void setDataSource(String dataSourceName) { DataSource ds = null; try { ds = OntologyUtil.getInstance().getDataSource(dataSourceName); } catch (I2B2Exception e2) { log.error(e2.getMessage()); ; } dataSource = ds; } public OntologyProcessStatusType addUpdateConcept(ProjectType projectInfo, DBInfoType dbInfo, int processId, MessageHeaderType messageHeaderType, boolean synchronizeAllFlag, boolean hiddenConceptFlag) throws I2B2Exception { OntologyProcessStatusType ontProcessStatusType = null; OntProcessStatusDao ontProcessStatusDao = null; String pdoFileName = ""; try { String metadataSchema = dbInfo.getDb_fullSchema(); TableAccessDao tableAccessDao = new TableAccessDao(); if (this.dataSource == null) { setDataSource(dbInfo.getDb_dataSource()); } else { tableAccessDao.setDataSourceObject(this.dataSource); } SecurityType securityType = getSecurityType(messageHeaderType); String projectId = getProjectId(messageHeaderType); // update the process status ontProcessStatusDao = new OntProcessStatusDao(dataSource, projectInfo, dbInfo); pdoFileName = OntologyUtil.getInstance() .getFileRepositoryTempSpace() + System.getProperty("file.separator") + System.currentTimeMillis() + "_PDO_Concepts.xml"; CreateConceptXmlDao createConceptXmlDao = new CreateConceptXmlDao(); createConceptXmlDao.buildConceptUpdateXml(projectInfo, dbInfo, pdoFileName, synchronizeAllFlag,hiddenConceptFlag); ontProcessStatusDao.updateStatus(processId, null, "ONT_BUILD_PDO", "PROCESSING"); // call frc log.debug("Begin file transfer to FR"); //CallFileRepositoryUtil frUtil = new CallFileRepositoryUtil( // securityType, projectId); CallFileRepositoryUtil.callFileRepository(pdoFileName, securityType, projectId); log.debug("File transfered to FR"); ontProcessStatusDao.updateStatus(processId, null, "ONT_SENTTO_FRC", "PROCESSING"); // call crc loader //CallCRCUtil crcUtil = new CallCRCUtil(securityType, projectId); LoadDataResponseType loadDataResponseType = CallCRCUtil.callCRCUpload( pdoFileName, "ONT_SYNC_" + processId, synchronizeAllFlag,securityType, projectId); // update upload_id in the process table ontProcessStatusDao.updateCRCUploadId(processId, loadDataResponseType.getUploadId()); // poll upload status loadDataResponseType = CallCRCUtil .pollUploadStatus(loadDataResponseType.getUploadId()); ontProcessStatusDao.updateStatus(processId, new Date(System .currentTimeMillis()), "ONT_SENTTO_CRCLOADER", "COMPLETED"); return ontProcessStatusType; } catch (Throwable t) { t.printStackTrace(); if (ontProcessStatusDao != null && processId > 0) { ontProcessStatusDao.updateStatus(processId, new Date(System .currentTimeMillis()), "ERROR", "ERROR"); ontProcessStatusDao.updateStatusMessage(processId, StackTraceUtil.getStackTrace(t).substring(0, 1900)); } throw new I2B2Exception(StackTraceUtil.getStackTrace(t).substring( 0, 1900)); } finally { // try to delete the temp pdo file try { if (pdoFileName != null) { File deleteFile = new File(pdoFileName); if (deleteFile.exists()) { deleteFile.delete(); } } } catch (Exception e) { e.printStackTrace(); } } } private SecurityType getSecurityType(MessageHeaderType messageHeaderType) { SecurityType securityType = messageHeaderType.getSecurity(); return securityType; } private String getProjectId(MessageHeaderType messageHeaderType) { return messageHeaderType.getProjectId(); } }