/* * Copyright (c) 2006-2013 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: * Christopher Herrick */ package edu.harvard.i2b2.crc.dao.setfinder.querybuilder.temporal; import java.util.Map; import edu.harvard.i2b2.common.exception.I2B2Exception; import edu.harvard.i2b2.common.util.jaxb.JAXBUtilException; import edu.harvard.i2b2.crc.dao.CRCDAO; import edu.harvard.i2b2.crc.dao.setfinder.querybuilder.ProcessTimingReportUtil; import edu.harvard.i2b2.crc.datavo.db.DataSourceLookup; import edu.harvard.i2b2.crc.util.LogTimingUtil; import edu.harvard.i2b2.crc.util.ParamUtil; public class TemporalQueryBuilder extends CRCDAO { private StringBuffer sqlBuffer = new StringBuffer(); private StringBuffer ignoredItemBuffer = new StringBuffer(); private DataSourceLookup dataSourceLookup = null; private String queryXML = null; private StringBuffer processTimingMessageBuffer = new StringBuffer(); private Map projectParamMap = null; private String processTimingFlag = ""; private boolean allowLargeTextValueConstrainFlag = true; private boolean queryWithoutTempTableFlag = false; private boolean isTemporalQuery = false; public TemporalQueryBuilder(DataSourceLookup dataSourceLookup, String queryXML) { this.dataSourceLookup = dataSourceLookup; this.queryXML = queryXML; this.setDbSchemaName(dataSourceLookup.getFullSchema()); } public String getProcessTimingMessage() { return this.processTimingMessageBuffer.toString(); } public Map getProjectParamMap() { return this.projectParamMap; } public void setProjectParamMap(Map projectParamMap) { this.projectParamMap = projectParamMap; if (projectParamMap != null && projectParamMap.get(ParamUtil.PM_ENABLE_PROCESS_TIMING) != null) { this.processTimingFlag = (String) projectParamMap .get(ParamUtil.PM_ENABLE_PROCESS_TIMING); } } public void setAllowLargeTextValueConstrainFlag( boolean allowLargeTextValueConstrainFlag) { this.allowLargeTextValueConstrainFlag = allowLargeTextValueConstrainFlag; } public String getSql() { return sqlBuffer.toString(); } public String getIgnoredItemMessage() { return ignoredItemBuffer.toString(); } public void startSqlBuild() throws JAXBUtilException, I2B2Exception { LogTimingUtil logTimingUtil = new LogTimingUtil(); logTimingUtil.setStartTime(); execQuery(this.queryXML, null, 0); logTimingUtil.setEndTime(); if (processTimingFlag.equalsIgnoreCase(ProcessTimingReportUtil.INFO) || processTimingFlag .equalsIgnoreCase(ProcessTimingReportUtil.DEBUG)) { ProcessTimingReportUtil ptrUtil = new ProcessTimingReportUtil( this.dataSourceLookup); this.processTimingMessageBuffer.append(ptrUtil.buildProcessTiming( logTimingUtil, "BUILD SQL", null)); } } private String[] execQuery(String requestXML, String itemName, int level) throws JAXBUtilException, I2B2Exception { TemporalQueryHandler queryTool = null; queryTool = new TemporalQueryHandler(dataSourceLookup, requestXML, false); queryTool.setProjectParamMap(this.projectParamMap); if (this.processTimingFlag.equalsIgnoreCase(ProcessTimingReportUtil.DEBUG)) { queryTool.setProcessTimingFlag(this.processTimingFlag); } queryTool.setAllowLargeTextValueConstrainFlag(allowLargeTextValueConstrainFlag); queryTool.setQueryWithoutTempTableFlag(queryWithoutTempTableFlag); String sql = queryTool.buildSql(); String maxPanelNum = String.valueOf(queryTool.getMaxPanelNumber()); this.isTemporalQuery = queryTool.isTemporalQuery(); ignoredItemBuffer.append(queryTool.getIgnoredItemMessage()); if (this.processTimingFlag .equalsIgnoreCase(ProcessTimingReportUtil.DEBUG)) { processTimingMessageBuffer.append(queryTool .getProcessTimingMessage()); } log.debug("generated sql " + sql); sqlBuffer.append(sql); return new String[] { sql, maxPanelNum }; } /** * @return the queryWithoutTempTableFlag */ public boolean getQueryWithoutTempTableFlag() { return queryWithoutTempTableFlag; } /** * @param queryWithoutTempTableFlag the queryWithoutTempTableFlag to set */ public void setQueryWithoutTempTableFlag(boolean queryWithoutTempTableFlag) { this.queryWithoutTempTableFlag = queryWithoutTempTableFlag; } public boolean isTemporalQuery(){ return this.isTemporalQuery; } }