summaryrefslogtreecommitdiffstats
path: root/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java
diff options
context:
space:
mode:
Diffstat (limited to 'ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java')
-rw-r--r--ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java3401
1 files changed, 3401 insertions, 0 deletions
diff --git a/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java
new file mode 100644
index 00000000..78097d6d
--- /dev/null
+++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java
@@ -0,0 +1,3401 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.io.Serializable;
+import java.sql.Connection;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.model.DataCache;
+import org.openecomp.portalsdk.analytics.model.ReportHandler;
+import org.openecomp.portalsdk.analytics.model.ReportLoader;
+import org.openecomp.portalsdk.analytics.model.base.IdNameList;
+import org.openecomp.portalsdk.analytics.model.base.IdNameSql;
+import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
+import org.openecomp.portalsdk.analytics.model.base.ReportWrapper;
+import org.openecomp.portalsdk.analytics.model.definition.Marker;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.analytics.view.ColumnHeader;
+import org.openecomp.portalsdk.analytics.view.ColumnHeaderRow;
+import org.openecomp.portalsdk.analytics.view.CrossTabOrderManager;
+import org.openecomp.portalsdk.analytics.view.CrossTabTotalValue;
+import org.openecomp.portalsdk.analytics.view.DataRow;
+import org.openecomp.portalsdk.analytics.view.DataValue;
+import org.openecomp.portalsdk.analytics.view.ReportData;
+import org.openecomp.portalsdk.analytics.view.RowHeaderCol;
+import org.openecomp.portalsdk.analytics.xmlobj.CustomReportType;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+import org.openecomp.portalsdk.analytics.xmlobj.FormFieldType;
+import org.openecomp.portalsdk.analytics.xmlobj.ObjectFactory;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+
+/**<HR/>
+ * This class is part of <B><I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I></B><BR/>
+ * <HR/>
+ *
+ * --------------------------------------------------------------------------------------------------<BR/>
+ * <B>ReportRuntime.java</B> - This class involves in running, downloading RAPTOR reports.
+ * --------------------------------------------------------------------------------------------------<BR/>
+ *
+ *
+ * <U>Change Log</U><BR/><BR/>
+ *
+ * 27-Aug-2009 : Version 8.5 (Sundar); <UL><LI>Order by logic is restored for DAYTONA.</LI></UL>
+ * 13-Aug-2009 : Version 8.5 (Sundar); <UL><LI>Removing order by logic is rollbacked.</LI></UL>
+ * 22-Jun-2009 : Version 8.4 (Sundar); <UL><LI>Bug while parsing SQL for text download is fixed.</LI></UL>
+ *
+ */
+
+public class ReportRuntime extends ReportWrapper implements Cloneable, Serializable {
+
+ static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportRuntime.class);
+
+
+ //TODO DELETE IF PARSE SQL is not working
+ private int curSQLParsePos = 0;
+
+ private String xmlFileURL = null;
+
+ private String xmlFileName = null;
+
+ private String flatFileName = null;
+
+ private String excelPageFileName = null;
+
+ private int reportDataSize = -1;
+
+ private boolean displayChart = true;
+
+ private boolean displayForm = true;
+
+ private boolean displayContent = true;
+
+ private boolean reportRunLogged = false; // Used to avoid multiple
+ // entries in the report log
+ // when executing with different
+ // params or going to next page
+
+ private DataSet chartDataCache = null;
+
+ private ReportData pageDataCache = null;
+
+ private int cachedPageNo = -1;
+
+ private String cachedSQL = null; // For display purposes only
+
+ private String wholeSQL = null; // For display purposes only
+
+ private String totalSql = null; // For display purposes only
+
+ private ReportParamValues reportParamValues = null;
+
+ private ReportParamValuesForPDFExcel reportParamValuesFPE = null;
+
+ private ReportFormFields reportFormFields = null;
+
+ private VisualManager visualManager = null;
+
+ private CrossTabOrderManager crossTabOrderManager = null;
+
+ private boolean displayColTotals = false;
+
+ private boolean displayRowTotals = false;
+
+ private DataRow colDataTotalsLinear = null;
+
+ private Vector colDataTotalsCrosstab = null;
+
+ private Vector rowDataTotalsCrosstab = null;
+
+ private String grandTotalCrosstab = null;
+
+ public static int DISPLAY_DATA_ONLY = 1;
+ public static int DISPLAY_CHART_ONLY = 2;
+ public static int DISPLAY_CHART_AND_DATA = 3;
+
+ public static final int DATE_OPTION_MONTHLY = 1;
+ public static final int DATE_OPTION_YEARLY = 2;
+ public static final int DATE_OPTION_DAILY = 3;
+
+
+ private int DISPLAY_MODE = 0;
+
+ private int DATE_OPTION = -1;
+
+ /*
+ * private ReportRuntime(CustomReport cr, String reportID,
+ * HttpServletRequest request) { super(cr, reportID);
+ *
+ * reportParamValues = new ReportParamValues(this); reportFormFields = new
+ * ReportFormFields(this);
+ *
+ * if(request!=null) setParamValues(request); } // ReportRuntime
+ */
+ private ReportRuntime(CustomReportType crType, String reportID, HttpServletRequest request,
+ String ownerID, String createID, String createDate, String updateID,
+ String updateDate, String menuID, boolean menuApproved) throws RaptorException {
+ super(crType, reportID, ownerID, createID, createDate, updateID, updateDate, menuID,
+ menuApproved);
+ initializeReportRuntime(request);
+ } // ReportRuntime
+
+ public ReportRuntime(ReportWrapper rw) throws RaptorException {
+ this(rw, null);
+ } // ReportRuntime
+
+ public ReportRuntime(ReportWrapper rw, HttpServletRequest request)throws RaptorException {
+ super(rw);
+ initializeReportRuntime(request);
+ } // ReportRuntime
+
+ private void initializeReportRuntime(HttpServletRequest request) throws RaptorException {
+ reportFormFields = new ReportFormFields(this, request);
+ setParamValues(request, true, true);
+
+ visualManager = new VisualManager();
+ } // initializeReportRuntime
+
+// public void setReportFormFields(HttpServletRequest request) {
+// reportFormFields = new ReportFormFields(this, request);
+// setParamValues(request, true, true);
+// }
+
+ public static ReportRuntime unmarshal(String reportXML, String reportID)
+ throws RaptorException {
+ return unmarshal(reportXML, reportID, null);
+ } // unmarshal
+
+ public static ReportRuntime unmarshal(String reportXML, String reportID,
+ HttpServletRequest request) throws RaptorException {
+ CustomReportType crType = ReportWrapper.unmarshalCR(reportXML);
+ ObjectFactory objFactory = new ObjectFactory();
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report [" + reportID + "]: XML unmarshalled"));
+
+ return new ReportRuntime(crType, reportID, request, null, null, null, null, null, null,
+ false);
+
+ } // unmarshal
+
+ public String getXmlFileURL() {
+ return xmlFileURL;
+ }
+
+ public String getXmlFileName() {
+ return xmlFileName;
+ }
+
+ public String getFlatFileName() {
+ return flatFileName;
+ }
+
+ public String getExcelPageFileName() {
+ return excelPageFileName;
+ }
+
+ public int getReportDataSize() {
+ return reportDataSize;
+ }
+
+ public boolean getDisplayChart() {
+ return displayChart;
+ }
+
+ public boolean getDisplayForm() {
+ return displayForm;
+ }
+
+ public boolean getDisplayContent() {
+ return displayContent;
+ }
+
+ public int getCachedPageNo() {
+ return cachedPageNo;
+ }
+
+ public String getCachedSQL() {
+ return cachedSQL;
+ }
+
+ public boolean isDashboardType() throws RaptorException {
+ return ReportLoader.isDashboardType(getReportID());
+ }
+
+
+ public void setXmlFileURL(String xmlFileURL) {
+ this.xmlFileURL = xmlFileURL;
+ }
+
+ public void setXmlFileName(String xmlFileName) {
+ this.xmlFileName = xmlFileName;
+ }
+
+ public void setFlatFileName(String flatFileName) {
+ this.flatFileName = flatFileName;
+ }
+
+ public void setExcelPageFileName(String excelPageFileName) {
+ this.excelPageFileName = excelPageFileName;
+ }
+
+ /*private*/ public void setReportDataSize(int reportDataSize) {
+ this.reportDataSize = reportDataSize;
+ }
+
+ private void setDisplayForm(boolean displayForm) {
+ this.displayForm = displayForm;
+ }
+
+ private void setDisplayContent(boolean displayContent) {
+ this.displayContent = displayContent;
+ }
+
+ public void setDisplayFlags(boolean isFirstAccess, boolean forceDisplayContent) {
+ if (isFirstAccess) {
+ setDisplayForm(true);
+
+ if (forceDisplayContent)
+ setDisplayContent(true);
+ else if (Globals.getDisplayFormBeforeRun())
+ if (needFormInput())
+ setDisplayContent(false);
+ else
+ setDisplayContent(true);
+ else
+ setDisplayContent(true);
+ } else {
+ setDisplayContent(true);
+
+ if (Globals.getIncludeFormWithData())
+ setDisplayForm(true);
+ else if (Globals.getDisplayFormBeforeRun())
+ setDisplayForm(false);
+ else
+ setDisplayForm(true);
+ } // else
+ } // setDisplayFlags
+
+ public void logReportRun(String userID, String executionTime, String formFields) throws RaptorException {
+ if (reportRunLogged)
+ return;
+
+ ReportLoader.createReportLogEntry(null, reportID, userID, AppConstants.RLA_RUN,executionTime,formFields );
+ reportRunLogged = true;
+ } // logReportRun
+
+ public void logReportExecutionTime(String userId, String executionTime, String action, String formFields) throws RaptorException {
+ ReportLoader.createReportLogEntryForExecutionTime(null, reportID, userId,executionTime , action, formFields);
+ }
+
+ public void logReportExecutionTimeFromLogList (String userId, String executionTime, String formFields) throws RaptorException {
+ ReportLoader.createReportLogEntryForExecutionTime(null, reportID, userId,executionTime , AppConstants.RLA_FROM_LOG, formFields);
+ }
+
+ public void resetVisualSettings() {
+ boolean haveToResetCachedData = (visualManager.getSortByColId().length() > 0);
+ visualManager = new VisualManager();
+
+ if (haveToResetCachedData)
+ pageDataCache = null;
+
+ if (pageDataCache != null)
+ pageDataCache.resetVisualSettings();
+ } // resetVisualSettings
+
+ /** ************** ReportParamValues processing *************** */
+
+ public boolean setParamValues(HttpServletRequest request, boolean resetParams, boolean refresh) throws RaptorException {
+ boolean paramsUpdated = false;
+ if (resetParams) {
+ reportFormFields = new ReportFormFields(this, request);
+ reportParamValues = new ReportParamValues(reportFormFields, getReportDefType());
+ // This is called even in the wizard page. Hence this condition.
+ if((ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)!=null)
+ reportParamValuesFPE = new ReportParamValuesForPDFExcel(reportFormFields, getReportDefType());
+ paramsUpdated = true;
+
+ reportRunLogged = false;
+ } else if (request != null) {
+ paramsUpdated = reportParamValues.setParamValues(request,refresh);
+ }
+ // This is called even in the wizard page. Hence this condition.
+ if((ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)!=null) {
+ if(reportParamValuesFPE!=null) reportParamValuesFPE.setParamValues(request,refresh);
+ else {
+ reportParamValuesFPE = new ReportParamValuesForPDFExcel(reportFormFields, getReportDefType());
+ reportParamValuesFPE.setParamValues(request,refresh);
+ }
+ } else {
+ reportFormFields = new ReportFormFields(this, request);
+ //added below two lines for dashboard default value
+ reportParamValues = new ReportParamValues(reportFormFields, getReportDefType());
+ reportParamValues.setParamValues(request,refresh);
+ //End
+ reportParamValuesFPE = new ReportParamValuesForPDFExcel(reportFormFields, getReportDefType());
+ reportParamValuesFPE.setParamValues(request,refresh);
+
+ }
+// }
+ if (paramsUpdated) {
+ setReportDataSize(-1);
+ chartDataCache = null;
+ pageDataCache = null;
+ cachedPageNo = -1;
+
+ crossTabOrderManager = null;
+
+ colDataTotalsLinear = null;
+ colDataTotalsCrosstab = null;
+ rowDataTotalsCrosstab = null;
+ grandTotalCrosstab = null;
+ if(!refresh)
+ resetVisualSettings();
+ } // if
+
+ displayChart = (request.getParameter(AppConstants.RI_DISPLAY_CHART) == null) ? !isDisplayOptionHideChart() : request.getParameter("display_chart")
+ .equals("Y");
+
+ return paramsUpdated;
+ } // setParamValues
+
+ public String getParamValue(String key) {
+ //reportParamValues.printValues();
+ return reportParamValues.getParamValue(key);
+ } // getParamValue
+
+ public String getParamDisplayValue(String key) {
+ //reportParamValues.printValues();
+ return reportParamValues.getParamDisplayValue(key);
+ } // getParamValue
+
+ public Enumeration getParamKeys() {
+ return reportParamValues.keys();
+ } // getParamKeys
+
+ public Enumeration getParamKeysForPDFExcel() {
+ return reportParamValuesFPE.keys();
+ } // getParamKeys
+
+ public String getParamValueForPDFExcel(String key) {
+ return reportParamValuesFPE.getParamValue(key);
+ } // getParamValue
+
+ public ArrayList getParamNameValuePairs() {
+ ArrayList paramList = new ArrayList(getReportFormFields().size());
+ for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
+ FormField ff = (FormField) iter.next();
+ paramList.add(new IdNameValue(ff.getFieldDisplayName(), reportParamValues
+ .getParamDisplayValue(ff.getFieldName())));
+ } // for
+ return paramList;
+ } // getParamNameValuePairs
+
+ public ArrayList getParamNameValuePairsforPDFExcel(HttpServletRequest request, int type /*excel =1; pdf=2*/) {
+ javax.servlet.http.HttpSession session = request.getSession();
+ ArrayList paramList = new ArrayList(getReportFormFields().size());
+ if(session.getAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO)!=null) {
+ paramList = (ArrayList) session.getAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
+ if(paramList!=null && paramList.size()>0)
+ return paramList;
+ }
+ //System.out.println(" getParamNamePairs type " + type + " " + Globals.customizeFormFieldInfo());
+ if ( reportParamValuesFPE == null) {
+ reportParamValuesFPE = new ReportParamValuesForPDFExcel(reportFormFields, getReportDefType());
+ reportParamValuesFPE.setParamValues(request,true);
+ }
+
+ String valueString = "";
+ for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
+ FormField ff = (FormField) iter.next();
+ if(ff.isVisible() && /*!ff.getFieldType().equals(FormField.FFT_HIDDEN) &&*/ type == 1){
+ valueString = reportParamValuesFPE.getParamDisplayValue(ff.getFieldName());
+ } else if(ff.isVisible() && type != 1) {
+ valueString = reportParamValuesFPE.getParamDisplayValue(ff.getFieldName());
+ }
+ if(valueString.equalsIgnoreCase("NULL"))
+ valueString="";
+ paramList.add(new IdNameValue(ff.getFieldDisplayName(), valueString));
+// }
+ } // for
+
+ String pdfAttachmentKey = AppUtils.getRequestValue(request, "pdfAttachmentKey");
+ boolean isSchedule = false;
+ if(pdfAttachmentKey != null)
+ isSchedule = true;
+ if(Globals.customizeFormFieldInfo() && type == 2) {
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+
+ if(session != null && !isSchedule ) {
+ session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
+ for (int i = 0; i < sessionParameters.length; i++) {
+ if(session.getAttribute(sessionParameters[i])!=null)
+ paramList.add(new IdNameValue(sessionParameters[i].toUpperCase(), (String)session.getAttribute(sessionParameters[i])));
+ }
+ }
+
+ if(isSchedule) {
+ //debugLogger.debug("Globals " + Globals.getSessionParamsForScheduling());
+ String[] scheduleSessionParam = Globals.getSessionParamsForScheduling().split(",");
+ for (int i = 0; i < scheduleSessionParam.length; i++) {
+ //debugLogger.debug(" scheduleSessionParam[i] " + scheduleSessionParam[i] + " " + request.getParameter(scheduleSessionParam[i]) );
+ if(request.getParameter(scheduleSessionParam[i])!=null)
+ paramList.add(new IdNameValue(scheduleSessionParam[i].toUpperCase(), request.getParameter(scheduleSessionParam[i])));
+ }
+ }
+
+ try {
+ SimpleDateFormat oracleDateFormat = new SimpleDateFormat("MM/dd/yyyy kk:mm:ss");
+ Date sysdate = oracleDateFormat.parse(ReportLoader.getSystemDateTime());
+ SimpleDateFormat dtimestamp = new SimpleDateFormat(Globals.getScheduleDatePattern());
+ paramList.add(new IdNameValue("DATE", dtimestamp.format(sysdate)+" "+Globals.getTimeZone()));
+ } catch(Exception ex) {}
+
+ } else {
+ //System.out.println(" In Else getParamNamePairs type " + type);
+ String[] sessionDisplayParameters = Globals.getDisplaySessionParamInPDFEXCEL().split(",");
+ if(session != null && !isSchedule ) {
+ session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
+ for (int i = 0; i < sessionDisplayParameters.length; i++) {
+ String sessionDispParam = sessionDisplayParameters[i];
+ if(nvl(sessionDispParam).length()>0) {
+ String sessionDispParamArr[] = sessionDispParam.split(";");
+ //System.out.println("Session " + sessionDispParamArr[1] + " " + (String)session.getAttribute(sessionDispParamArr[0]));
+ paramList.add(new IdNameValue(sessionDispParamArr[1], nvl((String)session.getAttribute(sessionDispParamArr[0]),"")));
+ }
+ }
+ }
+ if(isSchedule) {
+ String[] scheduleSessionParam = Globals.getDisplayScheduleSessionParamInPDFEXCEL().split(",");
+ for (int i = 0; i < scheduleSessionParam.length; i++) {
+ String scheduleSessionDispParam = scheduleSessionParam[i];
+ if(nvl(scheduleSessionDispParam).length()>0) {
+ String scheduleSessionDispParamArr[] = scheduleSessionDispParam.split(";");
+ paramList.add(new IdNameValue(scheduleSessionDispParamArr[1], nvl(request.getParameter(scheduleSessionDispParamArr[0]),"")));
+ }
+ }
+ }
+ try {
+ SimpleDateFormat oracleDateFormat = new SimpleDateFormat("MM/dd/yyyy kk:mm:ss");
+ Date sysdate = oracleDateFormat.parse(ReportLoader.getSystemDateTime());
+ SimpleDateFormat dtimestamp = new SimpleDateFormat(Globals.getScheduleDatePattern());
+ paramList.add(new IdNameValue("Report Date/Time", dtimestamp.format(sysdate)+" "+Globals.getTimeZone()));
+ } catch(Exception ex) {}
+
+ }
+
+ for (int i = 0; i < paramList.size(); i++) {
+ IdNameValue value = (IdNameValue) paramList.get(i);
+ String name = value.getName().replaceAll(",","~");
+ value.setName(name);
+ }
+ //request.getSession().setAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO, paramList);
+ return paramList;
+ } // getParamNameValuePairs
+
+ /** ************** ReportFormFields processing *************** */
+
+ public String getFormFieldComments(HttpServletRequest request) {
+ String comment = "";
+ StringBuffer st = new StringBuffer("");
+ if(getFormFieldList()!=null){
+ comment = nvl(getFormFieldList().getComment());
+ ArrayList al = null;
+ if(comment.length()>0) {
+ al = getParamNameValuePairsforPDFExcel(request, 2);
+ if(al!=null) {
+ //st = new StringBuffer(comment);
+ for (int i=0; i < al.size(); i++) {
+ IdNameValue idNameValue = (IdNameValue)al.get(i);
+ if(nvl(idNameValue.getId()).equals("DATE"))
+ st.append("<b>Date/Time Report Run:</b>"+ idNameValue.getName() +"<br></br>");
+ }
+
+ for (int i=0; i < al.size(); i++) {
+ IdNameValue idNameValue = (IdNameValue)al.get(i);
+ comment = Utils.replaceInString(comment, "["+ idNameValue.getId()+"]", idNameValue.getName());
+ }
+ st.append(comment);
+
+ }
+ }
+ }
+ return st.toString();
+ }
+
+ public boolean needFormInput() {
+ return reportFormFields.getFieldCount() > 0;
+ } // needFormInput
+
+ public FormField getFormField(String fieldName) {
+ return reportFormFields.getFormField(fieldName);
+ } // getFormField
+
+ public ReportFormFields getReportFormFields() {
+ return reportFormFields;
+ } // getReportFormFields
+
+ /** ************** Report Data processing *************** */
+ public DataSet loadChartData(String userId, HttpServletRequest request) throws RaptorException {
+ if (nvl(getChartType()).length() == 0)
+ return null;
+ if (!getDisplayChart())
+ return null;
+
+ DataSet ds = chartDataCache;
+ String sql = null;
+ if (ds == null) {
+ sql = generateChartSQL(reportParamValues, userId, request);
+ String dbInfo = getDBInfo();
+ ds = ConnectionUtils.getDataSet(sql, dbInfo);
+ if (Globals.getCacheChartData())
+ chartDataCache = ds;
+ } // if
+
+ return ds;
+ } // loadChartData
+
+ public String getReportDataSQL(String userId, int downloadLimit, HttpServletRequest request) throws RaptorException {
+ String reportSQL = "";
+ if(doesReportContainsGroupFormField()) {
+ reportSQL = generateSubsetSQL(0, downloadLimit,userId, request, true, reportParamValues);
+ } else
+ reportSQL = generateSubsetSQL(0, downloadLimit,userId, request, false, reportParamValues);
+ return reportSQL;
+ }
+
+ public ReportData loadReportData(int pageNo, String userId, int downloadLimit, HttpServletRequest request, boolean download) throws RaptorException {
+ ReportData rd = null;
+ boolean isGoBackAction = AppUtils.getRequestFlag(request, AppConstants.RI_GO_BACK);
+ if (pageNo >= 0)
+ if (pageNo == cachedPageNo && pageDataCache != null)
+ rd = pageDataCache;
+
+ if(isGoBackAction && rd!=null) return rd;
+ if (rd == null) { // Commented So that Data is refreshed from DB again
+ if (getReportDataSize() < 0)
+ if (getReportType().equals(AppConstants.RT_CROSSTAB))
+ rd = loadCrossTabReportData(pageNo, userId, downloadLimit, request, download);
+ else if (getReportType().equals(AppConstants.RT_LINEAR))
+ rd = loadLinearReportData(pageNo, userId, downloadLimit, request, download);
+ else
+ throw new RuntimeException(
+ "[ReportRuntime.loadReportData] Invalid report type");
+
+ if (pageNo >= 0)
+ if (Globals.getCacheCurPageData()) {
+ pageDataCache = rd;
+ cachedPageNo = pageNo;
+ }
+ } // if // Commented So that Data is refreshed from DB again
+
+ return rd;
+ } // loadReportData
+
+ private ReportData loadCrossTabReportData(int pageNo, String userId, int downloadLimit, HttpServletRequest request, boolean download) throws RaptorException {
+ String reportSQL = generateSQL(reportParamValues, userId, request);
+ setWholeSQL(reportSQL);
+ cachedSQL = reportSQL;
+ wholeSQL = reportSQL;
+ List reportCols = getAllColumns();
+ // replace the request parameter specified in the drill down
+ DataColumnType dataColumnRequest = getCrossTabValueColumn();
+ reportSQL = parseReportSQLForDrillDownParams(reportSQL, dataColumnRequest, request);
+
+
+ DataSet ds = null;
+ // try {
+ String dbInfo = getDBInfo();
+ StringBuffer colNames = new StringBuffer();
+ StringBuffer colExtraIdNames = new StringBuffer();
+ StringBuffer colExtraDateNames = new StringBuffer();
+
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ //TODO: commented if (dc.isVisible()) {
+ if (colNames.length() > 0)
+ colNames.append(", ");
+ colNames.append(dc.getColId());
+ //TODO uncomment if it's not working} // if
+
+ // Checking for extra fields necessary for drill-down
+ if (nvl(dc.getDrillDownURL()).length() > 0) {
+ System.out.println("Drilldown URL " + dc.getDrillDownURL());
+
+ }
+ } // for
+
+ if (reportSQL.toUpperCase().indexOf("GROUP BY ") < 0)
+ colNames.append(colExtraIdNames.toString());
+ colNames.append(colExtraDateNames.toString());
+ //reportSQL = " SELECT ROWNUM rnum, "
+ // + colNames.toString() + " FROM (" + reportSQL + ") ";
+
+ String rSQL = Globals.getLoadCrosstabReportData();
+ rSQL = rSQL.replace("[colNames.toString()]", colNames.toString());
+ rSQL = rSQL.replace("[reportSQL]", reportSQL);
+ reportSQL = rSQL;
+ setWholeSQL(reportSQL);
+ if (crossTabOrderManager == null)
+ crossTabOrderManager = new CrossTabOrderManager(this, userId,request);
+ ds = ConnectionUtils.getDataSet(reportSQL, dbInfo);
+
+ ReportData rd = new ReportData(pageNo, false);
+ ReportFormFields childReportFormFields = null;
+ if(doesReportContainsGroupFormField()) {
+ List reportCols1 = getAllColumns();
+ reportCols = new Vector();
+ outer:
+ for (Iterator iter = reportCols1.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ for (int k=0; k<ds.getColumnCount(); k++) {
+ if(dct.getColId().toUpperCase().trim().equals(ds.getColumnName(k).trim())) {
+ reportCols.add(dct);
+ continue outer;
+ }
+ }
+ }
+
+ if (getFormFieldList() != null) {
+ String paramValue = "";
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ if(fft.isGroupFormField()!=null && fft.isGroupFormField().booleanValue()) {
+ paramValue = Utils.oracleSafe(nvl(reportParamValues
+ .getParamValue(fft.getFieldId())));
+ outer:
+ for (Iterator iter1 = reportCols1.iterator(); iter1.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter1.next();
+ if(("["+fft.getFieldName()+ "]").equals(dct.getColName().trim())) {
+ dct.setDisplayName(paramValue);
+ continue outer;
+ }
+ }
+
+
+ }
+ }
+ }
+ }
+
+ int dataColumnIdx = (rd.reportRowHeaderCols.size() + rd.reportColumnHeaderRows.size())-1;
+ DataColumnType dataColumn = getCrossTabValueColumn();
+
+ String columnValue = "";
+
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (nvl(dct.getDrillDownURL()).length() > 0) {
+ childReportFormFields = getChildReportFormFields(request,dct.getDrillDownURL());
+ }
+
+ if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_ROW)) {
+ RowHeaderCol rhc = new RowHeaderCol();
+ rhc.setColumnTitle(dct.getDisplayName());
+ // rhc.setColumnWidth("10%");
+ //rhc.setColumnWidth(dct.getDisplayWidth() + "%");
+ if(nvl(dct.getDisplayWidthInPxls()).length()<=0) {
+ dct.setDisplayWidthInPxls("100px");
+ }
+ if(dct.getDisplayWidthInPxls().endsWith("px"))
+ rhc.setColumnWidth(dct.getDisplayWidthInPxls());
+ else
+ rhc.setColumnWidth(dct.getDisplayWidthInPxls()+"px");
+
+ rhc.setAlignment(dct.getDisplayAlignment());
+ rhc.setDisplayHeaderAlignment(dct.getDisplayHeaderAlignment());
+ rhc.setNowrap(nvl(dataColumn.getNowrap(),"null").equals("false")?"null":nvl(dataColumn.getNowrap(),"null"));
+ rd.reportRowHeaderCols.addRowHeaderCol(rhc);
+ } else if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_COLUMN)) {
+ ColumnHeaderRow chr = new ColumnHeaderRow();
+ chr.setAlignment(dct.getDisplayHeaderAlignment());
+ chr.setRowHeight("15");
+ if(nvl(dct.getDisplayWidthInPxls()).length()<=0) {
+ dct.setDisplayWidthInPxls("80px");
+ }
+ if(dct.getDisplayWidthInPxls().endsWith("px"))
+ chr.setDisplayWidth(dct.getDisplayWidthInPxls());
+ else
+ chr.setDisplayWidth(dct.getDisplayWidthInPxls()+"px");
+
+ rd.reportColumnHeaderRows.addColumnHeaderRow(chr);
+ } else if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_VALUE)) {
+ columnValue = dct.getColId();
+ } else {
+ if(!dct.getColId().toLowerCase().endsWith("_sort")) {
+ RowHeaderCol rhc = new RowHeaderCol();
+ rhc.setVisible(false);
+ rd.reportRowHeaderCols.addRowHeaderCol(rhc);
+ }
+ }
+ } // for
+
+ //int dataColumnIdx = getCrossTabValueColumnIndex();
+ FormatProcessor formatProcessor = new FormatProcessor(getSemaphoreById(dataColumn
+ .getSemaphoreId()),
+ getReportDefType().equals(AppConstants.RD_SQL_BASED) ? AppConstants.CT_NUMBER
+ : dataColumn.getColType(), dataColumn.getColFormat(), false);
+ List dataList = new ArrayList();
+ /* //fillup all rows based on rowheaders
+ Vector rowHeaders = crossTabOrderManager.getRowHeaderValues();
+ CrossTabColumnValues crossTabRowValues;
+ int size = 0;
+ for (int i = 0; i < rowHeaders.size(); i++) {
+ if((i+1)==rowHeaders.size()) {
+ crossTabRowValues = (CrossTabColumnValues) rowHeaders.get(i);
+ size = crossTabRowValues.getValuesCount();
+ }
+ }
+
+ for (int i = 0; i < size; i++) {
+ dataList.add(new DataRow());
+ }*/
+
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ Vector rValues = new Vector();
+ Vector cValues = new Vector();
+ Vector cValuesSort = new Vector();
+
+ int colIdx = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ try {
+ DataColumnType dct = (DataColumnType) iter.next();
+ if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_ROW))
+ rValues.add(addDataValue(dct, ds.getString(i, dct.getColId())));
+ if (nvl(dct.getCrossTabValue()).trim().length()<=0 && !dct.getColId().toLowerCase().endsWith("_sort"))
+ rValues.add(addDataValue(dct, ds.getString(i, dct.getColId())));
+ if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_COLUMN)) {
+ cValues.add(addDataValue(dct, ds.getString(i, dct.getColId())));
+ if(getColumnById(dct.getColId().toLowerCase()+"_sort")!=null)
+ cValuesSort.add(addDataValue(dct, new Integer(ds.getString(i, dct.getColId()+"_sort")).toString()));
+ }
+ if (dct.isVisible())
+ colIdx++;
+ } catch (ArrayIndexOutOfBoundsException ex ) {continue;}
+ catch (NumberFormatException ex1) {
+ ex1.printStackTrace();
+ continue;
+ }
+ } // for
+
+ DataValue dv = new DataValue();
+ dv.setDisplayValue(ds.getString(i, columnValue));
+ if (nvl(dataColumn.getCrossTabValue()).trim().length()<=0)
+ dv.setVisible(false);
+ dv.setAlignment(dataColumn.getDisplayAlignment());
+ dv.setDisplayTotal(dataColumn.getDisplayTotal());
+ dv.setColName(dataColumn.getColName());
+ dv.setDisplayName(dataColumn.getDisplayName());
+ dv.setColId(dataColumn.getColId());
+ dv.setNowrap(nvl(dataColumn.getNowrap(),"null").equals("false")?"null":nvl(dataColumn.getNowrap(),"null"));
+ /*StringBuffer indentation = new StringBuffer("");
+ if(dataColumn.getIndentation()!=null && dataColumn.getIndentation().intValue()>0) {
+ for (int indent=0; indent < dataColumn.getIndentation(); indent++) {
+ indentation.append("\t");
+ }
+ dv.setNowrap("true");
+ }
+ dv.setIndentation(indentation.toString());*/
+
+ if (nvl(dataColumn.getDrillDownURL()).length() > 0) {
+ if(dv.getDisplayValue().length() > 0) {
+ dv.setDrillDownURL(parseDrillDownURL(i, /* dataColumnIdx, */ds, dataColumn,request, childReportFormFields));
+ dv.setDrillDowninPoPUp(dataColumn.isDrillinPoPUp()!=null?dataColumn.isDrillinPoPUp():false);
+ }
+ if (dv.getDisplayValue().length() == 0) {
+ //dv.setDisplayValue("[NULL]");
+ dv.setDisplayValue("");
+ }
+ } // if
+
+ rd.setDataValue(rValues, cValues, cValuesSort.size()==0?null:cValuesSort, dv, formatProcessor, crossTabOrderManager, dataList);
+ } // for
+ rd.setReportDataList(dataList);
+ /*if (getReportDataSize() < 0)
+ setReportDataSize(rd.getDataRowCount());*/
+
+ /*if (pageNo >= 0)
+ rd.truncateData(pageNo * getPageSize(), (pageNo + 1) * getPageSize() - 1);
+ else {
+ if( downloadLimit != -1)
+ rd.truncateData(0, downloadLimit - 1);
+ else
+ rd.truncateData(0, -1);
+ }*/
+
+ if (colDataTotalsCrosstab == null)
+ colDataTotalsCrosstab = generateDataTotalsCrossTab(AppConstants.CV_COLUMN, userId,request);
+ if (displayColTotals && colDataTotalsCrosstab != null)
+ rd.setColumnDataTotalsCrossTab(colDataTotalsCrosstab, dataColumn
+ .getDisplayAlignment(), getCrossTabDisplayTotal(AppConstants.CV_COLUMN),
+ crossTabOrderManager, dataList);
+
+ if (rowDataTotalsCrosstab == null)
+ rowDataTotalsCrosstab = generateDataTotalsCrossTab(AppConstants.CV_ROW, userId, request);
+ if (displayRowTotals && rowDataTotalsCrosstab != null)
+ rd.setRowDataTotalsCrossTab(rowDataTotalsCrosstab, dataColumn
+ .getDisplayAlignment(), getCrossTabDisplayTotal(AppConstants.CV_ROW),
+ crossTabOrderManager, dataList);
+
+ if (displayColTotals
+ && displayRowTotals
+ && getCrossTabDisplayTotal(AppConstants.CV_COLUMN).equals(
+ getCrossTabDisplayTotal(AppConstants.CV_ROW))) {
+ // Display grand total
+ if (grandTotalCrosstab == null)
+ grandTotalCrosstab = ((CrossTabTotalValue) generateDataTotalsCrossTab("",
+ userId,request).get(0)).getTotalValue();
+ if (grandTotalCrosstab != null)
+ rd.setGrandTotalCrossTab(Utils.truncateTotalDecimals(grandTotalCrosstab),
+ dataColumn.getDisplayAlignment(),
+ getCrossTabDisplayTotal(AppConstants.CV_COLUMN), dataList);
+ } // if
+
+ rd.consolidateColumnHeaders(visualManager);
+ //if (Globals.getMergeCrosstabRowHeadings())
+ // rd.consolidateRowHeaders();
+ //rd.addRowNumbers(pageNo, dataList);
+
+ if (displayColTotals && colDataTotalsCrosstab != null) {
+ String totalLabel = "Total";
+ String colDisplayTotal = getCrossTabDisplayTotal(AppConstants.CV_COLUMN);
+ if (colDisplayTotal.length() > 0
+ && (!colDisplayTotal.equals(AppConstants.TOTAL_SUM_ID)))
+ totalLabel = nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(colDisplayTotal));
+ if (getReportDataSize() > getPageSize())
+ totalLabel += "_nl_(for all pages)";
+
+ //rd.setCrossTabColumnTotalLabel(totalLabel);
+ } // if
+
+ //rd.applyVisibility();
+ //Collections.sort((List)dataList, new DataRowComparable());
+ DataRow drInFor1 = null;
+ Vector<DataValue> v1= null, v2 = null;
+ ArrayList<String> temp = new ArrayList<String>();
+ if (Globals.getMergeCrosstabRowHeadings()) {
+ for (int i = 0; i < dataList.size(); i++) {
+ drInFor1 = (DataRow)dataList.get(i);
+ drInFor1.setRowNum(i+1);
+ v1 = drInFor1.getRowValues();
+ if(i<dataList.size()-1) {
+ v2 = ((DataRow)dataList.get(i+1)).getRowValues();
+ } /*else {
+ v2 = ((DataRow)dataList.get(i-1)).getRowValues();
+ }*/
+ for (int j = 0; j < v1.size(); j++) {
+ if(j==0) {
+ if(v1.get(j).getDisplayValue().length()>0) { // another ArrayList
+ temp = new ArrayList();
+ temp.add(v1.get(j).getDisplayValue());
+ }
+ if(v2!=null && temp.get(j).equals(v2.get(j).getDisplayValue())) {
+ v2.get(j).setDisplayValue("");
+ }
+ }
+ }
+ }
+ }
+ rd.setReportDataList(dataList);
+ if (getReportDataSize() < 0) {
+ //setReportDataSize(rd.getDataRowCount());
+ setReportDataSize(rd.getReportDataList().size());
+ }
+
+ return rd;
+ } // loadCrossTabReportData
+
+
+ public DataValue addDataValue(DataColumnType dataColumn, String columnValue) {
+ DataValue dv = new DataValue();
+ dv.setDisplayValue(columnValue);
+ if (nvl(dataColumn.getCrossTabValue()).trim().length()<=0)
+ dv.setVisible(false);
+ dv.setAlignment(dataColumn.getDisplayAlignment());
+ dv.setDisplayTotal(dataColumn.getDisplayTotal());
+ dv.setColName(dataColumn.getColName());
+ dv.setDisplayName(dataColumn.getDisplayName());
+ dv.setColId(dataColumn.getColId());
+ dv.setNowrap(nvl(dataColumn.getNowrap(),"null").equals("false")?"null":nvl(dataColumn.getNowrap(),"null"));
+ return dv;
+
+ }
+
+ /*private*/ public boolean doesReportContainsGroupFormField() {
+ int flag = 0;
+ if(getFormFieldList()!=null) {
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ if(fft.isGroupFormField()!=null && fft.isGroupFormField().booleanValue()) {
+ flag = 1;
+ break;
+ }
+ }
+ }
+ return (flag ==1);
+ }
+
+ private ReportData loadLinearReportData(int pageNo, String userId, int downloadLimit, HttpServletRequest request, boolean download) throws RaptorException {
+ String action = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));;
+
+ String reportSQL = "";
+
+ if(action.endsWith("session")) {
+ reportSQL = getWholeSQL();
+ wholeSQL = reportSQL;
+ } else {
+ reportSQL = generateSQL(reportParamValues, visualManager.getSortByColId(),
+ visualManager.getSortByAscDesc(), userId, request);
+ wholeSQL = reportSQL;
+ setWholeSQL(wholeSQL);
+ }
+ DataSet ds = null;
+ String dbInfo = getDBInfo();
+ ds = ConnectionUtils.getDataSet(wholeSQL, dbInfo);
+ setReportDataSize(ds.getRowCount());
+ //wholeSQL = reportSQL;
+ HttpSession session = request.getSession();
+ //debugLogger.debug(" ******** Download Limit ********* " + downloadLimit + " %%%%%%%%%%PAGE " + pageNo );
+ List reportCols = null;
+ StringBuffer colNames = new StringBuffer();
+
+ if(download && action.endsWith("session")) {
+ reportCols = getAllColumns();
+ colNames = new StringBuffer();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (colNames.length() > 0)
+ colNames.append(", ");
+ colNames.append(dc.getColId());
+ }
+
+ }
+ else {
+ String pagedSQL = null; // reportSQL;
+ if (pageNo >= 0)
+ pagedSQL = generatePagedSQL(pageNo, userId, request, false, null);
+ else
+ pagedSQL = generateSubsetSQL(0, downloadLimit, userId, request, false, null);
+ // replace the request parameter specified in the drill down
+ reportCols = getAllColumns();
+ colNames = new StringBuffer();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (colNames.length() > 0)
+ colNames.append(", ");
+ colNames.append(dc.getColId());
+ if (dc.isVisible()) {
+ reportSQL = parseReportSQLForDrillDownParams(reportSQL, dc, request);
+ pagedSQL = parseReportSQLForDrillDownParams(pagedSQL, dc, request);
+ }
+ }
+
+ cachedSQL = pagedSQL;
+
+
+ // try {
+ if(doesReportContainsGroupFormField()) {
+ if (pageNo >= 0)
+ pagedSQL = generatePagedSQL(pageNo, userId, request, true, reportParamValues);
+ else
+ pagedSQL = generateSubsetSQL(0, downloadLimit, userId, request, true, reportParamValues);
+ }
+ //check for Group formfield
+ //if groupformfield get columns from sql
+
+ ds = ConnectionUtils.getDataSet(pagedSQL, dbInfo);
+
+ if(doesReportContainsGroupFormField()) {
+ List reportCols1 = getAllColumns();
+ reportCols = new Vector();
+ outer:
+ for (Iterator iter = reportCols1.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ for (int k=0; k<ds.getColumnCount(); k++) {
+ if(dct.getColId().toUpperCase().trim().equals(ds.getColumnName(k).trim())) {
+ reportCols.add(dct);
+ continue outer;
+ }
+ }
+ }
+
+ if (getFormFieldList() != null) {
+ String paramValue = "";
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ if(fft.isGroupFormField()!=null && fft.isGroupFormField().booleanValue()) {
+ paramValue = Utils.oracleSafe(nvl(reportParamValues
+ .getParamValue(fft.getFieldId())));
+ outer:
+ for (Iterator iter1 = reportCols1.iterator(); iter1.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter1.next();
+ if(("["+fft.getFieldName()+ "]").equals(dct.getColName().trim())) {
+ dct.setDisplayName(paramValue);
+ continue outer;
+ }
+ }
+
+
+ }
+ }
+ }
+ }
+
+
+ // if ( (remDbInfo!=null) && (!remDbInfo.equals(AppConstants.DB_LOCAL)))
+ // {
+ // Globals.getRDbUtils().setDBPrefix(remDbInfo);
+ // ds = RemDbUtils.executeQuery(pagedSQL);
+ // }
+ // else
+ // ds = DbUtils.executeQuery(pagedSQL);
+ /*
+ * } catch(SQLException e) { throw new
+ * ReportSQLException("[ReportRuntime.loadLinearReportData]
+ * "+e.getMessage(), pagedSQL); }
+ */
+
+ if (getReportDataSize() < 0)
+ if (pageNo < 0)
+ setReportDataSize(ds.getRowCount());
+ else if (ds.getRowCount() <= getPageSize())
+ setReportDataSize(ds.getRowCount());
+ else {
+
+ /*Pattern re1 = Pattern.compile("[Oo][Rr][Dd][Ee][Rr](.*?[^\r\n]*)[Bb][Yy]", Pattern.DOTALL);
+ Pattern re2 = Pattern.compile("[Oo][Rr][Dd][Ee][Rr](.*?[^\r\n]*)[Bb][Yy]((.*?[^\r\n]*)|[\\s]|[^0-9a-zA-Z])\\)", Pattern.DOTALL);
+ Matcher matcher = re1.matcher(reportSQL);
+ Matcher matcher2 = null;
+ int startPoint = reportSQL.length()-30;
+ String startReportSQL = "";
+ String endReportSQL = "";
+ while(reportSQL.indexOf("xid", startPoint)!=-1)startPoint++;
+ if (matcher.find(startPoint)) {
+ startReportSQL = reportSQL.substring(0, reportSQL.indexOf(matcher.group()));
+ endReportSQL = reportSQL.substring(reportSQL.indexOf(matcher.group()));
+ matcher2 = re2.matcher(endReportSQL);
+ if(matcher2.find())
+ endReportSQL = endReportSQL.substring(matcher.group().length()-1);
+ else
+ endReportSQL = "";
+ reportSQL = startReportSQL + endReportSQL;
+ }*/
+ String countSQL = "SELECT count(*) FROM (" + reportSQL + ")"+ (Globals.isPostgreSQL() || Globals.isMySQL()?" AS ":"") +" x ";
+ String dbType = "";
+
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ dbType = remDbInfo.getDBType(dbInfo);
+ if (dbType.equals("DAYTONA") && reportSQL.trim().toUpperCase().startsWith("SELECT")) {
+ Pattern re1 = Pattern.compile("order(.*?[^\r\n]*)by", Pattern.DOTALL);
+ Matcher matcher = re1.matcher(reportSQL);
+ int startPoint = reportSQL.length()-30;
+ while(reportSQL.indexOf("xid", startPoint)!=-1)startPoint++;
+ if (matcher.find(startPoint)) {
+ reportSQL = reportSQL.substring(0, reportSQL.indexOf(matcher.group()));
+ }
+ countSQL = "SELECT count(*) FROM (" + reportSQL + ")"+ (Globals.isPostgreSQL() || Globals.isMySQL()?" AS ":"") +" x";
+ countSQL = countSQL + " ("+ colNames+ ")";
+ } else if (dbType.equals("DAYTONA")) {
+ setReportDataSize(50);
+ }
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+
+ DataSet ds2 = null;
+ // try {
+ if(reportSQL.trim().toUpperCase().startsWith("SELECT")) {
+ ds2 = ConnectionUtils.getDataSet(countSQL, dbInfo);
+ if (ds2.getRowCount() > 0)
+ setReportDataSize(ds2.getInt(0, 0));
+ else
+ throw new RuntimeException(
+ "[ReportRuntime.loadLinearReportData] Unable to load report data size");
+ } else
+ setReportDataSize(50);
+ // if ( (remDbInfo!=null) &&
+ // (!remDbInfo.equals(AppConstants.DB_LOCAL))){
+ // Globals.getRDbUtils().setDBPrefix(remDbInfo);
+ // ds2 = RemDbUtils.executeQuery(countSQL);
+ // }
+ // else
+ // ds2 = DbUtils.executeQuery(countSQL);
+ /*
+ * } catch(SQLException e) { throw new
+ * ReportSQLException("[ReportRuntime.loadLinearReportData size]
+ * "+e.getMessage(), countSQL); }
+ */
+
+
+ } // else
+ }
+ ReportData rd = new ReportData(pageNo, true);
+
+ // Already defined changed for modifying request parameters
+ //List reportCols = getAllColumns();
+ Vector visibleCols = new Vector(reportCols.size());
+ Vector formatProcessors = new Vector(reportCols.size());
+
+ // ColumnHeaderRow chr = new ColumnHeaderRow();
+ // rd.reportColumnHeaderRows.addColumnHeaderRow(chr);
+ // chr.setRowHeight("30");
+ int count =0 ;
+
+ /* ADDED */
+ ReportFormFields rff = getReportFormFields();
+ ReportFormFields childReportFormFields = null;
+ String fieldDisplayName = "";
+ String fieldValue = "";
+
+ for (int c = 0; c < reportCols.size(); c++) {
+ if(reportCols.get(c)!=null) {
+ DataColumnType dct = (DataColumnType) reportCols.get(c);
+ if(nvl(dct.getDependsOnFormField()).length()>0 && nvl(dct.getDependsOnFormField()).indexOf("[")!=-1) {
+ for(int i = 0 ; i < rff.size(); i++) {
+ fieldDisplayName = "["+((FormField)rff.getFormField(i)).getFieldDisplayName()+"]";
+ fieldValue = "";
+ //if(dct.getOriginalDisplayName()==null) dct.setOriginalDisplayName(dct.getDisplayName());
+ if (dct.getDependsOnFormField().equals(fieldDisplayName)) {
+ fieldValue = nvl(request.getParameter(((FormField)rff.getFormField(i)).getFieldName()));
+
+ if (fieldValue.length()>0) {
+ if(!fieldValue.toUpperCase().equals("Y"))
+ dct.setDisplayName(fieldValue);
+ if(!dct.isVisible())
+ dct.setVisible(true);
+ } else {
+ dct.setVisible(false);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* ADDED */
+ String displayName = "";
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+
+ formatProcessors.add(count,new FormatProcessor(
+ getSemaphoreById(dc.getSemaphoreId()), dc.getColType(), dc
+ .getColFormat(), getReportDefType().equals(
+ AppConstants.RD_SQL_BASED)));
+
+ if (nvl(dc.getDrillDownURL()).length() > 0) {
+ childReportFormFields = getChildReportFormFields(request,AppUtils.getDrillActionURL()+""+dc.getDrillDownURL());
+ }
+ if (dc.isVisible()) {
+ visibleCols.add(count,dc);
+ //if(dc.getColId().startsWith("group")) {
+ for (int d = 0; d < reportCols.size(); d++) {
+ if(reportCols.get(d)!=null) {
+ DataColumnType dct1 = (DataColumnType) reportCols.get(d);
+ if(dct1.getColId().equals(dc.getColId()+"_name") && ds.getRowCount()>0) {
+ displayName = ds.getString(0,dct1.getColId());
+ dc.setDisplayName(displayName);
+ }
+ }
+ }
+ //}
+
+ String widthInPxls = dc.getDisplayWidthInPxls();
+
+ if(nvl(widthInPxls).endsWith("px"))
+ dc.setDisplayWidthInPxls(widthInPxls);
+ else {
+ widthInPxls = widthInPxls+"px";
+ dc.setDisplayWidthInPxls(widthInPxls+"px");
+ }
+
+ rd.createColumn(dc.getColId(), dc.getDisplayName(), dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(),
+ visualManager.isColumnVisible(dc.getColId()), visualManager
+ .getSortByColId().equals(dc.getColId()) ? visualManager
+ .getSortByAscDesc() : null, isRuntimeColSortDisabled(), dc.getLevel()!=null?dc.getLevel():0, dc.getStart()!=null?dc.getStart():0, dc.getColspan()!=null?dc.getColspan():0, dc.isIsSortable()!=null?dc.isIsSortable():false);
+ // chr.addColumnHeader(new ColumnHeader(dc.getDisplayName(),
+ // (dc.getDisplayWidth()>100)?"10%":(""+dc.getDisplayWidth()+"%")));
+ } // if
+ else {
+ visibleCols.add(count,null);
+ rd.createColumn(dc.getColId(), AppConstants.HIDDEN, dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(),
+ true, null,false, dc.getLevel()!=null?dc.getLevel():0, dc.getStart()!=null?dc.getStart():0, dc.getColspan()!=null?dc.getColspan():0, dc.isIsSortable()!=null?dc.isIsSortable():false);
+// formatProcessors.add(count,null);
+ }
+ count++;
+ } // for
+
+ if(getReportDefType().equals(AppConstants.RD_SQL_BASED_DATAMIN) && pageNo ==0) {
+ /*Vector v = null;
+ try {
+ v = addForecastData(reportSQL);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ throw new RaptorException (ex);
+ }
+ session.setAttribute("FORECASTED_DATA", v);
+ DataSet dsWhole = ConnectionUtils.getDataSet(wholeSQL, dbInfo);
+ dsWhole.addAll(v);
+ session.setAttribute(AppConstants.RI_CHART_FORECAST_DATA, dsWhole);
+ }
+
+ if(getReportDefType().equals(AppConstants.RD_SQL_BASED_DATAMIN) && session.getAttribute("FORECASTED_DATA")!=null) {
+ Vector vForecastedData = (Vector)session.getAttribute("FORECASTED_DATA");
+ if(vForecastedData.size() > 0)
+ ds.addAll(vForecastedData);*/
+ }
+
+
+ // Utils._assert(chr.size()==ds.getColumnCount(),
+ // "[ReportRuntime.loadLinearReportData] The number of visible columns
+ // does not match the number of data columns");
+ //TODO: This should be optimized to accept -1 for flat file download
+ for (int r = 0; r < Math.min(ds.getRowCount(), ((pageNo < 0) ? (downloadLimit == -1?Globals.getFlatFileUpperLimit():Globals.getDownloadLimit() ) : getPageSize())); r++) {
+ DataRow dr = new DataRow();
+ rd.reportDataRows.addDataRow(dr);
+
+ for (int c = 0; c < reportCols.size(); c++) {
+ if(reportCols.get(c)!=null) {
+ DataColumnType dct = (DataColumnType) reportCols.get(c);
+ DataValue dv = new DataValue();
+ dr.addDataValue(dv);
+ dv.setDisplayValue(ds.getString(r, c));
+ dv.setColName(dct.getColName());
+ dv.setColId(dct.getColId());
+ dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+ StringBuffer indentation = new StringBuffer("");
+ if(dct.getIndentation()!=null && dct.getIndentation()>0) {
+ for (int indent=0; indent< dct.getIndentation(); indent++) {
+ indentation.append("\t");
+ }
+ dv.setNowrap("true");
+ }
+ dv.setIndentation(indentation.toString());
+ if(dct.isVisible()) {
+
+ dv.setVisible(true);
+ dv.setAlignment(dct.getDisplayAlignment());
+ dv.setDisplayTotal(dct.getDisplayTotal());
+ dv.setDisplayName(dct.getDisplayName());
+
+ if (nvl(dct.getDrillDownURL()).length() > 0) {
+
+ if(dv.getDisplayValue().length() > 0) {
+ dv.setDrillDownURL(parseDrillDownURL(r, /* c, */ds, dct,request, childReportFormFields));
+ dv.setDrillDowninPoPUp(dct.isDrillinPoPUp()!=null?dct.isDrillinPoPUp():false);
+ }
+
+ if (dv.getDisplayValue().length() == 0) {
+ //dv.setDisplayValue("[NULL]");
+ dv.setDisplayValue("");
+ }
+ } // if
+
+ } else {
+ dv.setVisible(false);
+ dv.setHidden(true);
+ }
+ //System.out.println("in Linear report b4" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
+
+ if(dr.getFormatId()!=null)
+ ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, true);
+ else
+ ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, false);
+
+ //System.out.println("in Linear report After" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
+ } // if reportCols
+ } // for
+ } // for
+
+ //Only if rownumber options is needed
+ //rd.addRowNumbers(pageNo, getPageSize());
+
+ if (colDataTotalsLinear == null) {
+ if(!download && !action.endsWith("session"))
+ colDataTotalsLinear = generateColumnDataTotalsLinear(new ArrayList(reportCols), userId,
+ getDbInfo(),request);
+ if(download && action.endsWith("session"))
+ colDataTotalsLinear = generateColumnDataTotalsLinear(new ArrayList(reportCols), userId,
+ getDbInfo(), getTotalSql());
+ }
+ if (displayColTotals && colDataTotalsLinear != null) {
+ String totalLabel = "Total";
+ if (getReportDataSize() > getPageSize())
+ totalLabel += "<br><font size=1>(for all pages)</font>";
+
+ rd.setColumnDataTotalsLinear(colDataTotalsLinear, totalLabel);
+ } // if
+ // Please note the below function doesn't set the visibility for dv since this is set in this function. - Sundar
+ rd.applyVisibility();
+
+ return rd;
+ } // loadLinearReportData
+
+
+
+ public DataRow generateColumnDataTotalsLinear(ArrayList reportCols, String userId,
+ String dbInfo, String reportSQL) throws RaptorException {
+ DataRow dr = null;
+
+ boolean displayColTotals = false;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dct = (DataColumnType) iter.next();
+ if( dct != null ) {
+ if (nvl(dct.getDisplayTotal()).length() > 0) {
+ displayColTotals = true;
+ break;
+ } // if
+ } // if checking dct
+ } // for
+
+ DataSet ds = null;
+ if (displayColTotals) {
+ dr = new DataRow();
+ // ds =
+ // DbUtils.executeQuery(generateTotalSQLLinear(reportParamValues,
+ // userId));
+ ds = ConnectionUtils.getDataSet(reportSQL,
+ dbInfo);
+
+ for (int c = 0; c < reportCols.size(); c++) {
+ DataColumnType dct = (DataColumnType) reportCols.get(c);
+ if ( dct != null ) {
+ DataValue dv = new DataValue();
+
+ String totalValue = "";
+ if (ds != null)
+ totalValue = ds.getString(0, c);
+ if (nvl(dct.getDisplayTotal()).length() > 0
+ && (!dct.getDisplayTotal().equals(AppConstants.TOTAL_SUM_ID)))
+ totalValue = nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(dct
+ .getDisplayTotal()))
+ + ": " + totalValue;
+ dv.setDisplayValue(Utils.truncateTotalDecimals(totalValue));
+
+ dv.setAlignment(dct.getDisplayAlignment());
+ dv.setColName(dct.getColName());
+ dv.setDisplayName(dct.getDisplayName());
+ dv.setColId(dct.getColId());
+ dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+ StringBuffer indentation = new StringBuffer("");
+ if(dct.getIndentation()!=null && dct.getIndentation()>0) {
+ for (int indent=0; indent< dct.getIndentation(); indent++) {
+ indentation.append("\t");
+ }
+ dv.setNowrap("true");
+ }
+ dv.setIndentation(indentation.toString());
+ dv.setDisplayTotal(dct.getDisplayTotal());
+ dv.setBold(true);
+ dv.setVisible(dct.isVisible());
+ if(dv.isVisible())
+ dr.addDataValue(dv);
+ } // dct check
+ } // for
+ }
+
+ return dr;
+ } // generateColumnDataTotalsLinear
+
+
+ public ReportData loadHiveLinearReportData(String reportSQL, String userId, int downloadLimit, HttpServletRequest request) throws RaptorException {
+ wholeSQL = reportSQL;
+ int countRows = getHiveReportCount(wholeSQL);
+ setReportDataSize(countRows);
+ if(countRows < 1001)
+ wholeSQL += " limit "+ countRows;
+ else
+ wholeSQL += " limit "+ downloadLimit;
+ HttpSession session = request.getSession();
+
+ DataSet ds = null;
+ // try {
+ String dbInfo = getDBInfo();
+
+ List reportCols = getAllColumns();
+ StringBuffer colNames = new StringBuffer();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (colNames.length() > 0)
+ colNames.append(", ");
+ colNames.append(dc.getColId());
+ }
+
+ ds = ConnectionUtils.getDataSet(wholeSQL, dbInfo);
+
+ ReportData rd = new ReportData(0, true);
+
+ // Already defined changed for modifying request parameters
+ //List reportCols = getAllColumns();
+ Vector visibleCols = new Vector(reportCols.size());
+ Vector formatProcessors = new Vector(reportCols.size());
+
+ // ColumnHeaderRow chr = new ColumnHeaderRow();
+ // rd.reportColumnHeaderRows.addColumnHeaderRow(chr);
+ // chr.setRowHeight("30");
+ int count =0 ;
+
+ /* ADDED */
+ ReportFormFields rff = getReportFormFields();
+ ReportFormFields childReportFormFields = null;
+ String fieldDisplayName = "";
+ String fieldValue = "";
+
+ for (int c = 0; c < reportCols.size(); c++) {
+ if(reportCols.get(c)!=null) {
+ DataColumnType dct = (DataColumnType) reportCols.get(c);
+ if(nvl(dct.getDependsOnFormField()).length()>0 && nvl(dct.getDependsOnFormField()).indexOf("[")!=-1) {
+ for(int i = 0 ; i < rff.size(); i++) {
+ fieldDisplayName = "["+((FormField)rff.getFormField(i)).getFieldDisplayName()+"]";
+ fieldValue = "";
+ //if(dct.getOriginalDisplayName()==null) dct.setOriginalDisplayName(dct.getDisplayName());
+ if (dct.getDependsOnFormField().equals(fieldDisplayName)) {
+ fieldValue = nvl(request.getParameter(((FormField)rff.getFormField(i)).getFieldName()));
+
+ if (fieldValue.length()>0) {
+ if(!fieldValue.toUpperCase().equals("Y"))
+ dct.setDisplayName(fieldValue);
+ if(!dct.isVisible())
+ dct.setVisible(true);
+ } else {
+ dct.setVisible(false);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* ADDED */
+ String displayName = "";
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+
+ formatProcessors.add(count,new FormatProcessor(
+ getSemaphoreById(dc.getSemaphoreId()), dc.getColType(), dc
+ .getColFormat(), getReportDefType().equals(
+ AppConstants.RD_SQL_BASED)));
+
+ if (nvl(dc.getDrillDownURL()).length() > 0) {
+ childReportFormFields = getChildReportFormFields(request,dc.getDrillDownURL());
+ }
+ if (dc.isVisible()) {
+ visibleCols.add(count,dc);
+ //if(dc.getColId().startsWith("group")) {
+ for (int d = 0; d < reportCols.size(); d++) {
+ if(reportCols.get(d)!=null) {
+ DataColumnType dct1 = (DataColumnType) reportCols.get(d);
+ if(dct1.getColId().equals(dc.getColId()+"_name") && ds.getRowCount()>0) {
+ displayName = ds.getString(0,dct1.getColId());
+ dc.setDisplayName(displayName);
+ }
+ }
+ }
+ //}
+
+ String widthInPxls = dc.getDisplayWidthInPxls();
+
+ if(nvl(widthInPxls).endsWith("px"))
+ dc.setDisplayWidthInPxls(widthInPxls);
+ else {
+ widthInPxls = widthInPxls+"px";
+ dc.setDisplayWidthInPxls(widthInPxls+"px");
+ }
+
+ rd.createColumn(dc.getColId(), dc.getDisplayName(), dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(),
+ visualManager.isColumnVisible(dc.getColId()), visualManager
+ .getSortByColId().equals(dc.getColId()) ? visualManager
+ .getSortByAscDesc() : null, isRuntimeColSortDisabled(), dc.getLevel()!=null?dc.getLevel():0, dc.getStart()!=null?dc.getStart():0, dc.getColspan()!=null?dc.getColspan():0, dc.isIsSortable()!=null?dc.isIsSortable():false);
+ // chr.addColumnHeader(new ColumnHeader(dc.getDisplayName(),
+ // (dc.getDisplayWidth()>100)?"10%":(""+dc.getDisplayWidth()+"%")));
+ } // if
+ else {
+ visibleCols.add(count,null);
+ rd.createColumn(dc.getColId(), "", dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(),
+ true, null,false, dc.getLevel()!=null?dc.getLevel():0, dc.getStart()!=null?dc.getStart():0, dc.getColspan()!=null?dc.getColspan():0, dc.isIsSortable()!=null?dc.isIsSortable():false);
+// formatProcessors.add(count,null);
+ }
+ count++;
+ } // for
+
+ ArrayList reportDataList = new ArrayList();
+ for (int r = 0; r < ds.getRowCount(); r++) {
+ DataRow dr = new DataRow();
+ rd.reportDataRows.addDataRow(dr);
+
+ for (int c = 0; c < reportCols.size(); c++) {
+ if(reportCols.get(c)!=null) {
+ DataColumnType dct = (DataColumnType) reportCols.get(c);
+ DataValue dv = new DataValue();
+ dr.addDataValue(dv);
+ dv.setDisplayValue(ds.getString(r, c));
+ dv.setColName(dct.getColName());
+ dv.setColId(dct.getColId());
+ dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+ StringBuffer indentation = new StringBuffer("");
+ if(dct.getIndentation()!=null && dct.getIndentation()>0) {
+ for (int indent=0; indent< dct.getIndentation(); indent++) {
+ indentation.append("\t");
+ }
+ dv.setNowrap("true");
+ }
+ dv.setIndentation(indentation.toString());
+ if(dct.isVisible()) {
+
+ dv.setVisible(true);
+ dv.setAlignment(dct.getDisplayAlignment());
+ dv.setDisplayTotal(dct.getDisplayTotal());
+ dv.setDisplayName(dct.getDisplayName());
+
+ if (nvl(dct.getDrillDownURL()).length() > 0) {
+
+ if(dv.getDisplayValue().length() > 0) {
+ dv.setDrillDownURL(parseDrillDownURL(r, /* c, */ds, dct,request, childReportFormFields));
+ dv.setDrillDowninPoPUp(dct.isDrillinPoPUp()!=null?dct.isDrillinPoPUp():false);
+ }
+
+ if (dv.getDisplayValue().length() == 0) {
+ //dv.setDisplayValue("[NULL]");
+ dv.setDisplayValue("");
+ }
+ } // if
+
+ } else {
+ dv.setVisible(false);
+ dv.setHidden(true);
+ }
+ //System.out.println("in Linear report b4" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
+
+ if(dr.getFormatId()!=null)
+ ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, true);
+ else
+ ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, false);
+
+ //System.out.println("in Linear report After" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
+ } // if reportCols
+ } // for
+ reportDataList.add(dr);
+ } // for
+ rd.setReportDataList(reportDataList);
+ //Only if rownumber options is needed
+ //rd.addRowNumbers(pageNo, getPageSize());
+
+ if (colDataTotalsLinear == null)
+ colDataTotalsLinear = generateColumnDataTotalsLinear(new ArrayList(reportCols), userId,
+ getDbInfo(),request);
+ if (displayColTotals && colDataTotalsLinear != null) {
+ String totalLabel = "Total";
+ if (getReportDataSize() > getPageSize())
+ totalLabel += "<br><font size=1>(for all pages)</font>";
+
+ rd.setColumnDataTotalsLinear(colDataTotalsLinear, totalLabel);
+ } // if
+ // Please note the below function doesn't set the visibility for dv since this is set in this function. - Sundar
+ rd.applyVisibility();
+
+ return rd;
+ } // loadHiveLinearReportData
+
+ //For Hive reports
+ public int getHiveReportCount(String sql) throws RaptorException {
+ //select t from (select count(*) t from (select * from program)x)x1;
+ int count = 0;
+ String countSql = "select t from (select count(*) t from ("+ sql + ")" + (Globals.isPostgreSQL() || Globals.isMySQL() ?" AS ":"") + " x) AS x1";
+
+ DataSet ds = null;
+ // try {
+ String dbInfo = getDBInfo();
+ System.out.println("SQL getReportCount()- " + countSql);
+ try {
+ ds = ConnectionUtils.getDataSet(countSql, dbInfo);
+ int totalRows = 0;
+ String dbType = "";
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ dbType = remDbInfo.getDBType(dbInfo);
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+ if( ds.getRowCount()>0) {
+ count = Integer.parseInt(ds.getString(0,0));
+ }
+ } catch (NumberFormatException ex) {}
+ return count;
+
+ } // getReportCount
+
+
+ /*private*/ public ReportFormFields getChildReportFormFields( HttpServletRequest request, String URL ) throws RaptorException {
+ String childReportID = getReportID(URL);
+
+ ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, childReportID,
+ false, 1);
+
+ ReportFormFields ddReportFormFields = ddRr.getReportFormFields();
+ return ddReportFormFields;
+ }
+
+ private String getReportID(String URL) {
+ URL = nvl(URL);
+ int pos = URL.toLowerCase().indexOf("c_master=")+9;
+ String reportID = "";
+ if(URL.toLowerCase().indexOf("&", pos)!=-1)
+ reportID = URL.substring(pos, URL.toLowerCase().indexOf("&", pos));
+ else
+ reportID = URL.substring(pos);
+ return reportID;
+
+ }
+ /*private*/ public String parseDrillDownURL(int rowIdx, /* int colIdx, */DataSet ds, DataColumnType dct, HttpServletRequest request, ReportFormFields ddReportFormFields)
+ throws RaptorException {
+ Vector viewActions = DataCache.getDataViewActions();
+ javax.servlet.http.HttpSession session = request.getSession();
+
+ StringBuffer dUrl = new StringBuffer();
+
+ //String childReportID = getReportID(dct.getDrillDownURL());
+
+ //ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, childReportID,
+ // false, 1);
+
+ //ReportFormFields ddReportFormFields = ddRr.getReportFormFields();
+
+ boolean isViewAction = false;
+ int flag = 0;
+ String requestParam ="";
+ for (int k = 0; k < viewActions.size(); k++)
+ if (dct.getDrillDownURL().equals(
+ AppUtils.getBaseActionURL() + ((String) viewActions.get(k))))
+ isViewAction = true;
+ if (isViewAction) {
+ // Drill-down to record details
+ String param = nvl(dct.getDrillDownParams()); // i.e.
+ // "c_master=[bo1.RECID$]"
+ param = param.substring(AppUtils.getBaseActionParam().length() + 1,
+ param.length() - 1); // i.e. "bo1.RECID$"
+ param = param.replace('.', '_'); // i.e. "bo1.RECID$"
+
+ dUrl.append(AppUtils.getBaseActionParam());
+ dUrl.append(java.net.URLEncoder.encode(ds.getString(rowIdx, param.toLowerCase())));
+ } else {
+ // Drill-down to another report
+ // Replacing col ids with values
+ String param = nvl(dct.getDrillDownParams());
+ while (param.indexOf('[') >= 0) {
+ int startIdx = param.indexOf('[');
+ int endIdx = param.indexOf(']');
+ StringBuffer sb = new StringBuffer();
+ if(startIdx>endIdx) {
+ if (endIdx < param.length() - 1)
+ sb.append(param.substring(endIdx + 1));
+ param = sb.toString();
+ continue;
+ }
+ if (startIdx > 0)
+ sb.append(param.substring(0, startIdx));
+
+ if (param.charAt(startIdx + 1) == '!') {
+ // Parameter is a form field value
+ String fieldId = param.substring(startIdx + 2, endIdx);
+ String fieldValue = (String) reportParamValues.get(fieldId);
+
+ sb.append(java.net.URLEncoder.encode(nvl(fieldValue)));
+ //TODO Add a else if condition to check whether the param is from request Param
+ //TODO make a unique symbol like #
+ }else if (param.charAt(startIdx + 1) == '#') {
+ flag = 1;
+ String fieldId = param.substring(startIdx + 2, endIdx);
+ String fieldValue = request.getParameter(fieldId);
+ sb.append(java.net.URLEncoder.encode(nvl(fieldValue)));
+
+ }else {
+ // Parameter is a column value
+ String fieldValue = "";
+ String colValue = null;
+ String colId = null;
+ if (param.indexOf('!') < 0 || param.indexOf('!') > endIdx)
+ colId = param.substring(startIdx + 1, endIdx);
+ else {
+ // Need to use NVL(column, form field)
+ colId = param.substring(startIdx + 1, param.indexOf('!'));
+
+ String fieldId = param.substring(param.indexOf('!') + 1, endIdx);
+ FormField ff = getFormField(fieldId);
+ if (ff.getFieldType().equals(FormField.FFT_TEXTAREA)) {
+ fieldValue = reportParamValues.getParamValueforTextAreaDrilldown(fieldId);
+ } else
+ fieldValue = (String) reportParamValues.get(fieldId);
+ } // else
+
+ DataColumnType column = getColumnById(colId);
+ String columnName = "";
+ int groupColumn = 0;
+ int groupMatch = 0;
+ if(column.getColName().startsWith("[")) {
+ groupColumn = 1;
+ columnName = column.getDisplayName();
+ for(ddReportFormFields.resetNext(); ddReportFormFields.hasNext(); ) {
+ FormField ff = ddReportFormFields.getNext();
+ if(ff.getFieldDisplayName().toLowerCase().equals(columnName.toLowerCase())) {
+ groupMatch = 1;
+ sb.delete(sb.lastIndexOf("&")+1, sb.length());
+ sb.append(ff.getFieldName()+"=");
+ }
+ }
+ }
+ if (groupColumn == 0 || (groupColumn == 1 && groupMatch == 1)) {
+ String dependsOn = column.getDependsOnFormField();
+ if(nvl(dependsOn).length()>0)
+ System.out.println("DependsOn " + dependsOn);
+ if (column != null) {
+ // if (column.getColType().equals(AppConstants.CT_DATE))
+ //if (!nvl(column.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
+ // .equals(AppConstants.DEFAULT_DATE_FORMAT))
+ // Use extra column instead
+ //commented out below line usually for Visual
+ //colId += AppConstants.DD_COL_EXTENSION;
+ colValue = ds.getString(rowIdx, colId.toLowerCase());
+ // if SQL-Based and drill-down param is a date, decode
+ // it to the expected Oracle format **/
+ if (getReportDefType().equals(AppConstants.RD_SQL_BASED))
+ if (!getColumnNoParseDateFlag(column))
+ if (ReportParamDateValueParser.isDateParam(colValue))
+ colValue = ReportParamDateValueParser
+ .formatDateParamValue(colValue);
+ } // if
+
+ String suppressValues = "|" + nvl(dct.getDrillDownType()) + "|";
+ if (suppressValues.length() > 2
+ && suppressValues.indexOf("|" + colValue + "|") >= 0)
+ // Parameter value is suppressed and not passed to the
+ // drill-down report
+ colValue = null;
+
+ sb.append(java.net.URLEncoder.encode(nvl(colValue, fieldValue)));
+ } else {
+ sb.delete(sb.lastIndexOf("&")+1, sb.length());
+ }
+ } // else
+
+ if (endIdx < param.length() - 1)
+ sb.append(param.substring(endIdx + 1));
+ param = sb.toString();
+ } // while
+ if(Globals.getPassRequestParamInDrilldown()) {
+ if(param.indexOf('#') < 0) {
+ String[] reqParameters = Globals.getRequestParams().split(",");
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ for (int i = 0; i < reqParameters.length; i++) {
+ if(request.getParameter(reqParameters[i])!=null) {
+ if(!reqParameters[i].toUpperCase().startsWith("FF")){
+ if(param.length()>0) {
+ param += "&" + reqParameters[i]+"="
+ + request.getParameter(reqParameters[i]);
+ } else {
+ param += "&" + reqParameters[i]+"="
+ + request.getParameter(reqParameters[i]);
+
+ }
+ }
+ }
+ }
+ for (int i = 0; i < sessionParameters.length; i++) {
+ if(session.getAttribute(sessionParameters[i].toUpperCase())!=null) {
+ if(!sessionParameters[i].toUpperCase().startsWith("FF")){
+ if(param.length()>0) {
+ param += "&" + sessionParameters[i].toUpperCase()+"="
+ + (String)session.getAttribute(sessionParameters[i].toUpperCase());
+ } else {
+ param += "&" + sessionParameters[i].toUpperCase()+"="
+ + (String)session.getAttribute(sessionParameters[i].toUpperCase());
+
+ }
+ }
+ } else {
+ param += "&" + sessionParameters[i].toUpperCase()+"="
+ + (String)session.getAttribute(sessionParameters[i]);
+
+ }
+ }
+
+ }
+ }
+
+ dUrl.append(param.toString());
+ dUrl.append("&");
+ dUrl.append(AppConstants.RI_DISPLAY_CONTENT);
+ dUrl.append("=Y");
+ dUrl.append("&");
+ if(dct.isDrillinPoPUp()==null || (!dct.isDrillinPoPUp().booleanValue())) {
+ dUrl.append(AppConstants.RI_SHOW_BACK_BTN);
+ dUrl.append("=Y");
+ dUrl.append("&");
+ }
+ dUrl.append(AppConstants.DRILLDOWN_INDEX);
+ int index = Integer.parseInt(nvl(AppUtils.getRequestValue(request, AppConstants.DRILLDOWN_INDEX), "0"));
+ /*
+ int form_index = Integer.parseInt(nvl(AppUtils.getRequestValue(request, AppConstants.FORM_DRILLDOWN_INDEX), "0"));
+ index = index>0 ? --index : 0;
+ form_index = form_index>0 ? --form_index : 0;*/
+ request.setAttribute(AppConstants.DRILLDOWN_INDEX, Integer.toString(index));
+ /*session.setAttribute(AppConstants.DRILLDOWN_INDEX, Integer.toString(index));
+ request.setAttribute(AppConstants.FORM_DRILLDOWN_INDEX, Integer.toString(form_index));
+ session.setAttribute(AppConstants.FORM_DRILLDOWN_INDEX, Integer.toString(form_index));*/
+
+ dUrl.append("=" + AppUtils.getRequestNvlValue(request, AppConstants.DRILLDOWN_INDEX));
+
+ //TODO Add a if condition to check whether the param is request Param
+ } // if
+
+ if (dUrl.length() > 0)
+ dUrl.insert(0, ((dct.getDrillDownURL()).indexOf('&') > 0) ? '&' : '&');
+ dUrl.insert(0, AppUtils.getDrillActionURL()+dct.getDrillDownURL());
+
+ //debugLogger.debug(" [[[[[[[[[[[[[[[[ " + dUrl);
+
+ return dUrl.toString();
+ } // parseDrillDownURL
+
+ /** *********************************************************************************** */
+
+ public DataRow generateColumnDataTotalsLinear(ArrayList reportCols, String userId,
+ String dbInfo, HttpServletRequest request) throws RaptorException {
+ DataRow dr = null;
+
+ displayColTotals = false;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dct = (DataColumnType) iter.next();
+ if( dct != null ) {
+ if (nvl(dct.getDisplayTotal()).length() > 0) {
+ displayColTotals = true;
+ break;
+ } // if
+ } // if checking dct
+ } // for
+
+ DataSet ds = null;
+ if (displayColTotals) {
+ dr = new DataRow();
+ // ds =
+ // DbUtils.executeQuery(generateTotalSQLLinear(reportParamValues,
+ // userId));
+ ds = ConnectionUtils.getDataSet(generateTotalSQLLinear(reportParamValues, userId,request),
+ dbInfo);
+
+ for (int c = 0; c < reportCols.size(); c++) {
+ DataColumnType dct = (DataColumnType) reportCols.get(c);
+ if ( dct != null ) {
+ DataValue dv = new DataValue();
+ if(dv.isVisible())
+ dr.addDataValue(dv);
+
+ String totalValue = "";
+ if (ds != null)
+ totalValue = ds.getString(0, c);
+ if (nvl(dct.getDisplayTotal()).length() > 0
+ && (!dct.getDisplayTotal().equals(AppConstants.TOTAL_SUM_ID)))
+ totalValue = nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(dct
+ .getDisplayTotal()))
+ + ": " + totalValue;
+ dv.setDisplayValue(Utils.truncateTotalDecimals(totalValue));
+
+ dv.setAlignment(dct.getDisplayAlignment());
+ dv.setColName(dct.getColName());
+ dv.setDisplayName(dct.getDisplayName());
+ dv.setColId(dct.getColId());
+ dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+ StringBuffer indentation = new StringBuffer("");
+ if(dct.getIndentation()!=null && dct.getIndentation()>0) {
+ for (int indent=0; indent< dct.getIndentation(); indent++) {
+ indentation.append("\t");
+ }
+ dv.setNowrap("true");
+ }
+ dv.setIndentation(indentation.toString());
+ dv.setDisplayTotal(dct.getDisplayTotal());
+ dv.setBold(true);
+ } // dct check
+ } // for
+ }
+
+ return dr;
+ } // generateColumnDataTotalsLinear
+
+ private Vector generateDataTotalsCrossTab(String rowColPos, String userId, HttpServletRequest request)
+ throws RaptorException {
+ String sql = getWholeSQL();
+ Vector dataTotals = new Vector();
+
+ boolean displayTotals = ((rowColPos.length() == 0) || (getCrossTabDisplayTotal(
+ rowColPos).length() > 0));
+ if (rowColPos.equals(AppConstants.CV_COLUMN))
+ displayColTotals = displayTotals;
+ else if (rowColPos.equals(AppConstants.CV_ROW))
+ displayRowTotals = displayTotals;
+
+ if (displayTotals) {
+ // DataSet ds =
+ // DbUtils.executeQuery(generateTotalSQLCrossTab(reportParamValues,
+ // rowColPos, userId));
+ String executeSql = generateTotalSQLCrossTab(
+ sql, rowColPos, userId, request, reportParamValues);
+ DataSet ds = ConnectionUtils.getDataSet(executeSql, getDbInfo());
+
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ Vector headerValues = new Vector();
+ String totalValue = null;
+
+ int cPos = 0;
+ for (Iterator iter = getAllColumns().iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (rowColPos.length() > 0
+ && nvl(dct.getCrossTabValue()).equals(rowColPos)) {
+ DataValue dataValue = new DataValue();
+ dataValue.setBold(true);
+ dataValue.setAlignment("center");
+ dataValue.setDisplayValue(ds.getString(i, cPos++));
+ headerValues.add(dataValue);
+
+ //headerValues.add(ds.getString(i, cPos++));
+ }
+ else if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_VALUE))
+ totalValue = ds.getString(i, cPos++);
+ } // for
+
+ dataTotals.add(new CrossTabTotalValue(headerValues, Utils
+ .truncateTotalDecimals(totalValue)));
+ } // for
+ } // if
+
+ return dataTotals;
+ } // generateDataTotalsCrossTab
+
+ /** *********************************************************************************** */
+
+ public void hideColVisual(String colId) {
+ visualManager.hideColumn(colId);
+ if (pageDataCache != null)
+ pageDataCache.columnVisualShowHide(colId, false);
+ } // hideColVisual
+
+ public void showColVisual(String colId) {
+ visualManager.showColumn(colId);
+ if (pageDataCache != null)
+ pageDataCache.columnVisualShowHide(colId, true);
+ } // showColVisual
+
+ public void sortColVisual(String colId) {
+ visualManager.setSortByColumn(colId);
+ resetCache(true);
+
+ pageDataCache = null;
+ cachedPageNo = -1;
+ } // sortColVisual
+
+ /** *********************************************************************************** */
+
+ public String generateDistinctValuesSQL(DataColumnType dct, String userId, HttpServletRequest request) throws RaptorException {
+ return super.generateDistinctValuesSQL(reportParamValues, dct, userId, request);
+ } // generateDistinctValuesSQL
+
+ public String getDbInfo() {
+ return this.cr.getDbInfo();
+ }
+
+ private String fixSQL(StringBuffer sql) {
+ int pos = 0;
+ int pos_f_format = 0;
+ int pos_t_format = 0;
+ int pos_alias = 0;
+ String format = "";
+ String alias = null;
+ if(sql.indexOf("SELECT", 7)!= -1) {
+ pos = sql.indexOf("SELECT", 7);
+ if(sql.indexOf("TO_CHAR", pos)!= -1){
+ pos = sql.indexOf("TO_CHAR", pos);
+ if(sql.indexOf("999",pos)!= -1) {
+ pos = sql.indexOf("999",pos);
+ pos_f_format = sql.lastIndexOf(", '", pos);
+ if(pos_f_format == -1 || (pos - pos_f_format > 10)) {
+ pos_f_format = sql.lastIndexOf(",'", pos);
+ pos_f_format -= 1;
+ }
+ pos = pos_f_format;
+ if(sql.indexOf("')", pos)!= -1) {
+ pos_t_format = sql.indexOf("')", pos);
+ //debugLogger.debug("pos_t - " + pos_t_format + " " + pos);
+ if(pos_t_format == -1 || (pos_t_format - pos > 20)) {
+ pos_t_format = sql.indexOf("' )", pos);
+ pos_t_format += 3;
+ }
+ else if (pos_t_format != -1)
+ pos_t_format += 2;
+ format = sql.substring(pos_f_format+3, pos_t_format);
+ //alias = sql.substring(pos_t_format+3, pos_t_format+6);
+ pos_alias = sql.indexOf(" ", pos_t_format);
+ alias = sql.substring(pos_alias+1, pos_alias+4);
+ }
+ }
+ }
+
+ if(sql.indexOf(alias)!=-1) {
+ pos = sql.indexOf(alias);
+ //debugLogger.debug(pos + " " + alias.length()+1 + "\n" + sql);
+ sql.delete(pos,pos+4);
+ sql.insert(pos, "TO_NUMBER("+alias+", '"+format+"')),'"+ format + "')");
+ pos = sql.lastIndexOf("SUM", pos);
+ if(pos==-1)
+ pos = sql.lastIndexOf("AVG", pos);
+ else if (pos==-1)
+ pos = sql.lastIndexOf("COUNT", pos);
+ else if (pos == -1)
+ pos = sql.lastIndexOf("STDDEV", pos);
+ else if (pos == -1)
+ pos = sql.lastIndexOf("VARIANCE", pos);
+ sql.insert(pos, "TO_CHAR (");
+ }
+
+ }
+
+ //debugLogger.debug("Alias|" + alias + "| Format " + format);
+ //debugLogger.debug(sql.toString());
+ return sql.toString();
+ } // FixSQL
+
+ public String parseReportSQL(String sql) throws RaptorException {
+ StringBuffer parsedSQL = new StringBuffer();
+
+ Vector updatedReportCols = new Vector();
+
+ curSQLParsePos = 0;
+ int lastParsePos = curSQLParsePos;
+ String lastToken = null;
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Flat File parseReportSQL ******* SQL " + sql));
+ sql = sql.replaceAll("([\\s]*\\() (?!FROM)", "(");
+ sql = sql.replaceAll("[\\s]*\\)", ")");
+ //sql = sql.replaceAll("[dD][eE][cC][oO][dD][eE] ", "decode");
+ //sql = sql.replaceAll("[\\s]*\\(", "(");
+ //sql = replaceNewLine(sql, "decode ", "decode");
+ //sql = replaceNewLine(sql, "DECODE ", "decode");
+ //sql = replaceNewLine(sql, "Decode ", "decode");
+
+ String nextToken = getNextSQLParseToken(sql, true);
+ String dbInfo = getDbInfo();
+ boolean isCYMBALScript = false;
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ String dbType = remDbInfo.getDBType(dbInfo);
+ if (dbType.equals("DAYTONA") && !(nextToken.toUpperCase().equals("SELECT"))) {
+ isCYMBALScript = true;
+ }
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+ if ( isCYMBALScript == false ) {
+ while (nextToken.length() > 0) {
+ //System.out.println("LastToken " + lastToken + " NextToken " + nextToken);
+
+
+ if (parsedSQL.length() == 0) {
+ if (nextToken.toUpperCase().equals("SELECT"))
+ parsedSQL.append("SELECT ");
+ else
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "The SQL must start with the SELECT keyword.");
+ } else if (nextToken.toUpperCase().equals("DISTINCT")
+ && parsedSQL.toString().equals("SELECT ")) {
+ parsedSQL.append("DISTINCT ");
+ } else if (nextToken.equals("*")
+ && (parsedSQL.toString().equals("SELECT ") || parsedSQL.toString().equals(
+ "SELECT DISTINCT "))) {
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "You cannot use \"SELECT *\". Please specify select columns/expressions.");
+ } else if (nextToken.toUpperCase().equals("FROM")) {
+ if (lastToken != null) {
+ updatedReportCols.add(getParseSQLDataColumn(lastToken, null, parsedSQL,
+ updatedReportCols, false));
+ lastToken = null;
+ }
+
+ parsedSQL.append(" \n");
+ while (lastParsePos < sql.length()
+ && Character.isWhitespace(sql.charAt(lastParsePos)))
+ lastParsePos++;
+ parsedSQL.append(sql.substring(lastParsePos));
+ break;
+ } else {
+ //System.out.println("Next Token " + nextToken);
+ if (nextToken.charAt(nextToken.length() - 1) == ',') {
+ // The token ends with ,
+ nextToken = nextToken.substring(0, nextToken.length() - 1);
+
+ if (nextToken.length() == 0) {
+ if (lastToken != null) {
+ updatedReportCols.add(getParseSQLDataColumn(lastToken, null,
+ parsedSQL, updatedReportCols, false));
+ lastToken = null;
+ } // else just comma => ignore it
+ } else {
+ //System.out.println("Next Token " + nextToken + " is Here" + " Last Token " + lastToken);
+ if (lastToken != null) {
+ updatedReportCols.add(getParseSQLDataColumn(lastToken, nextToken,
+ parsedSQL, updatedReportCols, false));
+ lastToken = null;
+ } else
+ updatedReportCols.add(getParseSQLDataColumn(nextToken, null,
+ parsedSQL, updatedReportCols, false));
+ }
+ } else {
+ // The token doesn't end with ,
+ if (lastToken == null)
+ lastToken = nextToken;
+ else {
+ String token = getNextSQLParseToken(sql, false);
+ //System.out.println(" ********** " + token + " " + lastToken);
+ if (!token.toUpperCase().equals("FROM"))
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "|FROM keyword or a comma expected after [" + nextToken
+ + "].");
+ //System.out.println("Next Token " + nextToken);
+ updatedReportCols.add(getParseSQLDataColumn(lastToken, nextToken,
+ parsedSQL, updatedReportCols, false));
+ lastToken = null;
+ } // else
+ } // else
+ } // else
+
+ lastParsePos = curSQLParsePos;
+ nextToken = getNextSQLParseToken(sql, true);
+ } // while
+ } else { // if CYMBAL Script
+ nextToken = getNextCYMBALSQLParseToken(sql, true);
+ Pattern re = null;
+ Matcher matcher = null;
+ String extracted = null;
+ while (nextToken.length() > 0) {
+ if (lastToken == null) lastToken = nextToken;
+
+ if( lastToken.toUpperCase().equals("DO DISPLAY")) {
+ re = Pattern.compile("each(.*)\\[.(.*?)\\]"); //\\[(.*?)\\]
+ matcher = re.matcher(nextToken);
+ if (matcher.find()) {
+ extracted = matcher.group();
+ re = Pattern.compile("\\[(.*?)\\]");
+ matcher = re.matcher(nextToken);
+ if(matcher.find()) {
+ extracted = matcher.group();
+ extracted = extracted.substring(1,extracted.length()-2);
+ StringTokenizer sToken = new StringTokenizer(extracted);
+ while(sToken.hasMoreTokens()) {
+ updatedReportCols.add(getParseSQLDataColumn("", sToken.nextToken(),
+ new StringBuffer(""), updatedReportCols, true));
+ }
+ }
+
+ }
+
+ }
+ lastToken = nextToken;
+ nextToken = getNextCYMBALSQLParseToken(sql, true);
+ }
+ }
+
+ if (updatedReportCols.size() == 0)
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "The SQL statement must have at least one column in the SELECT clause.");
+
+
+ return parsedSQL.toString();
+
+ } // parseReportSQL
+
+ private String getNextCYMBALSQLParseToken(String sql, boolean updateParsePos) {
+ int braketCount = 0;
+ boolean isInsideQuote = false;
+ StringBuffer nextToken = new StringBuffer();
+ for (int idxNext = curSQLParsePos; idxNext < sql.length(); idxNext++) {
+ char ch = sql.charAt(idxNext);
+
+ if (ch!='\n')
+ nextToken.append(ch);
+ else break;
+ } // for
+
+ return nextToken.toString();
+ } // getNextSQLParseToken
+
+ private String getNextSQLParseToken(String sql, boolean updateParsePos) {
+ int braketCount = 0;
+ boolean isInsideQuote = false;
+ StringBuffer nextToken = new StringBuffer();
+ for (int idxNext = curSQLParsePos; idxNext < sql.length(); idxNext++) {
+ char ch = sql.charAt(idxNext);
+
+ if (Character.isWhitespace(ch) || ch == ',') {
+ if (ch == ',')
+ nextToken.append(ch);
+
+ if (nextToken.length() == 0)
+ continue;
+ else if (braketCount == 0 && (!isInsideQuote)) {
+ if (updateParsePos)
+ curSQLParsePos = idxNext + ((ch == ',') ? 1 : 0);
+ break;
+ } else if (ch != ',' && nextToken.charAt(nextToken.length() - 1) != ' ')
+ nextToken.append(' ');
+ } else {
+ nextToken.append(ch);
+
+ if (ch == '(' || ch == '[')
+ braketCount++;
+ else if (ch == ')' || ch == ']')
+ braketCount--;
+ else if (ch == '\''/* ||ch=='\"' */)
+ isInsideQuote = (!isInsideQuote);
+ } // else
+ } // for
+
+ return nextToken.toString();
+ } // getNextSQLParseToken
+
+ private DataColumnType getParseSQLDataColumn(String sqlExpression, String colId,
+ StringBuffer parsedSQL, Vector updatedReportCols, boolean isCYMBALScript) throws RaptorException {
+ DataColumnType dct = null;
+
+ if (colId != null) {
+ if (!isParseSQLColID(colId))
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "["
+ + colId
+ + "] must either be a valid column id consisting only of letters, numbers, and underscores, or there must be a comma in front of it.");
+
+ dct = getColumnById(colId);
+ } else {
+ // Getting unique column id
+ colId = "";
+ int colIdN = 0;
+ for (int i = 0; (i < sqlExpression.length()) && (colIdN < 2); i++)
+ if (Character.isLetter(sqlExpression.charAt(i))) {
+ colId += sqlExpression.toLowerCase().charAt(i);
+ colIdN++;
+ } // if
+
+ colIdN = getAllColumns().size() + updatedReportCols.size();
+ for (boolean idAlreadyUsed = true; idAlreadyUsed; colIdN++) {
+ String newColId = colId + colIdN;
+ idAlreadyUsed = false;
+
+ for (Iterator iter = getAllColumns().iterator(); iter.hasNext();)
+ if (newColId.equals(((DataColumnType) iter.next()).getColId())) {
+ idAlreadyUsed = true;
+ break;
+ }
+
+ if (!idAlreadyUsed)
+ for (Iterator iter = updatedReportCols.iterator(); iter.hasNext();)
+ if (newColId.equals(((DataColumnType) iter.next()).getColId())) {
+ idAlreadyUsed = true;
+ break;
+ }
+ } // for
+
+ colId += (colIdN - 1);
+ } // else
+
+ if (dct == null) {
+ dct = (new ObjectFactory()).createDataColumnType();
+ dct.setColId(colId);
+ dct.setDisplayWidth(10);
+ dct.setDisplayAlignment("Left");
+ dct.setVisible(true);
+ dct.setGroupBreak(false); // ???
+
+ boolean isValidIdentifier = Character.isLetterOrDigit(sqlExpression.charAt(0));
+ for (int i = 0; i < sqlExpression.length(); i++)
+ if (!(Character.isLetterOrDigit(sqlExpression.charAt(i))
+ || (sqlExpression.charAt(i) == '_') || (sqlExpression.charAt(i) == '$'))) {
+ isValidIdentifier = false;
+ break;
+ } // if
+
+ if (isValidIdentifier) {
+ dct.setDisplayName(sqlExpression);
+ } else {
+ dct.setDisplayName(colId);
+ } // else
+ } // if
+ if(!isCYMBALScript)
+ sqlExpression = sqlExpression.replaceAll(", '", ",'");
+ dct.setDbColName(sqlExpression);
+ dct.setColName(sqlExpression);
+ dct.setCalculated(true);
+ dct.setColType(AppConstants.CT_CHAR);
+ dct.setDbColType(AppConstants.CT_CHAR);
+ adjustColumnType(dct); // ???
+
+ if(!isCYMBALScript) {
+ if (parsedSQL.toString().equals("SELECT ")
+ || parsedSQL.toString().equals("SELECT DISTINCT "))
+ parsedSQL.append("\n\t");
+ else
+ parsedSQL.append(", \n\t");
+ parsedSQL.append(sqlExpression);
+ parsedSQL.append(" ");
+ parsedSQL.append(colId);
+ }
+
+ return dct;
+ } // getParseSQLDataColumn
+
+ private boolean isParseSQLColID(String token) {
+ if (nvl(token).length() == 0)
+ return false;
+
+ for (int i = 0; i < token.length(); i++) {
+ char ch = token.charAt(i);
+
+ if (i == 0 && ch == '_')
+ return false;
+
+ if (!(Character.isLetterOrDigit(ch) || ch == '_'))
+ return false;
+ } // for
+
+ return true;
+ } // isParseSQLColID
+
+ /*private*/ public String parseReportSQLForDrillDownParams(String reportSQL, DataColumnType dataColumnRequest, HttpServletRequest request){
+ String param = nvl(dataColumnRequest.getDrillDownParams());
+ String sql = reportSQL;
+ int pos = 0;
+ while (param.indexOf('[', pos) >= 0) {
+ int startIdx = param.indexOf('[',pos);
+ int endIdx = param.indexOf(']',startIdx+1);
+ pos = startIdx+1;
+ StringBuffer sb = new StringBuffer();
+ if (startIdx > 0)
+ sb.append(param.substring(0, startIdx));
+ else break;
+
+ if (param.charAt(startIdx + 1) == '#') {
+ // Parameter is a form field value
+ String fieldId = param.substring(startIdx + 2, endIdx);
+ String fieldValue = request.getParameter(fieldId);
+ sql = Utils.replaceInString(sql, "[" + fieldId.toUpperCase()+"]", fieldValue );
+ }
+ }
+ return sql;
+ }
+
+public List getMapMarkers(ReportData rd, org.openecomp.portalsdk.analytics.xmlobj.ReportMap xmlmap){
+
+ ArrayList markers = new ArrayList();
+ int rNum = 0;
+ HashMap colHash = new HashMap();
+
+ for(rd.reportDataRows.resetNext(); rd.reportDataRows.hasNext(); rNum++) {
+ DataRow dr = rd.reportDataRows.getNext();
+ for(dr.resetNext(); dr.hasNext(); ) {
+ DataValue dv = dr.getNext();
+ colHash.put(dv.getColId(), dv.getDisplayValueLinkHtml());
+ }
+
+ for (int i = 0; i < xmlmap.getMarkers().size(); i ++){
+ Marker marker = new Marker("", "", "");
+ org.openecomp.portalsdk.analytics.xmlobj.Marker m = (org.openecomp.portalsdk.analytics.xmlobj.Marker) xmlmap.getMarkers().get(i);
+ String address = (String) colHash.get(m.getAddressColumn());
+ String data = (String) colHash.get(m.getDataColumn());
+ marker.setAddress(address);
+ if (xmlmap.getAddAddressInDataYN() != null && xmlmap.getAddAddressInDataYN().equals("Y")){
+ marker.setData(address + "<br/>" + data);
+ }
+ else{
+ marker.setData(data);
+ }
+ marker.setColor(m.getMarkerColor());
+ markers.add(marker);
+ System.out.println("%%%%%%%%%%%% marker is : " + address + data);
+ }
+
+ }
+
+ return markers;
+ }
+
+
+
+ public ReportParamValues getReportParamValues() {
+ return reportParamValues;
+ }
+
+ public String getFormFieldFilled(String title) {
+ if( getFormFieldList()!=null && reportParamValues!=null && nvl(title).length()>0) {
+ for (Iterator iter1 = getFormFieldList().getFormField().iterator(); iter1.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter1.next();
+ String fieldDisplay = getFormFieldDisplayName(fft);
+ String fieldId = fft.getFieldId();
+ if(!fft.getFieldType().equals(FormField.FFT_BLANK) && !fft.getFieldType().equals(FormField.FFT_LIST_MULTI) && !fft.getFieldType().equals(FormField.FFT_TEXTAREA)) {
+ String paramValue = Utils.oracleSafe(nvl(reportParamValues.getParamValue(fieldId)));
+ title = Utils.replaceInString(title, fieldDisplay, nvl(
+ paramValue, ""));
+ }
+ }
+ }
+ return title;
+ }
+
+ public synchronized Object clone() {
+ try {
+ return super.clone();
+ } catch (CloneNotSupportedException e) {
+ // this shouldn't happen, since we are Cloneable
+ throw new InternalError("Cloning throws error.");
+ }
+ }
+
+ public VisualManager getVisualManager() {
+ return visualManager;
+ }
+
+ public String getReportSQLWithRowNum(String _orderBy, boolean asc) {
+ String sql = getWholeSQL();
+ int closeBracketPos = 0;
+ // Added reportSQLOnlyFirstPart which has Column information with Rownum
+ return nvl(getReportSQLOnlyFirstPart()) + " " + sql + ") x ";
+
+ }
+
+ public int getDisplayMode() {
+ return DISPLAY_MODE;
+ }
+
+ public void setDisplayMode(int mode) {
+ DISPLAY_MODE = mode;
+ }
+
+ public int getDateOption() {
+ return DATE_OPTION;
+ }
+
+ public void setDateOption(int dateOption) {
+ DATE_OPTION = dateOption;
+ }
+
+ public boolean isDisplayColTotals() {
+ return displayColTotals;
+ }
+
+ public void setDisplayColTotals(boolean displayColTotals) {
+ this.displayColTotals = displayColTotals;
+ }
+
+ public boolean isDisplayRowTotals() {
+ return displayRowTotals;
+ }
+
+ public void setDisplayRowTotals(boolean displayRowTotals) {
+ this.displayRowTotals = displayRowTotals;
+ }
+
+
+ private boolean canPersistLinearReport() {
+ boolean visibleColExist = false;
+
+ if (getDataSourceList().getDataSource().size() > 0) {
+ for (Iterator iter = getAllColumns().iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (dct.isVisible()) {
+ visibleColExist = true;
+ break;
+ }
+ } // for
+ } // if
+
+ return visibleColExist;
+ } // canPersistLinearReport
+
+ public void persistLinearReport(HttpServletRequest request)
+ throws RaptorException {
+ if (!canPersistLinearReport())
+ return;
+
+ Connection connection = null;
+ try {
+ String userID = AppUtils.getUserID(request);
+ String reportXML = marshal();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report " + reportID
+ + " XML marshalled succesfully"));
+
+ // Update report
+ verifySQLBasedReportAccess(request);
+ reportSecurity.reportUpdate(request);
+ connection = DbUtils.startTransaction();
+ ReportLoader.updateCustomReportRec(connection, this, reportXML);
+ ReportLoader.createReportLogEntry(connection, reportID, userID,
+ AppConstants.RLA_UPDATE, "", "");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] DB update report "
+ + reportID + " succesfull"));
+ DbUtils.commitTransaction(connection);
+ } catch (RaptorException e) {
+ e.printStackTrace();
+ DbUtils.rollbackTransaction(connection);
+ throw e;
+ } finally {
+ DbUtils.clearConnection(connection);
+ }
+ } // persistLinearReport
+
+ public void persistDashboardReport(HttpServletRequest request)
+ throws RaptorException {
+
+ Connection connection = null;
+ try {
+ String userID = AppUtils.getUserID(request);
+ String reportXML = marshal();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report " + reportID
+ + " XML marshalled succesfully"));
+
+ // Update report
+ verifySQLBasedReportAccess(request);
+ reportSecurity.reportUpdate(request);
+ connection = DbUtils.startTransaction();
+ ReportLoader.updateCustomReportRec(connection, this, reportXML);
+ ReportLoader.createReportLogEntry(connection, reportID, userID,
+ AppConstants.RLA_UPDATE, "", "");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] DB update report "
+ + reportID + " succesfull"));
+ DbUtils.commitTransaction(connection);
+ } catch (RaptorException e) {
+ e.printStackTrace();
+ DbUtils.rollbackTransaction(connection);
+ throw e;
+ } finally {
+ DbUtils.clearConnection(connection);
+ }
+ } // persistDashboardReport
+ public String getTotalSql() {
+ return totalSql;
+ }
+
+ public void setTotalSql(String totalSql) {
+ this.totalSql = totalSql;
+ }
+
+ public void setTriggerFormFieldCheck( ReportFormFields FormFieldList, FormField selectedFormField) {
+
+ for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
+ FormField ff = (FormField) iter.next();
+ if(!ff.getFieldName().equals(selectedFormField.getFieldName())) {
+ if(nvl(ff.getBaseSQL()).length()>0 && ff.getBaseSQL().indexOf("["+selectedFormField.getFieldDisplayName() +"]")!= -1) {
+ selectedFormField.setTriggerOtherFormFields(true);
+ }
+
+ }
+ }
+
+ }
+
+ public void setTriggerThisFormFieldCheck( ReportFormFields FormFieldList, FormField selectedFormField) {
+
+ String sql = nvl(selectedFormField.getBaseSQL()).length()>0 ? selectedFormField.getBaseSQL():"";
+ for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
+ FormField ff = (FormField) iter.next();
+ if(!ff.getFieldName().equals(selectedFormField.getFieldName())) {
+ if(sql.indexOf("["+ff.getFieldDisplayName() +"]")!= -1) {
+ selectedFormField.setTriggerThisFormfield(true);
+ break;
+ }
+
+ }
+ }
+
+ }
+
+ private boolean isAllowEdit(HttpServletRequest request) {
+ boolean allowEdit = false;
+ String userId = AppUtils.getUserID(request);
+ try {
+ if( AppUtils.isAdminUser(request) || AppUtils.isSuperUser(request) ) {
+ allowEdit = true;
+ } else {
+ if(getOwnerID().equals(userId)) allowEdit = true;
+ else allowEdit = false;
+ }
+ } catch (RaptorException ex) {
+ allowEdit = false;
+ }
+ return allowEdit;
+ }
+ public ReportJSONRuntime createReportJSONRuntime(HttpServletRequest request, ReportData rd) {
+ String userId = AppUtils.getUserID(request);
+ ObjectMapper mapper = new ObjectMapper();
+ ReportJSONRuntime reportJSONRuntime = new ReportJSONRuntime();
+ reportJSONRuntime.setReportTitle(getReportTitle());
+ //reportJSONRuntime.setReportSubTitle(getReportSubTitle());
+ reportJSONRuntime.setReportID(getReportID());
+ reportJSONRuntime.setReportDescr(getReportDescr());
+ reportJSONRuntime.setReportName(getReportName());
+ reportJSONRuntime.setReportSubTitle(getReportSubTitle());
+ reportJSONRuntime.setAllowSchedule(isAllowSchedule());
+ reportJSONRuntime.setAllowEdit(isAllowEdit(request));
+ reportJSONRuntime.setColIdxTobeFreezed(getFrozenColumnId());
+ reportJSONRuntime.setNumFormCols(getNumFormColsAsInt());
+ //back button url
+ reportJSONRuntime.setBackBtnURL("");
+ String chartType = getChartType();
+ boolean displayChart = (nvl(chartType).length()>0)&&getDisplayChart();
+ boolean displayChartWizard = getDisplayChart();
+ reportJSONRuntime.setChartAvailable(displayChart);
+ reportJSONRuntime.setChartWizardAvailable(displayChartWizard);
+ reportJSONRuntime.setDisplayData(!isDisplayOptionHideData());
+ reportJSONRuntime.setDisplayForm(!isDisplayOptionHideForm());
+ reportJSONRuntime.setHideFormFieldsAfterRun(isHideFormFieldAfterRun());
+ reportJSONRuntime.setDisplayExcel(!isDisplayOptionHideExcelIcons());
+ reportJSONRuntime.setDisplayPDF(!isDisplayOptionHidePDFIcons());
+ ArrayList<IdNameValue> formFieldValues = new ArrayList<IdNameValue>();
+ ArrayList<FormFieldJSON> formFieldJSONList = new ArrayList<FormFieldJSON>();
+ if(getReportFormFields()!=null) {
+ formFieldJSONList = new ArrayList<FormFieldJSON>(getReportFormFields().size());
+ for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
+ formFieldValues = new ArrayList<IdNameValue>();
+ FormField ff = (FormField) iter.next();
+ ff.setDbInfo(getDbInfo());
+ FormFieldJSON ffJSON = new FormFieldJSON();
+ ffJSON.setFieldId(ff.getFieldName());
+ ffJSON.setFieldType(ff.getFieldType());
+ ffJSON.setFieldDisplayName(ff.getFieldDisplayName());
+ ffJSON.setHelpText(ff.getHelpText());
+ ffJSON.setValidationType(ff.getValidationType());
+ ffJSON.setVisible(ff.isVisible());
+ //ffJSON.setTriggerOtherFormFields(ff.getDependsOn());
+ IdNameList lookup = null;
+ lookup = ff.getLookupList();
+ String selectedValue = "";
+ String oldSQL = "";
+ IdNameList lookupList = null;
+ boolean readOnly = false;
+ if(lookup!=null) {
+ if(!ff.hasPredefinedList) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = lu.getSql();
+ oldSQL = lu.getSql();
+ setTriggerFormFieldCheck( getReportFormFields(), ff);
+ ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
+ SQL = parseAndFillReq_Session_UserValues(request, SQL, userId);
+ SQL = parseAndFillWithCurrentValues(request, SQL, ff);
+ String defaultSQL = lu.getDefaultSQL();
+ defaultSQL = parseAndFillReq_Session_UserValues(request, defaultSQL, userId);
+ defaultSQL = parseAndFillWithCurrentValues(request, defaultSQL, ff);
+ lookup = new IdNameSql(-1,SQL,defaultSQL);
+
+ lookupList = lookup;
+ try {
+ lookup.loadUserData(0, "", ff.getDbInfo(), ff.getUserId());
+ } catch (Exception e ){ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ }
+ lookup.trimToSize();
+
+ String[] requestValue = request.getParameterValues(ff.getFieldName());
+
+ if(lookup != null && lookup.size() > 0) {
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ readOnly = value.isReadOnly();
+ if(requestValue != null && Arrays.asList(requestValue).contains(value.getId())) {
+ //if(value.getId().equals(requestValue))
+ value.setDefaultValue(true);
+ } else if (AppUtils.nvl(ff.getDefaultValue()).length()>0) {
+ if(ff.getDefaultValue().equals(value.getId())) {
+ value.setDefaultValue(true);
+ }
+ }
+ if(!(ff.getFieldType().equals(FormField.FFT_CHECK_BOX) || ff.getFieldType().equals(FormField.FFT_COMBO_BOX) || ff.getFieldType().equals(FormField.FFT_LIST_BOX)
+ || ff.getFieldType().equals(FormField.FFT_LIST_MULTI)) && value.isDefaultValue())
+ formFieldValues.add(value);
+ else if(ff.getFieldType().equals(FormField.FFT_CHECK_BOX) || ff.getFieldType().equals(FormField.FFT_COMBO_BOX) || ff.getFieldType().equals(FormField.FFT_LIST_BOX)
+ || ff.getFieldType().equals(FormField.FFT_LIST_MULTI)) {
+ formFieldValues.add(value);
+ }
+ //break;
+ }
+ } else {
+ if(requestValue!=null && requestValue.length>0) {
+ IdNameValue value = new IdNameValue(requestValue[0], requestValue[0], true, false);
+ formFieldValues.add(value);
+ }
+ }
+
+ } else {
+ setTriggerFormFieldCheck( getReportFormFields(), ff);
+ ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
+ String[] requestValue = request.getParameterValues(ff.getFieldName());
+ if(requestValue!=null && requestValue.length>0) {
+ IdNameValue value = new IdNameValue(requestValue[0], requestValue[0], true, false);
+ formFieldValues.add(value);
+ } else if (AppUtils.nvl(ff.getDefaultValue()).length()>0) {
+ IdNameValue value = new IdNameValue(ff.getDefaultValue(), ff.getDefaultValue(), true, false);
+ formFieldValues.add(value);
+ }
+ }
+ if(!ff.hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+
+
+
+ ffJSON.setFormFieldValues(formFieldValues);
+ formFieldJSONList.add(ffJSON);
+ } // for
+ }
+ reportJSONRuntime.setFormFieldList(formFieldJSONList);
+ //reportJSONRuntime.setReportDataColumns(get);
+ int count = 0;
+ Map<String,Object> dvJSON = null;
+ if(rd!=null) {
+ count = 0;
+ reportJSONRuntime.setTotalRows(getReportDataSize());
+ ArrayList<ColumnHeader> colList = new ArrayList<ColumnHeader>();
+ ArrayList<Map<String,Object>> reportDataRows = new ArrayList<Map<String,Object>>();
+ for(rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext(); ) {
+ count++;
+ ColumnHeaderRow chr = rd.reportColumnHeaderRows.getNext();
+ for(chr.resetNext(); chr.hasNext(); ) {
+ colList.add(chr.getNext());
+ }
+ }
+ if(getReportDataSize() > 0) {
+ count = 0;
+ for(rd.reportDataRows.resetNext(); rd.reportDataRows.hasNext(); count++) {
+ dvJSON = new HashMap<String,Object>();
+ DataRow dr = rd.reportDataRows.getNext();
+ for(dr.resetNext(); dr.hasNext(); ) {
+ DataValue dv = dr.getNext();
+ try {
+ dvJSON.put(dv.getColId(), dv);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+
+ }
+ }
+ reportDataRows.add(dvJSON);
+ }
+ }
+ reportJSONRuntime.setReportDataColumns(colList);
+ reportJSONRuntime.setReportDataRows(reportDataRows);
+ //reportJSONRuntime.setSqlWhole(getWholeSQL());
+ reportJSONRuntime.setPageSize(getPageSize());
+
+ }
+
+ if(getReportDataSize() <= 0) {
+ reportJSONRuntime.setMessage(getEmptyMessage());
+ }
+ reportJSONRuntime.setSqlWhole(getWholeSQL());
+ return reportJSONRuntime;
+
+ }
+
+ public ReportJSONRuntime createFormFieldJSONRuntime(HttpServletRequest request) {
+ String userId = AppUtils.getUserID(request);
+ ObjectMapper mapper = new ObjectMapper();
+ ReportJSONRuntime reportJSONRuntime = new ReportJSONRuntime();
+ reportJSONRuntime.setReportTitle(getReportTitle());
+ reportJSONRuntime.setReportID(getReportID());
+ reportJSONRuntime.setReportName(getReportName());
+ reportJSONRuntime.setReportSubTitle(getReportSubTitle());
+ reportJSONRuntime.setNumFormCols(getNumFormColsAsInt());
+ ArrayList<IdNameValue> formFieldValues = new ArrayList<IdNameValue>();
+ ArrayList<FormFieldJSON> formFieldJSONList = new ArrayList<FormFieldJSON>();
+ if(reportFormFields!=null) {
+ formFieldJSONList = new ArrayList<FormFieldJSON>(reportFormFields.size());
+ for (Iterator iter = reportFormFields.iterator(); iter.hasNext();) {
+ formFieldValues = new ArrayList<IdNameValue>();
+ FormField ff = (FormField) iter.next();
+ FormFieldJSON ffJSON = new FormFieldJSON();
+ ffJSON.setFieldId(ff.getFieldName());
+ ffJSON.setFieldType(ff.getFieldType());
+ ffJSON.setFieldDisplayName(ff.getFieldDisplayName());
+ ffJSON.setHelpText(ff.getHelpText());
+ ffJSON.setValidationType(ff.getValidationType());
+ ffJSON.setFormFieldValues(formFieldValues);
+ ffJSON.setVisible(ff.isVisible());
+ formFieldJSONList.add(ffJSON);
+ }
+ for (Iterator iter = reportFormFields.iterator(); iter.hasNext();) {
+ formFieldValues = new ArrayList<IdNameValue>();
+ FormField ff = (FormField) iter.next();
+ ff.setDbInfo(getDbInfo());
+ for (Iterator iter1 = formFieldJSONList.iterator(); iter1.hasNext();) {
+ FormFieldJSON ffJSON = (FormFieldJSON) iter1.next();
+ if(ffJSON.getFieldId().equals(ff.getFieldName())) {
+ IdNameList lookup = null;
+ lookup = ff.getLookupList();
+ String selectedValue = "";
+ String oldSQL = "";
+ IdNameList lookupList = null;
+ boolean readOnly = false;
+ if(lookup!=null) {
+ if(!ff.hasPredefinedList) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = lu.getSql();
+ oldSQL = lu.getSql();
+ setTriggerFormFieldCheck( getReportFormFields(), ff);
+ ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
+ setTriggerThisFormFieldCheck(getReportFormFields(), ff);
+ SQL = parseAndFillReq_Session_UserValues(request, SQL, userId);
+ SQL = parseAndFillOtherFormfieldValues(request, SQL, userId, formFieldJSONList);
+ //SQL = parseAndFillWithCurrentValues(formGrid,SQL, ff);
+ String defaultSQL = lu.getDefaultSQL();
+ defaultSQL = parseAndFillReq_Session_UserValues(request, defaultSQL, userId);
+ //defaultSQL = parseAndFillWithCurrentValues(formGrid,defaultSQL, ff);
+ lookup = new IdNameSql(-1,SQL,defaultSQL);
+
+ lookupList = lookup;
+ try {
+ lookup.loadUserData(0, "", ff.getDbInfo(), ff.getUserId());
+ } catch (Exception e ){ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ }
+ lookup.trimToSize();
+
+ String requestValue = request.getParameter(ff.getFieldName());
+ ArrayList<String> requestValueList = new ArrayList<String>();
+ requestValueList.add(requestValue);
+
+ /*if(ff.isTriggerThisFormfield()) {
+ refreshFormFieldsWithLatestValue(request, userId, ff, formFieldJSONList);
+ }*/
+
+
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ readOnly = value.isReadOnly();
+ if(nvl(requestValue).length()>0) {
+ if(value.getId().equals(requestValue))
+ value.setDefaultValue(true);
+ }
+ formFieldValues.add(value);
+ //break;
+ }
+
+ } else {
+ setTriggerFormFieldCheck( getReportFormFields(), ff);
+ ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
+ String[] requestValue = request.getParameterValues(ff.getFieldName());
+ if(requestValue!=null && requestValue.length>0) {
+ IdNameValue value = new IdNameValue(requestValue[0], requestValue[0], true, false);
+ formFieldValues.add(value);
+ } else if (AppUtils.nvl(ff.getDefaultValue()).length()>0) {
+ IdNameValue value = new IdNameValue(ff.getDefaultValue(), ff.getDefaultValue(), true, false);
+ formFieldValues.add(value);
+ }
+ }
+ if(!ff.hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+
+
+ //if(!ff.isTriggerThisFormfield()) {
+ ffJSON.setFormFieldValues(formFieldValues);
+ //}
+
+ break;
+
+ } //if
+ } //for
+ }//for
+ }//if
+
+ reportJSONRuntime.setFormFieldList(formFieldJSONList);
+ //reportJSONRuntime.setReportDataColumns(get);
+
+ return reportJSONRuntime;
+
+ }
+
+
+ private String parseAndFillOtherFormfieldValues(HttpServletRequest request, String SQL, String userId, ArrayList<FormFieldJSON> formFieldJSONList) {
+ ArrayList<IdNameValue> formFieldValues = new ArrayList<IdNameValue>();
+ String selectedValue = "";
+ String displayName = "";
+ for (Iterator iter1 = formFieldJSONList.iterator(); iter1.hasNext();) {
+ FormFieldJSON ffJSON = (FormFieldJSON) iter1.next();
+ displayName = ffJSON.getFieldDisplayName();
+ ArrayList<IdNameValue> formfieldvalues = ffJSON.getFormFieldValues();
+ for (int i = 0; i< formfieldvalues.size(); i++) {
+ IdNameValue formfieldItem = formfieldvalues.get(i);
+ if(formfieldItem.isDefaultValue()) {
+ selectedValue = formfieldItem.getId();
+ }
+ }
+ SQL = Utils.replaceInString(SQL, "["+displayName+"]", selectedValue);
+ }
+ return SQL;
+
+ }
+
+ private void refreshFormFieldsWithLatestValue(HttpServletRequest request, String userId, FormField ff_src, ArrayList<FormFieldJSON> formFieldJSONList) {
+ ArrayList<IdNameValue> formFieldValues = new ArrayList<IdNameValue>();
+ List<String> requestValueList = null;
+ IdNameList lookup = null;
+ lookup = ff_src.getLookupList();
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = "" ;
+ String oldSQL = "";
+ String oldDefaultSQL = "";
+ String defaultSQL = "";
+ IdNameList lookupList = null;
+ if(lu != null) {
+ SQL = lu.getSql();
+ oldSQL = lu.getSql();
+ oldDefaultSQL = lu.getDefaultSQL();
+ defaultSQL = lu.getDefaultSQL();
+ }
+ boolean readOnly = false;
+ for (Iterator iter1 = formFieldJSONList.iterator(); iter1.hasNext();) {
+ FormFieldJSON ffJSON = (FormFieldJSON) iter1.next();
+ if((ffJSON.getFieldId().equals(ff_src.getFieldName())) && ffJSON.isVisible()) {
+ for (Iterator iter = reportFormFields.iterator(); iter.hasNext();) {
+ formFieldValues = new ArrayList<IdNameValue>();
+ FormField ff = (FormField) iter.next();
+ if(!ff.getFieldName().equals(ff_src.getFieldName())) {
+ //IdNameList lookup = null;
+ //lookup = ff.getLookupList();
+ String selectedValue = "";
+
+
+
+ String [] requestParam = request.getParameterValues(ff.getFieldName());
+ if(requestParam != null) {
+ requestValueList = Arrays.asList(request.getParameterValues(ff.getFieldName()));
+
+ } else {
+ requestValueList = new ArrayList<String>();
+ }
+
+
+ if(nvl(ff_src.getBaseSQL()).length()>0 && ff_src.getBaseSQL().indexOf("["+ff.getFieldDisplayName() +"]")!= -1) {
+ if(lookup!=null) {
+ try {
+ if(!ff_src.hasPredefinedList) {
+ String formatSelected = null;
+ if(ff_src.getFieldType().equals(FormField.FFT_LIST_MULTI) || ff_src.getFieldType().equals(FormField.FFT_CHECK_BOX)) {
+ formatSelected = formatSelectedItems(requestValueList, ff_src.getFieldType());
+ } else
+ formatSelected = requestValueList.size()>0?requestValueList.get(0):"";
+ SQL = Utils.replaceInString(SQL, "["+ff_src.getFieldDisplayName()+"]", formatSelected);
+ defaultSQL = Utils.replaceInString(defaultSQL, "["+ff_src.getFieldDisplayName()+"]", formatSelected);
+ defaultSQL = parseAndFillWithCurrentValues(request, defaultSQL, ff_src);
+ defaultSQL = parseAndFillReq_Session_UserValues(request, defaultSQL, userId);
+ SQL = parseAndFillReq_Session_UserValues(request, SQL, userId);
+ SQL = parseAndFillWithCurrentValues(request, SQL, ff_src);
+
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+ }
+ }
+ }
+
+ if(nvl(ff_src.getBaseSQL()).length()>0) {
+ lookup = new IdNameSql(-1,SQL,defaultSQL);
+ lookupList = lookup;
+ try {
+ lookup.loadUserData(0, "", ff_src.getDbInfo(), ff_src.getUserId());
+ } catch (Exception e ){
+ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ if(!ff_src.hasPredefinedList) {
+ lookup.trimToSize();
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ readOnly = value.isReadOnly();
+ formFieldValues.add(value);
+ }
+ }
+ ffJSON.setFormFieldValues(formFieldValues);
+ }
+ if(!ff_src.hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ if(oldDefaultSQL != null && !oldDefaultSQL.equals("")) {
+ ((IdNameSql)lookup).setDefaultSQL(oldDefaultSQL);
+ }
+ }
+
+ }
+ }
+
+ }
+
+
+ private void triggerOtherFormFieldsWithThisValue(HttpServletRequest request, String userId, FormField ff_src, ArrayList<String> requestValueList, ArrayList<FormFieldJSON> formFieldJSONList) {
+ ArrayList<IdNameValue> formFieldValues = new ArrayList<IdNameValue>();
+ //ArrayList<FormFieldJSON> formFieldJSONList = new ArrayList<FormFieldJSON>();
+ for (Iterator iter = reportFormFields.iterator(); iter.hasNext();) {
+ formFieldValues = new ArrayList<IdNameValue>();
+ FormField ff = (FormField) iter.next();
+ if(!ff_src.getFieldName().equals(ff.getFieldName())) {
+ for (Iterator iter1 = formFieldJSONList.iterator(); iter1.hasNext();) {
+ FormFieldJSON ffJSON = (FormFieldJSON) iter1.next();
+ if(ffJSON.getFieldId().equals(ff.getFieldName()) && ffJSON.isVisible()) {
+ if(nvl(ff.getBaseSQL()).length()>0 && ff.getBaseSQL().indexOf("["+ff_src.getFieldDisplayName() +"]")!= -1) {
+ IdNameList lookup = null;
+ lookup = ff.getLookupList();
+ String selectedValue = "";
+ String oldSQL = "";
+ String oldDefaultSQL = "";
+ IdNameList lookupList = null;
+ boolean readOnly = false;
+ if(lookup!=null) {
+ try {
+ if(!ff.hasPredefinedList) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = lu.getSql();
+ oldSQL = lu.getSql();
+ oldDefaultSQL = lu.getDefaultSQL();
+ String defaultSQL = lu.getDefaultSQL();
+ String formatSelected = null;
+ if(ff_src.getFieldType().equals(FormField.FFT_LIST_MULTI) || ff_src.getFieldType().equals(FormField.FFT_CHECK_BOX)) {
+ formatSelected = formatSelectedItems(requestValueList, ff.getFieldType());
+ }
+ else
+ formatSelected = requestValueList.size()>0?requestValueList.get(0):"";
+ SQL = Utils.replaceInString(SQL, "["+ff_src.getFieldDisplayName()+"]", formatSelected);
+ defaultSQL = Utils.replaceInString(defaultSQL, "["+ff_src.getFieldDisplayName()+"]", formatSelected);
+ defaultSQL = parseAndFillWithCurrentValues(request, defaultSQL, ff_src);
+ defaultSQL = parseAndFillReq_Session_UserValues(request, defaultSQL, userId);
+ SQL = parseAndFillReq_Session_UserValues(request, SQL, userId);
+ SQL = parseAndFillWithCurrentValues(request, SQL, ff_src);
+ lookup = new IdNameSql(-1,SQL,defaultSQL);
+ lookupList = lookup;
+ try {
+ lookup.loadUserData(0, "", ff.getDbInfo(), ff.getUserId());
+ } catch (Exception e ){
+ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ }
+ lookup.trimToSize();
+
+
+
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ readOnly = value.isReadOnly();
+// if(nvl(requestValue).length()>0) {
+// if(value.getId().equals(requestValue))
+// value.setDefaultValue(true);
+// }
+ formFieldValues.add(value);
+ //break;
+ }
+
+ ffJSON.setFormFieldValues(formFieldValues);
+
+ if(!ff.hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ if(oldDefaultSQL != null && !oldDefaultSQL.equals("")) {
+ ((IdNameSql)lookup).setDefaultSQL(oldDefaultSQL);
+ }
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ } //ff baseSQL
+ }
+ }
+ }
+ }
+
+ }
+
+ public String formatSelectedItems(List selectedItems, String type) {
+ StringBuffer value = new StringBuffer("");
+ int count = 0;
+ boolean multiple = false;
+ if(type.equals("LIST_MULTI_SELECT"))
+ multiple = true;
+ //multiple = (selectedItems.size()>1);
+ for(Iterator iter = selectedItems.iterator(); iter.hasNext(); ) {
+ count++;
+ String entry = (String) iter.next();
+ if(count == 1 && multiple)
+ value.append("(");
+ //if(type.equals(FormField.FFT_CHECK_BOX))
+ /*if(type.equals(FormField.FFT_CHECK_BOX))
+ value.append("'"+Utils.oracleSafe(entry)+"'");
+ else*/ if (type.equals(FormField.FFT_LIST_MULTI))
+ value.append("'"+Utils.oracleSafe(entry)+"'");
+ else if(type.equals(FormField.FFT_LIST_BOX))
+ value.append(Utils.oracleSafe(entry));
+ else
+ value.append("'"+Utils.oracleSafe(entry)+"'");
+ if((count < selectedItems.size()) && multiple)
+ value.append(",");
+ if((count == selectedItems.size()) && multiple)
+ value.append(")");
+ }
+
+ if(value.length()>0)
+ return value.toString();
+ else
+ return null;
+ }
+
+public String parseAndFillWithCurrentValues(HttpServletRequest request, String sql, FormField source_Formfield) {
+
+ if (getFormFieldList() != null) {
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ String fieldId = fft.getFieldId();
+ String fieldDisplay = getFormFieldDisplayName(fft);
+ String formfield_value = "";
+ List<String> selectedItems = new ArrayList<String>();
+ //Added so that Combo Box in old RAPTOR definition is translated to List box
+ if(fft.getFieldType().equals(FormField.FFT_COMBO_BOX)) {
+ fft.setFieldType(FormField.FFT_LIST_BOX);
+ }
+ if(!fft.getFieldType().equals(FormField.FFT_BLANK)) {
+ //if(source_Formfield==null || (source_Formfield!=null && !fft.getFieldId().equals(source_Formfield.getFieldName()))) {
+ // Add oracle safe
+ // Add param base sql
+ if(fft.getFieldType().equals(FormField.FFT_LIST_MULTI) || fft.getFieldType().equals(FormField.FFT_CHECK_BOX)) {
+ if(request.getParameterValues(fieldId)!=null && request.getParameterValues(fieldId).length > 0) {
+
+ selectedItems = Arrays.asList(request.getParameterValues(fieldId));
+ formfield_value = formatSelectedItems(selectedItems, fft.getFieldType());
+ } else {
+ formfield_value = "";
+ }
+ } else if(fft.getFieldType().equals(FormField.FFT_RADIO_BTN)) {
+ if(request.getParameter(fieldId)!=null) {
+ formfield_value = request.getParameter(fieldId);
+ } else {
+ formfield_value = "";
+ }
+ } else if (fft.getFieldType().equals(FormField.FFT_HIDDEN)) {
+ if(request.getParameter(fieldId)!=null) {
+ formfield_value = request.getParameter(fieldId);
+ } else {
+ formfield_value = "";
+ }
+ } else if((fft.getFieldType().equals(FormField.FFT_TEXT) || fft.getFieldType().equals(FormField.FFT_TEXTAREA)) &&
+ (!fft.getValidationType().equals(FormField.VT_DATE) && !fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)&&
+ !fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) && !fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) ) {
+ if(request.getParameter(fieldId)!=null) {
+ formfield_value = request.getParameter(fieldId);
+ } else {
+ formfield_value = "";
+ }
+ } else if (fft.getValidationType().equals(FormField.VT_DATE) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)||
+ fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ /*if(formGrid.hasFellow(fieldId, true)) {
+ Datebox tb = (Datebox) formGrid.getFellowIfAny(fieldId, true);
+ try {
+ formfield_value = tb.getText();
+ } catch (WrongValueException ex) {
+ formfield_value = "";
+ }
+ if(AppUtils.nvl(formfield_value).length() > 0) {
+ if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)) {
+ if(formGrid.hasFellow(fieldId+"_Hr", true)) {
+ Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
+ formfield_value = formfield_value + " " + hiddenLbHr.getValue();
+ }
+ } else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN)) {
+ if(formGrid.hasFellow(fieldId+"_Min", true)) {
+ Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
+ //formfield_value = formfield_value + " " + hiddenLbHr.getValue();
+ Label hiddenLbMin = (Label) formGrid.getFellowIfAny(fieldId+"_Min", true);
+ formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue();
+
+ }
+ } else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ if(formGrid.hasFellow(fieldId+"_Sec", true)) {
+ Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
+ //formfield_value = formfield_value + " " + hiddenLbHr.getValue();
+ Label hiddenLbMin = (Label) formGrid.getFellowIfAny(fieldId+"_Min", true);
+ //formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue();
+ Label hiddenLbSec = (Label) formGrid.getFellowIfAny(fieldId+"_Sec", true);
+ formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue()+ ":" +hiddenLbSec.getValue();
+
+ }
+ }
+ }
+
+ } else {
+ formfield_value = "";
+ }*/
+ } else if ((fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)||
+ fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC))) {
+ /*if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)||
+ fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)) {
+ if(formGrid.hasFellow(fieldId+"_Hr", true)) {
+ Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
+ formfield_value = formfield_value + " " + hiddenLbHr.getValue();
+ }
+ } else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN)) {
+ if(formGrid.hasFellow(fieldId+"_Min", true)) {
+ Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
+ //formfield_value = formfield_value + " " + hiddenLbHr.getValue();
+ Label hiddenLbMin = (Label) formGrid.getFellowIfAny(fieldId+"_Min", true);
+ formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue();
+
+ }
+ } else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ if(formGrid.hasFellow(fieldId+"_Sec", true)) {
+ Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
+ //formfield_value = formfield_value + " " + hiddenLbHr.getValue();
+ Label hiddenLbMin = (Label) formGrid.getFellowIfAny(fieldId+"_Min", true);
+ //formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue();
+ Label hiddenLbSec = (Label) formGrid.getFellowIfAny(fieldId+"_Sec", true);
+ formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue()+ ":" +hiddenLbSec.getValue();
+
+ }
+ }
+
+ } */
+ } else if (fft.getFieldType().equals(FormField.FFT_TEXT_W_POPUP)) {
+ if(request.getParameter(fieldId)!=null) {
+ formfield_value = request.getParameter(fieldId);
+ } else {
+ formfield_value = "";
+ }
+ } else if (fft.getFieldType().equals(FormField.FFT_LIST_BOX)) {
+ if(request.getParameter(fieldId)!=null) {
+ formfield_value = request.getParameter(fieldId);
+ } else {
+ formfield_value = "";
+ }
+ //}
+ }
+ if(nvl(formfield_value).length()>0) {
+ sql = Utils.replaceInString(sql, fieldDisplay, formfield_value);
+ } else {
+ sql = Utils.replaceInString(sql, "'"+fieldDisplay+"'", "null");
+ sql = Utils.replaceInString(sql, fieldDisplay, "null");
+ //sql = Utils.replaceInString(sql, fieldDisplay, "''");
+ }
+ } // for
+ }
+ }
+ return sql;
+ }
+ public String parseAndFillReq_Session_UserValues(HttpServletRequest request, String sql, String user_id) {
+ HttpSession session = request.getSession();
+
+ String[] reqParameters = Globals.getRequestParams().split(",");
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ String[] scheduleSessionParameters = Globals.getSessionParamsForScheduling().split(",");
+
+
+ if(AppUtils.nvl(sql).length()>0) {
+ for (int i = 0; i < reqParameters.length; i++) {
+ if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
+ else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+
+ for (int i = 0; i < scheduleSessionParameters.length; i++) {
+ //debugLogger.debug(" Session " + " scheduleSessionParameters[i] " + scheduleSessionParameters[i].toUpperCase() + " " + request.getParameter(scheduleSessionParameters[i]));
+ if(request.getParameter(scheduleSessionParameters[i])!=null && request.getParameter(scheduleSessionParameters[i]).trim().length()>0 )
+ sql = Utils.replaceInString(sql, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
+ if(request.getAttribute(scheduleSessionParameters[i])!=null && ((String)request.getAttribute(scheduleSessionParameters[i])).trim().length()>0 )
+ sql = Utils.replaceInString(sql, "[" + scheduleSessionParameters[i].toUpperCase()+"]", (String) request.getAttribute(scheduleSessionParameters[i]) );
+
+ }
+
+ for (int i = 0; i < sessionParameters.length; i++) {
+ //if(!sessionParameters[i].startsWith("ff"))
+ //fieldSQL = Utils.replaceInString(fieldSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i].toUpperCase()) );
+ //else {
+ if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0) {
+ //debugLogger.debug(" Session " + " sessionParameters[i] " + sessionParameters[i] + " " + (String)session.getAttribute(sessionParameters[i]));
+ sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+ }
+ // }
+ }
+ sql = Utils.replaceInString(sql, "[USERID]", user_id);
+ sql = Utils.replaceInString(sql, "[USER_ID]", user_id);
+ sql = Utils.replaceInString(sql, "[LOGGED_USERID]", user_id);
+
+ }
+ return sql;
+ }
+
+} // ReportRuntime