2 * ============LICENSE_START==========================================
4 * ===================================================================
5 * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6 * ===================================================================
8 * Unless otherwise specified, all software contained herein is licensed
9 * under the Apache License, Version 2.0 (the "License");
10 * you may not use this software except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
21 * Unless otherwise specified, all documentation contained herein is licensed
22 * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
23 * you may not use this documentation except in compliance with the License.
24 * You may obtain a copy of the License at
26 * https://creativecommons.org/licenses/by/4.0/
28 * Unless required by applicable law or agreed to in writing, documentation
29 * distributed under the License is distributed on an "AS IS" BASIS,
30 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31 * See the License for the specific language governing permissions and
32 * limitations under the License.
34 * ============LICENSE_END============================================
38 package org.onap.portalsdk.analytics.model.runtime;
40 import java.io.Serializable;
41 import java.sql.Connection;
42 import java.text.SimpleDateFormat;
43 import java.util.ArrayList;
44 import java.util.Arrays;
45 import java.util.Date;
46 import java.util.Enumeration;
47 import java.util.HashMap;
48 import java.util.Iterator;
49 import java.util.List;
51 import java.util.StringTokenizer;
52 import java.util.Vector;
53 import java.util.regex.Matcher;
54 import java.util.regex.Pattern;
56 import javax.servlet.http.HttpServletRequest;
57 import javax.servlet.http.HttpSession;
59 import org.onap.portalsdk.analytics.error.RaptorException;
60 import org.onap.portalsdk.analytics.model.DataCache;
61 import org.onap.portalsdk.analytics.model.ReportHandler;
62 import org.onap.portalsdk.analytics.model.ReportLoader;
63 import org.onap.portalsdk.analytics.model.base.IdNameList;
64 import org.onap.portalsdk.analytics.model.base.IdNameSql;
65 import org.onap.portalsdk.analytics.model.base.IdNameValue;
66 import org.onap.portalsdk.analytics.model.base.ReportWrapper;
67 import org.onap.portalsdk.analytics.model.definition.Marker;
68 import org.onap.portalsdk.analytics.system.AppUtils;
69 import org.onap.portalsdk.analytics.system.ConnectionUtils;
70 import org.onap.portalsdk.analytics.system.DbUtils;
71 import org.onap.portalsdk.analytics.system.Globals;
72 import org.onap.portalsdk.analytics.util.AppConstants;
73 import org.onap.portalsdk.analytics.util.DataSet;
74 import org.onap.portalsdk.analytics.util.Utils;
75 import org.onap.portalsdk.analytics.view.ColumnHeader;
76 import org.onap.portalsdk.analytics.view.ColumnHeaderRow;
77 import org.onap.portalsdk.analytics.view.CrossTabOrderManager;
78 import org.onap.portalsdk.analytics.view.CrossTabTotalValue;
79 import org.onap.portalsdk.analytics.view.DataRow;
80 import org.onap.portalsdk.analytics.view.DataValue;
81 import org.onap.portalsdk.analytics.view.ReportData;
82 import org.onap.portalsdk.analytics.view.RowHeaderCol;
83 import org.onap.portalsdk.analytics.xmlobj.CustomReportType;
84 import org.onap.portalsdk.analytics.xmlobj.DataColumnType;
85 import org.onap.portalsdk.analytics.xmlobj.FormFieldType;
86 import org.onap.portalsdk.analytics.xmlobj.ObjectFactory;
87 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
88 import org.onap.portalsdk.core.util.SecurityCodecUtil;
89 import org.owasp.esapi.ESAPI;
91 import com.fasterxml.jackson.databind.ObjectMapper;
95 * This class is part of <B><I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I></B><BR/>
98 * --------------------------------------------------------------------------------------------------<BR/>
99 * <B>ReportRuntime.java</B> - This class involves in running, downloading RAPTOR reports.
100 * --------------------------------------------------------------------------------------------------<BR/>
103 * <U>Change Log</U><BR/><BR/>
105 * 27-Aug-2009 : Version 8.5 (Sundar); <UL><LI>Order by logic is restored for DAYTONA.</LI></UL>
106 * 13-Aug-2009 : Version 8.5 (Sundar); <UL><LI>Removing order by logic is rollbacked.</LI></UL>
107 * 22-Jun-2009 : Version 8.4 (Sundar); <UL><LI>Bug while parsing SQL for text download is fixed.</LI></UL>
111 public class ReportRuntime extends ReportWrapper implements Cloneable, Serializable {
113 private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportRuntime.class);
115 //TODO DELETE IF PARSE SQL is not working
116 private int curSQLParsePos = 0;
118 private String xmlFileURL = null;
120 private String xmlFileName = null;
122 private String flatFileName = null;
124 private String excelPageFileName = null;
126 private int reportDataSize = -1;
128 private boolean displayChart = true;
130 private boolean displayForm = true;
132 private boolean displayContent = true;
134 private boolean reportRunLogged = false; // Used to avoid multiple
135 // entries in the report log
136 // when executing with different
137 // params or going to next page
139 private DataSet chartDataCache = null;
141 private ReportData pageDataCache = null;
143 private int cachedPageNo = -1;
145 private String cachedSQL = null; // For display purposes only
147 private String wholeSQL = null; // For display purposes only
149 private String totalSql = null; // For display purposes only
151 private ReportParamValues reportParamValues = null;
153 private ReportParamValuesForPDFExcel reportParamValuesFPE = null;
155 private ReportFormFields reportFormFields = null;
157 private VisualManager visualManager = null;
159 private CrossTabOrderManager crossTabOrderManager = null;
161 private boolean displayColTotals = false;
163 private boolean displayRowTotals = false;
165 private DataRow colDataTotalsLinear = null;
167 private Vector colDataTotalsCrosstab = null;
169 private Vector rowDataTotalsCrosstab = null;
171 private String grandTotalCrosstab = null;
173 public static int DISPLAY_DATA_ONLY = 1;
174 public static int DISPLAY_CHART_ONLY = 2;
175 public static int DISPLAY_CHART_AND_DATA = 3;
177 public static final int DATE_OPTION_MONTHLY = 1;
178 public static final int DATE_OPTION_YEARLY = 2;
179 public static final int DATE_OPTION_DAILY = 3;
182 private int DISPLAY_MODE = 0;
184 private int DATE_OPTION = -1;
187 public void setReportFormFields(ReportFormFields reportFormFields) {
188 this.reportFormFields = reportFormFields;
193 * private ReportRuntime(CustomReport cr, String reportID,
194 * HttpServletRequest request) { super(cr, reportID);
196 * reportParamValues = new ReportParamValues(this); reportFormFields = new
197 * ReportFormFields(this);
199 * if(request!=null) setParamValues(request); } // ReportRuntime
201 private ReportRuntime(CustomReportType crType, String reportID, HttpServletRequest request,
202 String ownerID, String createID, String createDate, String updateID,
203 String updateDate, String menuID, boolean menuApproved) throws RaptorException {
204 super(crType, reportID, ownerID, createID, createDate, updateID, updateDate, menuID,
206 initializeReportRuntime(request);
209 public ReportRuntime(ReportWrapper rw) throws RaptorException {
213 public ReportRuntime(ReportWrapper rw, HttpServletRequest request)throws RaptorException {
215 initializeReportRuntime(request);
218 private void initializeReportRuntime(HttpServletRequest request) throws RaptorException {
219 reportFormFields = new ReportFormFields(this, request);
220 setParamValues(request, true, true);
222 visualManager = new VisualManager();
223 } // initializeReportRuntime
225 // public void setReportFormFields(HttpServletRequest request) {
226 // reportFormFields = new ReportFormFields(this, request);
227 // setParamValues(request, true, true);
230 public static ReportRuntime unmarshal(String reportXML, String reportID)
231 throws RaptorException {
232 return unmarshal(reportXML, reportID, null);
235 public static ReportRuntime unmarshal(String reportXML, String reportID,
236 HttpServletRequest request) throws RaptorException {
237 CustomReportType crType = ReportWrapper.unmarshalCR(reportXML);
238 ObjectFactory objFactory = new ObjectFactory();
240 logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report [" + reportID + "]: XML unmarshalled"));
242 return new ReportRuntime(crType, reportID, request, null, null, null, null, null, null,
247 public String getXmlFileURL() {
251 public String getXmlFileName() {
255 public String getFlatFileName() {
259 public String getExcelPageFileName() {
260 return excelPageFileName;
263 public int getReportDataSize() {
264 return reportDataSize;
267 public boolean getDisplayChart() {
271 public boolean getDisplayForm() {
275 public boolean getDisplayContent() {
276 return displayContent;
279 public int getCachedPageNo() {
283 public String getCachedSQL() {
287 public boolean isDashboardType() throws RaptorException {
288 return ReportLoader.isDashboardType(getReportID());
292 public void setXmlFileURL(String xmlFileURL) {
293 this.xmlFileURL = xmlFileURL;
296 public void setXmlFileName(String xmlFileName) {
297 this.xmlFileName = xmlFileName;
300 public void setFlatFileName(String flatFileName) {
301 this.flatFileName = flatFileName;
304 public void setExcelPageFileName(String excelPageFileName) {
305 this.excelPageFileName = excelPageFileName;
308 /*private*/ public void setReportDataSize(int reportDataSize) {
309 this.reportDataSize = reportDataSize;
312 private void setDisplayForm(boolean displayForm) {
313 this.displayForm = displayForm;
316 private void setDisplayContent(boolean displayContent) {
317 this.displayContent = displayContent;
320 public void setDisplayFlags(boolean isFirstAccess, boolean forceDisplayContent) {
322 setDisplayForm(true);
324 if (forceDisplayContent)
325 setDisplayContent(true);
326 else if (Globals.getDisplayFormBeforeRun())
328 setDisplayContent(false);
330 setDisplayContent(true);
332 setDisplayContent(true);
334 setDisplayContent(true);
336 if (Globals.getIncludeFormWithData())
337 setDisplayForm(true);
338 else if (Globals.getDisplayFormBeforeRun())
339 setDisplayForm(false);
341 setDisplayForm(true);
345 public void logReportRun(String userID, String executionTime, String formFields) throws RaptorException {
349 ReportLoader.createReportLogEntry(null, reportID, userID, AppConstants.RLA_RUN,executionTime,formFields );
350 reportRunLogged = true;
353 public void logReportExecutionTime(String userId, String executionTime, String action, String formFields) throws RaptorException {
354 ReportLoader.createReportLogEntryForExecutionTime(null, reportID, userId,executionTime , action, formFields);
357 public void logReportExecutionTimeFromLogList (String userId, String executionTime, String formFields) throws RaptorException {
358 ReportLoader.createReportLogEntryForExecutionTime(null, reportID, userId,executionTime , AppConstants.RLA_FROM_LOG, formFields);
361 public void resetVisualSettings() {
362 boolean haveToResetCachedData = (visualManager.getSortByColId().length() > 0);
363 visualManager = new VisualManager();
365 if (haveToResetCachedData)
366 pageDataCache = null;
368 if (pageDataCache != null)
369 pageDataCache.resetVisualSettings();
370 } // resetVisualSettings
372 /** ************** ReportParamValues processing *************** */
374 public boolean setParamValues(HttpServletRequest request, boolean resetParams, boolean refresh) throws RaptorException {
375 boolean paramsUpdated = false;
377 reportFormFields = new ReportFormFields(this, request);
378 reportParamValues = new ReportParamValues(reportFormFields, getReportDefType());
379 // This is called even in the wizard page. Hence this condition.
380 if((ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)!=null)
381 reportParamValuesFPE = new ReportParamValuesForPDFExcel(reportFormFields, getReportDefType());
382 paramsUpdated = true;
384 reportRunLogged = false;
385 } else if (request != null) {
386 paramsUpdated = reportParamValues.setParamValues(request,refresh);
388 // This is called even in the wizard page. Hence this condition.
389 if((ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)!=null) {
390 if(reportParamValuesFPE!=null) reportParamValuesFPE.setParamValues(request,refresh);
392 reportParamValuesFPE = new ReportParamValuesForPDFExcel(reportFormFields, getReportDefType());
393 reportParamValuesFPE.setParamValues(request,refresh);
396 reportFormFields = new ReportFormFields(this, request);
397 //added below two lines for dashboard default value
398 reportParamValues = new ReportParamValues(reportFormFields, getReportDefType());
399 reportParamValues.setParamValues(request,refresh);
401 reportParamValuesFPE = new ReportParamValuesForPDFExcel(reportFormFields, getReportDefType());
402 reportParamValuesFPE.setParamValues(request,refresh);
407 setReportDataSize(-1);
408 chartDataCache = null;
409 pageDataCache = null;
412 crossTabOrderManager = null;
414 colDataTotalsLinear = null;
415 colDataTotalsCrosstab = null;
416 rowDataTotalsCrosstab = null;
417 grandTotalCrosstab = null;
419 resetVisualSettings();
422 displayChart = (request.getParameter(AppConstants.RI_DISPLAY_CHART) == null) ? !isDisplayOptionHideChart() : request.getParameter("display_chart")
425 return paramsUpdated;
428 public String getParamValue(String key) {
429 //reportParamValues.printValues();
430 return reportParamValues.getParamValue(key);
433 public String getParamDisplayValue(String key) {
434 //reportParamValues.printValues();
435 return reportParamValues.getParamDisplayValue(key);
438 public Enumeration getParamKeys() {
439 return reportParamValues.keys();
442 public Enumeration getParamKeysForPDFExcel() {
443 return reportParamValuesFPE.keys();
446 public String getParamValueForPDFExcel(String key) {
447 return reportParamValuesFPE.getParamValue(key);
450 public ArrayList getParamNameValuePairs() {
451 ArrayList paramList = new ArrayList(getReportFormFields().size());
452 for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
453 FormField ff = (FormField) iter.next();
454 paramList.add(new IdNameValue(ff.getFieldDisplayName(), reportParamValues
455 .getParamDisplayValue(ff.getFieldName())));
458 } // getParamNameValuePairs
460 public ArrayList getParamNameValuePairsforPDFExcel(HttpServletRequest request, int type /*excel =1; pdf=2*/) {
461 javax.servlet.http.HttpSession session = request.getSession();
462 ArrayList paramList = new ArrayList(getReportFormFields().size());
463 if(session.getAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO)!=null) {
464 paramList = (ArrayList) session.getAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
465 if(paramList!=null && paramList.size()>0)
468 //System.out.println(" getParamNamePairs type " + type + " " + Globals.customizeFormFieldInfo());
469 if ( reportParamValuesFPE == null) {
470 reportParamValuesFPE = new ReportParamValuesForPDFExcel(reportFormFields, getReportDefType());
471 reportParamValuesFPE.setParamValues(request,true);
474 String valueString = "";
475 for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
476 FormField ff = (FormField) iter.next();
477 if(ff.isVisible() && /*!ff.getFieldType().equals(FormField.FFT_HIDDEN) &&*/ type == 1){
478 valueString = reportParamValuesFPE.getParamDisplayValue(ff.getFieldName());
479 } else if(ff.isVisible() && type != 1) {
480 valueString = reportParamValuesFPE.getParamDisplayValue(ff.getFieldName());
482 if(valueString.equalsIgnoreCase("NULL"))
484 paramList.add(new IdNameValue(ff.getFieldDisplayName(), valueString));
488 String pdfAttachmentKey = AppUtils.getRequestValue(request, "pdfAttachmentKey");
489 boolean isSchedule = false;
490 if(pdfAttachmentKey != null)
492 if(Globals.customizeFormFieldInfo() && type == 2) {
493 String[] sessionParameters = Globals.getSessionParams().split(",");
495 if(session != null && !isSchedule ) {
496 session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
497 for (int i = 0; i < sessionParameters.length; i++) {
498 if(session.getAttribute(sessionParameters[i])!=null)
499 paramList.add(new IdNameValue(sessionParameters[i].toUpperCase(), (String)session.getAttribute(sessionParameters[i])));
504 //debugLogger.debug("Globals " + Globals.getSessionParamsForScheduling());
505 String[] scheduleSessionParam = Globals.getSessionParamsForScheduling().split(",");
506 for (int i = 0; i < scheduleSessionParam.length; i++) {
507 //debugLogger.debug(" scheduleSessionParam[i] " + scheduleSessionParam[i] + " " + request.getParameter(scheduleSessionParam[i]) );
508 if(request.getParameter(scheduleSessionParam[i])!=null)
509 paramList.add(new IdNameValue(ESAPI.encoder().canonicalize(scheduleSessionParam[i].toUpperCase()), ESAPI.encoder().canonicalize(request.getParameter(scheduleSessionParam[i]))));
514 SimpleDateFormat oracleDateFormat = new SimpleDateFormat("MM/dd/yyyy kk:mm:ss");
515 Date sysdate = oracleDateFormat.parse(ReportLoader.getSystemDateTime());
516 SimpleDateFormat dtimestamp = new SimpleDateFormat(Globals.getScheduleDatePattern());
517 paramList.add(new IdNameValue("DATE", dtimestamp.format(sysdate)+" "+Globals.getTimeZone()));
518 } catch(Exception ex) {}
521 //System.out.println(" In Else getParamNamePairs type " + type);
522 String[] sessionDisplayParameters = Globals.getDisplaySessionParamInPDFEXCEL().split(",");
523 if(session != null && !isSchedule ) {
524 session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
525 for (int i = 0; i < sessionDisplayParameters.length; i++) {
526 String sessionDispParam = sessionDisplayParameters[i];
527 if(nvl(sessionDispParam).length()>0) {
528 String sessionDispParamArr[] = sessionDispParam.split(";");
529 //System.out.println("Session " + sessionDispParamArr[1] + " " + (String)session.getAttribute(sessionDispParamArr[0]));
530 paramList.add(new IdNameValue(sessionDispParamArr[1], nvl((String)session.getAttribute(sessionDispParamArr[0]),"")));
535 String[] scheduleSessionParam = Globals.getDisplayScheduleSessionParamInPDFEXCEL().split(",");
536 for (int i = 0; i < scheduleSessionParam.length; i++) {
537 String scheduleSessionDispParam = scheduleSessionParam[i];
538 if(nvl(scheduleSessionDispParam).length()>0) {
539 String scheduleSessionDispParamArr[] = scheduleSessionDispParam.split(";");
540 paramList.add(new IdNameValue(ESAPI.encoder().canonicalize(scheduleSessionDispParamArr[1]), ESAPI.encoder().canonicalize(nvl(request.getParameter(scheduleSessionDispParamArr[0]),""))));
545 SimpleDateFormat oracleDateFormat = new SimpleDateFormat("MM/dd/yyyy kk:mm:ss");
546 Date sysdate = oracleDateFormat.parse(ReportLoader.getSystemDateTime());
547 SimpleDateFormat dtimestamp = new SimpleDateFormat(Globals.getScheduleDatePattern());
548 paramList.add(new IdNameValue("Report Date/Time", dtimestamp.format(sysdate)+" "+Globals.getTimeZone()));
549 } catch(Exception ex) {}
553 for (int i = 0; i < paramList.size(); i++) {
554 IdNameValue value = (IdNameValue) paramList.get(i);
555 String name = value.getName().replaceAll(",","~");
558 //request.getSession().setAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO, paramList);
560 } // getParamNameValuePairs
562 /** ************** ReportFormFields processing *************** */
564 public String getFormFieldComments(HttpServletRequest request) {
566 StringBuffer st = new StringBuffer("");
567 if(getFormFieldList()!=null){
568 comment = nvl(getFormFieldList().getComment());
570 if(comment.length()>0) {
571 al = getParamNameValuePairsforPDFExcel(request, 2);
573 //st = new StringBuffer(comment);
574 for (int i=0; i < al.size(); i++) {
575 IdNameValue idNameValue = (IdNameValue)al.get(i);
576 if(nvl(idNameValue.getId()).equals("DATE"))
577 st.append("<b>Date/Time Report Run:</b>"+ idNameValue.getName() +"<br></br>");
580 for (int i=0; i < al.size(); i++) {
581 IdNameValue idNameValue = (IdNameValue)al.get(i);
582 comment = Utils.replaceInString(comment, "["+ idNameValue.getId()+"]", idNameValue.getName());
589 return st.toString();
592 public boolean needFormInput() {
593 return reportFormFields.getFieldCount() > 0;
596 public FormField getFormField(String fieldName) {
597 return reportFormFields.getFormField(fieldName);
600 public ReportFormFields getReportFormFields() {
601 return reportFormFields;
602 } // getReportFormFields
604 public void setChartDataCache(DataSet chartDataCache) {
605 this.chartDataCache = chartDataCache;
609 /** ************** Report Data processing *************** */
610 public DataSet loadChartData(String userId, HttpServletRequest request) throws RaptorException {
611 if (nvl(getChartType()).length() == 0)
613 if (!getDisplayChart())
616 DataSet ds = chartDataCache;
619 sql = generateChartSQL(reportParamValues, userId, request);
620 String dbInfo = getDBInfo();
621 ds = ConnectionUtils.getDataSet(sql, dbInfo);
622 if (Globals.getCacheChartData())
629 public String getReportDataSQL(String userId, int downloadLimit, HttpServletRequest request) throws RaptorException {
630 String reportSQL = "";
631 if(doesReportContainsGroupFormField()) {
632 reportSQL = generateSubsetSQL(0, downloadLimit,userId, request, true, reportParamValues);
634 reportSQL = generateSubsetSQL(0, downloadLimit,userId, request, false, reportParamValues);
638 public ReportData loadReportData(int pageNo, String userId, int downloadLimit, HttpServletRequest request, boolean download) throws RaptorException {
639 ReportData rd = null;
640 boolean isGoBackAction = AppUtils.getRequestFlag(request, AppConstants.RI_GO_BACK);
642 if (pageNo == cachedPageNo && pageDataCache != null)
645 if(isGoBackAction && rd!=null) return rd;
646 if (rd == null) { // Commented So that Data is refreshed from DB again
647 if (getReportDataSize() < 0)
651 if (getReportType().equals(AppConstants.RT_CROSSTAB))
652 rd = loadCrossTabReportData(pageNo, userId, downloadLimit, request, download);
653 else if (getReportType().equals(AppConstants.RT_LINEAR))
654 rd = loadLinearReportData(pageNo, userId, downloadLimit, request, download);
656 throw new RuntimeException(
657 "[ReportRuntime.loadReportData] Invalid report type");
660 if (Globals.getCacheCurPageData()) {
662 cachedPageNo = pageNo;
664 } // if // Commented So that Data is refreshed from DB again
669 private ReportData loadCrossTabReportData(int pageNo, String userId, int downloadLimit, HttpServletRequest request, boolean download) throws RaptorException {
670 String reportSQL = generateSQL(reportParamValues, userId, request);
671 setWholeSQL(reportSQL);
672 cachedSQL = reportSQL;
673 wholeSQL = reportSQL;
674 List reportCols = getAllColumns();
675 // replace the request parameter specified in the drill down
676 DataColumnType dataColumnRequest = getCrossTabValueColumn();
677 reportSQL = parseReportSQLForDrillDownParams(reportSQL, dataColumnRequest, request);
682 String dbInfo = getDBInfo();
683 StringBuffer colNames = new StringBuffer();
684 StringBuffer colExtraIdNames = new StringBuffer();
685 StringBuffer colExtraDateNames = new StringBuffer();
688 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
689 DataColumnType dc = (DataColumnType) iter.next();
690 //TODO: commented if (dc.isVisible()) {
691 if (colNames.length() > 0)
692 colNames.append(", ");
693 colNames.append(dc.getColId());
694 //TODO uncomment if it's not working} // if
696 // Checking for extra fields necessary for drill-down
697 if (nvl(dc.getDrillDownURL()).length() > 0) {
698 System.out.println("Drilldown URL " + dc.getDrillDownURL());
703 if (reportSQL.toUpperCase().indexOf("GROUP BY ") < 0)
704 colNames.append(colExtraIdNames.toString());
705 colNames.append(colExtraDateNames.toString());
706 //reportSQL = " SELECT ROWNUM rnum, "
707 // + colNames.toString() + " FROM (" + reportSQL + ") ";
709 String rSQL = Globals.getLoadCrosstabReportData();
710 rSQL = rSQL.replace("[colNames.toString()]", colNames.toString());
711 rSQL = rSQL.replace("[reportSQL]", reportSQL);
713 setWholeSQL(reportSQL);
714 if (crossTabOrderManager == null)
715 crossTabOrderManager = new CrossTabOrderManager(this, userId,request);
716 ds = ConnectionUtils.getDataSet(reportSQL, dbInfo);
718 ReportData rd = new ReportData(pageNo, false);
719 ReportFormFields childReportFormFields = null;
720 if(doesReportContainsGroupFormField()) {
721 List reportCols1 = getAllColumns();
722 reportCols = new Vector();
724 for (Iterator iter = reportCols1.iterator(); iter.hasNext();) {
725 DataColumnType dct = (DataColumnType) iter.next();
726 for (int k=0; k<ds.getColumnCount(); k++) {
727 if(dct.getColId().toUpperCase().trim().equals(ds.getColumnName(k).trim())) {
734 if (getFormFieldList() != null) {
735 String paramValue = "";
736 for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
737 FormFieldType fft = (FormFieldType) iter.next();
738 if(fft.isGroupFormField()!=null && fft.isGroupFormField().booleanValue()) {
739 paramValue = Utils.oracleSafe(nvl(reportParamValues
740 .getParamValue(fft.getFieldId())));
742 for (Iterator iter1 = reportCols1.iterator(); iter1.hasNext();) {
743 DataColumnType dct = (DataColumnType) iter1.next();
744 if(("["+fft.getFieldName()+ "]").equals(dct.getColName().trim())) {
745 dct.setDisplayName(paramValue);
756 int dataColumnIdx = (rd.reportRowHeaderCols.size() + rd.reportColumnHeaderRows.size())-1;
757 DataColumnType dataColumn = getCrossTabValueColumn();
759 String columnValue = "";
762 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
763 DataColumnType dct = (DataColumnType) iter.next();
765 if (nvl(dct.getDrillDownURL()).length() > 0) {
766 childReportFormFields = getChildReportFormFields(request,dct.getDrillDownURL());
769 if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_ROW)) {
770 RowHeaderCol rhc = new RowHeaderCol();
771 rhc.setColumnTitle(dct.getDisplayName());
772 // rhc.setColumnWidth("10%");
773 //rhc.setColumnWidth(dct.getDisplayWidth() + "%");
774 if(nvl(dct.getDisplayWidthInPxls()).length()<=0) {
775 dct.setDisplayWidthInPxls("100px");
777 if(dct.getDisplayWidthInPxls().endsWith("px"))
778 rhc.setColumnWidth(dct.getDisplayWidthInPxls());
780 rhc.setColumnWidth(dct.getDisplayWidthInPxls()+"px");
782 rhc.setAlignment(dct.getDisplayAlignment());
783 rhc.setDisplayHeaderAlignment(dct.getDisplayHeaderAlignment());
784 rhc.setNowrap(nvl(dataColumn.getNowrap(),"null").equals("false")?"null":nvl(dataColumn.getNowrap(),"null"));
785 rd.reportRowHeaderCols.addRowHeaderCol(rhc);
786 } else if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_COLUMN)) {
787 ColumnHeaderRow chr = new ColumnHeaderRow();
788 chr.setAlignment(dct.getDisplayHeaderAlignment());
789 chr.setRowHeight("15");
790 if(nvl(dct.getDisplayWidthInPxls()).length()<=0) {
791 dct.setDisplayWidthInPxls("80px");
793 if(dct.getDisplayWidthInPxls().endsWith("px"))
794 chr.setDisplayWidth(dct.getDisplayWidthInPxls());
796 chr.setDisplayWidth(dct.getDisplayWidthInPxls()+"px");
798 rd.reportColumnHeaderRows.addColumnHeaderRow(chr);
799 } else if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_VALUE)) {
800 columnValue = dct.getColId();
802 if(!dct.getColId().toLowerCase().endsWith("_sort")) {
803 RowHeaderCol rhc = new RowHeaderCol();
804 rhc.setVisible(false);
805 rd.reportRowHeaderCols.addRowHeaderCol(rhc);
810 //int dataColumnIdx = getCrossTabValueColumnIndex();
811 FormatProcessor formatProcessor = new FormatProcessor(getSemaphoreById(dataColumn
813 getReportDefType().equals(AppConstants.RD_SQL_BASED) ? AppConstants.CT_NUMBER
814 : dataColumn.getColType(), dataColumn.getColFormat(), false);
815 List dataList = new ArrayList();
816 /* //fillup all rows based on rowheaders
817 Vector rowHeaders = crossTabOrderManager.getRowHeaderValues();
818 CrossTabColumnValues crossTabRowValues;
820 for (int i = 0; i < rowHeaders.size(); i++) {
821 if((i+1)==rowHeaders.size()) {
822 crossTabRowValues = (CrossTabColumnValues) rowHeaders.get(i);
823 size = crossTabRowValues.getValuesCount();
827 for (int i = 0; i < size; i++) {
828 dataList.add(new DataRow());
831 for (int i = 0; i < ds.getRowCount(); i++) {
832 Vector rValues = new Vector();
833 Vector cValues = new Vector();
834 Vector cValuesSort = new Vector();
837 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
839 DataColumnType dct = (DataColumnType) iter.next();
840 if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_ROW))
841 rValues.add(addDataValue(dct, ds.getString(i, dct.getColId())));
842 if (nvl(dct.getCrossTabValue()).trim().length()<=0 && !dct.getColId().toLowerCase().endsWith("_sort"))
843 rValues.add(addDataValue(dct, ds.getString(i, dct.getColId())));
844 if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_COLUMN)) {
845 cValues.add(addDataValue(dct, ds.getString(i, dct.getColId())));
846 if(getColumnById(dct.getColId().toLowerCase()+"_sort")!=null)
847 cValuesSort.add(addDataValue(dct, new Integer(ds.getString(i, dct.getColId()+"_sort")).toString()));
851 } catch (ArrayIndexOutOfBoundsException ex ) {continue;}
852 catch (NumberFormatException ex1) {
853 ex1.printStackTrace();
858 DataValue dv = new DataValue();
859 dv.setDisplayValue(ds.getString(i, columnValue));
860 if (nvl(dataColumn.getCrossTabValue()).trim().length()<=0)
861 dv.setVisible(false);
862 dv.setAlignment(dataColumn.getDisplayAlignment());
863 dv.setDisplayTotal(dataColumn.getDisplayTotal());
864 dv.setColName(dataColumn.getColName());
865 dv.setDisplayName(dataColumn.getDisplayName());
866 dv.setColId(dataColumn.getColId());
867 dv.setNowrap(nvl(dataColumn.getNowrap(),"null").equals("false")?"null":nvl(dataColumn.getNowrap(),"null"));
868 /*StringBuffer indentation = new StringBuffer("");
869 if(dataColumn.getIndentation()!=null && dataColumn.getIndentation().intValue()>0) {
870 for (int indent=0; indent < dataColumn.getIndentation(); indent++) {
871 indentation.append("\t");
873 dv.setNowrap("true");
875 dv.setIndentation(indentation.toString());*/
877 if (nvl(dataColumn.getDrillDownURL()).length() > 0) {
878 if(dv.getDisplayValue().length() > 0) {
879 dv.setDrillDownURL(parseDrillDownURL(i, /* dataColumnIdx, */ds, dataColumn,request, childReportFormFields));
880 dv.setDrillDowninPoPUp(dataColumn.isDrillinPoPUp()!=null?dataColumn.isDrillinPoPUp():false);
882 if (dv.getDisplayValue().length() == 0) {
883 //dv.setDisplayValue("[NULL]");
884 dv.setDisplayValue("");
888 rd.setDataValue(rValues, cValues, cValuesSort.size()==0?null:cValuesSort, dv, formatProcessor, crossTabOrderManager, dataList);
890 rd.setReportDataList(dataList);
891 /*if (getReportDataSize() < 0)
892 setReportDataSize(rd.getDataRowCount());*/
895 rd.truncateData(pageNo * getPageSize(), (pageNo + 1) * getPageSize() - 1);
897 if( downloadLimit != -1)
898 rd.truncateData(0, downloadLimit - 1);
900 rd.truncateData(0, -1);
903 if (colDataTotalsCrosstab == null)
904 colDataTotalsCrosstab = generateDataTotalsCrossTab(AppConstants.CV_COLUMN, userId,request);
905 if (displayColTotals && colDataTotalsCrosstab != null)
906 rd.setColumnDataTotalsCrossTab(colDataTotalsCrosstab, dataColumn
907 .getDisplayAlignment(), getCrossTabDisplayTotal(AppConstants.CV_COLUMN),
908 crossTabOrderManager, dataList);
910 if (rowDataTotalsCrosstab == null)
911 rowDataTotalsCrosstab = generateDataTotalsCrossTab(AppConstants.CV_ROW, userId, request);
912 if (displayRowTotals && rowDataTotalsCrosstab != null)
913 rd.setRowDataTotalsCrossTab(rowDataTotalsCrosstab, dataColumn
914 .getDisplayAlignment(), getCrossTabDisplayTotal(AppConstants.CV_ROW),
915 crossTabOrderManager, dataList);
919 && getCrossTabDisplayTotal(AppConstants.CV_COLUMN).equals(
920 getCrossTabDisplayTotal(AppConstants.CV_ROW))) {
921 // Display grand total
922 if (grandTotalCrosstab == null)
923 grandTotalCrosstab = ((CrossTabTotalValue) generateDataTotalsCrossTab("",
924 userId,request).get(0)).getTotalValue();
925 if (grandTotalCrosstab != null)
926 rd.setGrandTotalCrossTab(Utils.truncateTotalDecimals(grandTotalCrosstab),
927 dataColumn.getDisplayAlignment(),
928 getCrossTabDisplayTotal(AppConstants.CV_COLUMN), dataList);
931 rd.consolidateColumnHeaders(visualManager);
932 //if (Globals.getMergeCrosstabRowHeadings())
933 // rd.consolidateRowHeaders();
934 //rd.addRowNumbers(pageNo, dataList);
936 if (displayColTotals && colDataTotalsCrosstab != null) {
937 String totalLabel = "Total";
938 String colDisplayTotal = getCrossTabDisplayTotal(AppConstants.CV_COLUMN);
939 if (colDisplayTotal.length() > 0
940 && (!colDisplayTotal.equals(AppConstants.TOTAL_SUM_ID)))
941 totalLabel = nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(colDisplayTotal));
942 if (getReportDataSize() > getPageSize())
943 totalLabel += "_nl_(for all pages)";
945 //rd.setCrossTabColumnTotalLabel(totalLabel);
948 //rd.applyVisibility();
949 //Collections.sort((List)dataList, new DataRowComparable());
950 DataRow drInFor1 = null;
951 Vector<DataValue> v1= null, v2 = null;
952 ArrayList<String> temp = new ArrayList<>();
953 if (Globals.getMergeCrosstabRowHeadings()) {
954 for (int i = 0; i < dataList.size(); i++) {
955 drInFor1 = (DataRow)dataList.get(i);
956 drInFor1.setRowNum(i+1);
957 v1 = drInFor1.getRowValues();
958 if(i<dataList.size()-1) {
959 v2 = ((DataRow)dataList.get(i+1)).getRowValues();
961 v2 = ((DataRow)dataList.get(i-1)).getRowValues();
963 for (int j = 0; j < v1.size(); j++) {
965 if(v1.get(j).getDisplayValue().length()>0) { // another ArrayList
966 temp = new ArrayList();
967 temp.add(v1.get(j).getDisplayValue());
969 if(v2!=null && temp.get(j).equals(v2.get(j).getDisplayValue())) {
970 v2.get(j).setDisplayValue("");
976 rd.setReportDataList(dataList);
977 if (getReportDataSize() < 0) {
978 //setReportDataSize(rd.getDataRowCount());
979 setReportDataSize(rd.getReportDataList().size());
983 } // loadCrossTabReportData
986 public DataValue addDataValue(DataColumnType dataColumn, String columnValue) {
987 DataValue dv = new DataValue();
988 dv.setDisplayValue(columnValue);
989 if (nvl(dataColumn.getCrossTabValue()).trim().length()<=0)
990 dv.setVisible(false);
991 dv.setAlignment(dataColumn.getDisplayAlignment());
992 dv.setDisplayTotal(dataColumn.getDisplayTotal());
993 dv.setColName(dataColumn.getColName());
994 dv.setDisplayName(dataColumn.getDisplayName());
995 dv.setColId(dataColumn.getColId());
996 dv.setNowrap(nvl(dataColumn.getNowrap(),"null").equals("false")?"null":nvl(dataColumn.getNowrap(),"null"));
1001 /*private*/ public boolean doesReportContainsGroupFormField() {
1003 if(getFormFieldList()!=null) {
1004 for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
1005 FormFieldType fft = (FormFieldType) iter.next();
1006 if(fft.isGroupFormField()!=null && fft.isGroupFormField().booleanValue()) {
1015 private ReportData loadLinearReportData(int pageNo, String userId, int downloadLimit, HttpServletRequest request, boolean download) throws RaptorException {
1016 String action = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));;
1018 String reportSQL = "";
1020 if(action.endsWith("session")) {
1021 reportSQL = getWholeSQL();
1022 wholeSQL = reportSQL;
1024 reportSQL = generateSQL(reportParamValues, visualManager.getSortByColId(),
1025 visualManager.getSortByAscDesc(), userId, request);
1026 wholeSQL = reportSQL;
1027 setWholeSQL(wholeSQL);
1030 String dbInfo = getDBInfo();
1031 ds = ConnectionUtils.getDataSet(wholeSQL, dbInfo);
1032 setReportDataSize(ds.getRowCount());
1033 //wholeSQL = reportSQL;
1034 HttpSession session = request.getSession();
1035 //debugLogger.debug(" ******** Download Limit ********* " + downloadLimit + " %%%%%%%%%%PAGE " + pageNo );
1036 List reportCols = null;
1037 StringBuffer colNames = new StringBuffer();
1039 if(download && action.endsWith("session")) {
1040 reportCols = getAllColumns();
1041 colNames = new StringBuffer();
1042 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
1044 DataColumnType dc = (DataColumnType) iter.next();
1045 if (colNames.length() > 0)
1046 colNames.append(", ");
1047 colNames.append(dc.getColId());
1052 String pagedSQL = null; // reportSQL;
1054 pagedSQL = generatePagedSQL(pageNo, userId, request, false, null);
1056 pagedSQL = generateSubsetSQL(0, downloadLimit, userId, request, false, null);
1057 // replace the request parameter specified in the drill down
1058 reportCols = getAllColumns();
1059 colNames = new StringBuffer();
1060 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
1062 DataColumnType dc = (DataColumnType) iter.next();
1063 if (colNames.length() > 0)
1064 colNames.append(", ");
1065 colNames.append(dc.getColId());
1066 if (dc.isVisible()) {
1067 reportSQL = parseReportSQLForDrillDownParams(reportSQL, dc, request);
1068 pagedSQL = parseReportSQLForDrillDownParams(pagedSQL, dc, request);
1072 cachedSQL = pagedSQL;
1076 if(doesReportContainsGroupFormField()) {
1078 pagedSQL = generatePagedSQL(pageNo, userId, request, true, reportParamValues);
1080 pagedSQL = generateSubsetSQL(0, downloadLimit, userId, request, true, reportParamValues);
1082 //check for Group formfield
1083 //if groupformfield get columns from sql
1085 ds = ConnectionUtils.getDataSet(pagedSQL, dbInfo);
1087 if(doesReportContainsGroupFormField()) {
1088 List reportCols1 = getAllColumns();
1089 reportCols = new Vector();
1091 for (Iterator iter = reportCols1.iterator(); iter.hasNext();) {
1092 DataColumnType dct = (DataColumnType) iter.next();
1093 for (int k=0; k<ds.getColumnCount(); k++) {
1094 if(dct.getColId().toUpperCase().trim().equals(ds.getColumnName(k).trim())) {
1095 reportCols.add(dct);
1101 if (getFormFieldList() != null) {
1102 String paramValue = "";
1103 for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
1104 FormFieldType fft = (FormFieldType) iter.next();
1105 if(fft.isGroupFormField()!=null && fft.isGroupFormField().booleanValue()) {
1106 paramValue = Utils.oracleSafe(nvl(reportParamValues
1107 .getParamValue(fft.getFieldId())));
1109 for (Iterator iter1 = reportCols1.iterator(); iter1.hasNext();) {
1110 DataColumnType dct = (DataColumnType) iter1.next();
1111 if(("["+fft.getFieldName()+ "]").equals(dct.getColName().trim())) {
1112 dct.setDisplayName(paramValue);
1124 // if ( (remDbInfo!=null) && (!remDbInfo.equals(AppConstants.DB_LOCAL)))
1126 // Globals.getRDbUtils().setDBPrefix(remDbInfo);
1127 // ds = RemDbUtils.executeQuery(pagedSQL);
1130 // ds = DbUtils.executeQuery(pagedSQL);
1132 * } catch(SQLException e) { throw new
1133 * ReportSQLException("[ReportRuntime.loadLinearReportData]
1134 * "+e.getMessage(), pagedSQL); }
1137 if (getReportDataSize() < 0)
1139 setReportDataSize(ds.getRowCount());
1140 else if (ds.getRowCount() <= getPageSize())
1141 setReportDataSize(ds.getRowCount());
1144 /*Pattern re1 = Pattern.compile("[Oo][Rr][Dd][Ee][Rr](.*?[^\r\n]*)[Bb][Yy]", Pattern.DOTALL);
1145 Pattern re2 = Pattern.compile("[Oo][Rr][Dd][Ee][Rr](.*?[^\r\n]*)[Bb][Yy]((.*?[^\r\n]*)|[\\s]|[^0-9a-zA-Z])\\)", Pattern.DOTALL);
1146 Matcher matcher = re1.matcher(reportSQL);
1147 Matcher matcher2 = null;
1148 int startPoint = reportSQL.length()-30;
1149 String startReportSQL = "";
1150 String endReportSQL = "";
1151 while(reportSQL.indexOf("xid", startPoint)!=-1)startPoint++;
1152 if (matcher.find(startPoint)) {
1153 startReportSQL = reportSQL.substring(0, reportSQL.indexOf(matcher.group()));
1154 endReportSQL = reportSQL.substring(reportSQL.indexOf(matcher.group()));
1155 matcher2 = re2.matcher(endReportSQL);
1157 endReportSQL = endReportSQL.substring(matcher.group().length()-1);
1160 reportSQL = startReportSQL + endReportSQL;
1162 String countSQL = "SELECT count(*) FROM (" + reportSQL + ")"+ (Globals.isPostgreSQL() || Globals.isMySQL()?" AS ":"") +" x ";
1165 if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
1167 org.onap.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.onap.portalsdk.analytics.util.RemDbInfo();
1168 dbType = remDbInfo.getDBType(dbInfo);
1169 if (dbType.equals("DAYTONA") && reportSQL.trim().toUpperCase().startsWith("SELECT")) {
1170 Pattern re1 = Pattern.compile("order(.*?[^\r\n]*)by", Pattern.DOTALL);
1171 Matcher matcher = re1.matcher(reportSQL);
1172 int startPoint = reportSQL.length()-30;
1173 while(reportSQL.indexOf("xid", startPoint)!=-1)startPoint++;
1174 if (matcher.find(startPoint)) {
1175 reportSQL = reportSQL.substring(0, reportSQL.indexOf(matcher.group()));
1177 countSQL = "SELECT count(*) FROM (" + reportSQL + ")"+ (Globals.isPostgreSQL() || Globals.isMySQL()?" AS ":"") +" x";
1178 countSQL = countSQL + " ("+ colNames+ ")";
1179 } else if (dbType.equals("DAYTONA")) {
1180 setReportDataSize(50);
1182 } catch (Exception ex) {
1183 throw new RaptorException(ex);
1189 if(reportSQL.trim().toUpperCase().startsWith("SELECT")) {
1190 ds2 = ConnectionUtils.getDataSet(countSQL, dbInfo);
1191 if (ds2.getRowCount() > 0)
1192 setReportDataSize(ds2.getInt(0, 0));
1194 throw new RuntimeException(
1195 "[ReportRuntime.loadLinearReportData] Unable to load report data size");
1197 setReportDataSize(50);
1198 // if ( (remDbInfo!=null) &&
1199 // (!remDbInfo.equals(AppConstants.DB_LOCAL))){
1200 // Globals.getRDbUtils().setDBPrefix(remDbInfo);
1201 // ds2 = RemDbUtils.executeQuery(countSQL);
1204 // ds2 = DbUtils.executeQuery(countSQL);
1206 * } catch(SQLException e) { throw new
1207 * ReportSQLException("[ReportRuntime.loadLinearReportData size]
1208 * "+e.getMessage(), countSQL); }
1214 ReportData rd = new ReportData(pageNo, true);
1216 // Already defined changed for modifying request parameters
1217 //List reportCols = getAllColumns();
1218 Vector visibleCols = new Vector(reportCols.size());
1219 Vector formatProcessors = new Vector(reportCols.size());
1221 // ColumnHeaderRow chr = new ColumnHeaderRow();
1222 // rd.reportColumnHeaderRows.addColumnHeaderRow(chr);
1223 // chr.setRowHeight("30");
1227 ReportFormFields rff = getReportFormFields();
1228 ReportFormFields childReportFormFields = null;
1229 String fieldDisplayName = "";
1230 String fieldValue = "";
1232 for (int c = 0; c < reportCols.size(); c++) {
1233 if(reportCols.get(c)!=null) {
1234 DataColumnType dct = (DataColumnType) reportCols.get(c);
1235 if(nvl(dct.getDependsOnFormField()).length()>0 && nvl(dct.getDependsOnFormField()).indexOf("[")!=-1) {
1236 for(int i = 0 ; i < rff.size(); i++) {
1237 fieldDisplayName = "["+((FormField)rff.getFormField(i)).getFieldDisplayName()+"]";
1239 //if(dct.getOriginalDisplayName()==null) dct.setOriginalDisplayName(dct.getDisplayName());
1240 if (dct.getDependsOnFormField().equals(fieldDisplayName)) {
1241 fieldValue = nvl(request.getParameter(((FormField)rff.getFormField(i)).getFieldName()));
1243 if (fieldValue.length()>0) {
1244 if(!fieldValue.toUpperCase().equals("Y"))
1245 dct.setDisplayName(fieldValue);
1246 if(!dct.isVisible())
1247 dct.setVisible(true);
1249 dct.setVisible(false);
1258 String displayName = "";
1259 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
1261 DataColumnType dc = (DataColumnType) iter.next();
1263 formatProcessors.add(count,new FormatProcessor(
1264 getSemaphoreById(dc.getSemaphoreId()), dc.getColType(), dc
1265 .getColFormat(), getReportDefType().equals(
1266 AppConstants.RD_SQL_BASED)));
1268 if (nvl(dc.getDrillDownURL()).length() > 0) {
1269 childReportFormFields = getChildReportFormFields(request,AppUtils.getDrillActionURL()+""+dc.getDrillDownURL());
1271 if (dc.isVisible()) {
1272 visibleCols.add(count,dc);
1273 //if(dc.getColId().startsWith("group")) {
1274 for (int d = 0; d < reportCols.size(); d++) {
1275 if(reportCols.get(d)!=null) {
1276 DataColumnType dct1 = (DataColumnType) reportCols.get(d);
1277 if(dct1.getColId().equals(dc.getColId()+"_name") && ds.getRowCount()>0) {
1278 displayName = ds.getString(0,dct1.getColId());
1279 dc.setDisplayName(displayName);
1285 String widthInPxls = dc.getDisplayWidthInPxls();
1287 if(nvl(widthInPxls).endsWith("px"))
1288 dc.setDisplayWidthInPxls(widthInPxls);
1290 widthInPxls = widthInPxls+"px";
1291 dc.setDisplayWidthInPxls(widthInPxls+"px");
1294 rd.createColumn(dc.getColId(), dc.getDisplayName(), dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(),
1295 visualManager.isColumnVisible(dc.getColId()), visualManager
1296 .getSortByColId().equals(dc.getColId()) ? visualManager
1297 .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);
1298 // chr.addColumnHeader(new ColumnHeader(dc.getDisplayName(),
1299 // (dc.getDisplayWidth()>100)?"10%":(""+dc.getDisplayWidth()+"%")));
1302 visibleCols.add(count,null);
1303 rd.createColumn(dc.getColId(), AppConstants.HIDDEN, dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(),
1304 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);
1305 // formatProcessors.add(count,null);
1310 if(getReportDefType().equals(AppConstants.RD_SQL_BASED_DATAMIN) && pageNo ==0) {
1313 v = addForecastData(reportSQL);
1314 } catch (Exception ex) {
1315 ex.printStackTrace();
1316 throw new RaptorException (ex);
1318 session.setAttribute("FORECASTED_DATA", v);
1319 DataSet dsWhole = ConnectionUtils.getDataSet(wholeSQL, dbInfo);
1321 session.setAttribute(AppConstants.RI_CHART_FORECAST_DATA, dsWhole);
1324 if(getReportDefType().equals(AppConstants.RD_SQL_BASED_DATAMIN) && session.getAttribute("FORECASTED_DATA")!=null) {
1325 Vector vForecastedData = (Vector)session.getAttribute("FORECASTED_DATA");
1326 if(vForecastedData.size() > 0)
1327 ds.addAll(vForecastedData);*/
1331 // Utils._assert(chr.size()==ds.getColumnCount(),
1332 // "[ReportRuntime.loadLinearReportData] The number of visible columns
1333 // does not match the number of data columns");
1334 //TODO: This should be optimized to accept -1 for flat file download
1335 for (int r = 0; r < Math.min(ds.getRowCount(), ((pageNo < 0) ? (downloadLimit == -1?Globals.getFlatFileUpperLimit():Globals.getDownloadLimit() ) : getPageSize())); r++) {
1336 DataRow dr = new DataRow();
1337 rd.reportDataRows.addDataRow(dr);
1339 for (int c = 0; c < reportCols.size(); c++) {
1340 if(reportCols.get(c)!=null) {
1341 DataColumnType dct = (DataColumnType) reportCols.get(c);
1342 DataValue dv = new DataValue();
1343 dr.addDataValue(dv);
1344 dv.setDisplayValue(ds.getString(r, ds.getColumnIndex(dct.getColId())));
1345 dv.setColName(dct.getColName());
1346 dv.setColId(dct.getColId());
1347 dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
1348 StringBuffer indentation = new StringBuffer("");
1349 if(dct.getIndentation()!=null && dct.getIndentation()>0) {
1350 for (int indent=0; indent< dct.getIndentation(); indent++) {
1351 indentation.append("\t");
1353 dv.setNowrap("true");
1355 dv.setIndentation(indentation.toString());
1356 if(dct.isVisible()) {
1358 dv.setVisible(true);
1359 dv.setAlignment(dct.getDisplayAlignment());
1360 dv.setDisplayTotal(dct.getDisplayTotal());
1361 dv.setDisplayName(dct.getDisplayName());
1363 if (nvl(dct.getDrillDownURL()).length() > 0) {
1365 if(dv.getDisplayValue().length() > 0) {
1366 dv.setDrillDownURL(parseDrillDownURL(r, /* c, */ds, dct,request, childReportFormFields));
1367 dv.setDrillDowninPoPUp(dct.isDrillinPoPUp()!=null?dct.isDrillinPoPUp():false);
1370 if (dv.getDisplayValue().length() == 0) {
1371 //dv.setDisplayValue("[NULL]");
1372 dv.setDisplayValue("");
1377 dv.setVisible(false);
1380 //System.out.println("in Linear report b4" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
1382 if(dr.getFormatId()!=null)
1383 ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, true);
1385 ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, false);
1387 //System.out.println("in Linear report After" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
1392 //Only if rownumber options is needed
1393 //rd.addRowNumbers(pageNo, getPageSize());
1395 if (colDataTotalsLinear == null) {
1396 if(!download && !action.endsWith("session"))
1397 colDataTotalsLinear = generateColumnDataTotalsLinear(new ArrayList(reportCols), userId,
1398 getDbInfo(),request);
1399 if(download && action.endsWith("session"))
1400 colDataTotalsLinear = generateColumnDataTotalsLinear(new ArrayList(reportCols), userId,
1401 getDbInfo(), getTotalSql());
1403 if (displayColTotals && colDataTotalsLinear != null) {
1404 String totalLabel = "Total";
1405 if (getReportDataSize() > getPageSize())
1406 totalLabel += "<br><font size=1>(for all pages)</font>";
1408 rd.setColumnDataTotalsLinear(colDataTotalsLinear, totalLabel);
1410 // Please note the below function doesn't set the visibility for dv since this is set in this function. - Sundar
1411 rd.applyVisibility();
1414 } // loadLinearReportData
1418 public DataRow generateColumnDataTotalsLinear(ArrayList reportCols, String userId,
1419 String dbInfo, String reportSQL) throws RaptorException {
1422 boolean displayColTotals = false;
1423 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
1425 DataColumnType dct = (DataColumnType) iter.next();
1427 if (nvl(dct.getDisplayTotal()).length() > 0) {
1428 displayColTotals = true;
1431 } // if checking dct
1435 if (displayColTotals) {
1438 // DbUtils.executeQuery(generateTotalSQLLinear(reportParamValues,
1440 ds = ConnectionUtils.getDataSet(reportSQL,
1443 for (int c = 0; c < reportCols.size(); c++) {
1444 DataColumnType dct = (DataColumnType) reportCols.get(c);
1445 if ( dct != null ) {
1446 DataValue dv = new DataValue();
1448 String totalValue = "";
1450 totalValue = ds.getString(0, c);
1451 if (nvl(dct.getDisplayTotal()).length() > 0
1452 && (!dct.getDisplayTotal().equals(AppConstants.TOTAL_SUM_ID)))
1453 totalValue = nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(dct
1454 .getDisplayTotal()))
1455 + ": " + totalValue;
1456 dv.setDisplayValue(Utils.truncateTotalDecimals(totalValue));
1458 dv.setAlignment(dct.getDisplayAlignment());
1459 dv.setColName(dct.getColName());
1460 dv.setDisplayName(dct.getDisplayName());
1461 dv.setColId(dct.getColId());
1462 dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
1463 StringBuffer indentation = new StringBuffer("");
1464 if(dct.getIndentation()!=null && dct.getIndentation()>0) {
1465 for (int indent=0; indent< dct.getIndentation(); indent++) {
1466 indentation.append("\t");
1468 dv.setNowrap("true");
1470 dv.setIndentation(indentation.toString());
1471 dv.setDisplayTotal(dct.getDisplayTotal());
1473 dv.setVisible(dct.isVisible());
1475 dr.addDataValue(dv);
1481 } // generateColumnDataTotalsLinear
1484 public ReportData loadHiveLinearReportData(String reportSQL, String userId, int downloadLimit, HttpServletRequest request) throws RaptorException {
1485 wholeSQL = reportSQL;
1486 int countRows = getHiveReportCount(wholeSQL);
1487 setReportDataSize(countRows);
1488 if(countRows < 1001)
1489 wholeSQL += " limit "+ countRows;
1491 wholeSQL += " limit "+ downloadLimit;
1492 HttpSession session = request.getSession();
1496 String dbInfo = getDBInfo();
1498 List reportCols = getAllColumns();
1499 StringBuffer colNames = new StringBuffer();
1500 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
1502 DataColumnType dc = (DataColumnType) iter.next();
1503 if (colNames.length() > 0)
1504 colNames.append(", ");
1505 colNames.append(dc.getColId());
1508 ds = ConnectionUtils.getDataSet(wholeSQL, dbInfo);
1510 ReportData rd = new ReportData(0, true);
1512 // Already defined changed for modifying request parameters
1513 //List reportCols = getAllColumns();
1514 Vector visibleCols = new Vector(reportCols.size());
1515 Vector formatProcessors = new Vector(reportCols.size());
1517 // ColumnHeaderRow chr = new ColumnHeaderRow();
1518 // rd.reportColumnHeaderRows.addColumnHeaderRow(chr);
1519 // chr.setRowHeight("30");
1523 ReportFormFields rff = getReportFormFields();
1524 ReportFormFields childReportFormFields = null;
1525 String fieldDisplayName = "";
1526 String fieldValue = "";
1528 for (int c = 0; c < reportCols.size(); c++) {
1529 if(reportCols.get(c)!=null) {
1530 DataColumnType dct = (DataColumnType) reportCols.get(c);
1531 if(nvl(dct.getDependsOnFormField()).length()>0 && nvl(dct.getDependsOnFormField()).indexOf("[")!=-1) {
1532 for(int i = 0 ; i < rff.size(); i++) {
1533 fieldDisplayName = "["+((FormField)rff.getFormField(i)).getFieldDisplayName()+"]";
1535 //if(dct.getOriginalDisplayName()==null) dct.setOriginalDisplayName(dct.getDisplayName());
1536 if (dct.getDependsOnFormField().equals(fieldDisplayName)) {
1537 fieldValue = nvl(request.getParameter(((FormField)rff.getFormField(i)).getFieldName()));
1539 if (fieldValue.length()>0) {
1540 if(!fieldValue.toUpperCase().equals("Y"))
1541 dct.setDisplayName(fieldValue);
1542 if(!dct.isVisible())
1543 dct.setVisible(true);
1545 dct.setVisible(false);
1554 String displayName = "";
1555 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
1557 DataColumnType dc = (DataColumnType) iter.next();
1559 formatProcessors.add(count,new FormatProcessor(
1560 getSemaphoreById(dc.getSemaphoreId()), dc.getColType(), dc
1561 .getColFormat(), getReportDefType().equals(
1562 AppConstants.RD_SQL_BASED)));
1564 if (nvl(dc.getDrillDownURL()).length() > 0) {
1565 childReportFormFields = getChildReportFormFields(request,dc.getDrillDownURL());
1567 if (dc.isVisible()) {
1568 visibleCols.add(count,dc);
1569 //if(dc.getColId().startsWith("group")) {
1570 for (int d = 0; d < reportCols.size(); d++) {
1571 if(reportCols.get(d)!=null) {
1572 DataColumnType dct1 = (DataColumnType) reportCols.get(d);
1573 if(dct1.getColId().equals(dc.getColId()+"_name") && ds.getRowCount()>0) {
1574 displayName = ds.getString(0,dct1.getColId());
1575 dc.setDisplayName(displayName);
1581 String widthInPxls = dc.getDisplayWidthInPxls();
1583 if(nvl(widthInPxls).endsWith("px"))
1584 dc.setDisplayWidthInPxls(widthInPxls);
1586 widthInPxls = widthInPxls+"px";
1587 dc.setDisplayWidthInPxls(widthInPxls+"px");
1590 rd.createColumn(dc.getColId(), dc.getDisplayName(), dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(),
1591 visualManager.isColumnVisible(dc.getColId()), visualManager
1592 .getSortByColId().equals(dc.getColId()) ? visualManager
1593 .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);
1594 // chr.addColumnHeader(new ColumnHeader(dc.getDisplayName(),
1595 // (dc.getDisplayWidth()>100)?"10%":(""+dc.getDisplayWidth()+"%")));
1598 visibleCols.add(count,null);
1599 rd.createColumn(dc.getColId(), "", dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(),
1600 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);
1601 // formatProcessors.add(count,null);
1606 ArrayList reportDataList = new ArrayList();
1607 for (int r = 0; r < ds.getRowCount(); r++) {
1608 DataRow dr = new DataRow();
1609 rd.reportDataRows.addDataRow(dr);
1611 for (int c = 0; c < reportCols.size(); c++) {
1612 if(reportCols.get(c)!=null) {
1613 DataColumnType dct = (DataColumnType) reportCols.get(c);
1614 DataValue dv = new DataValue();
1615 dr.addDataValue(dv);
1616 dv.setDisplayValue(ds.getString(r, c));
1617 dv.setColName(dct.getColName());
1618 dv.setColId(dct.getColId());
1619 dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
1620 StringBuffer indentation = new StringBuffer("");
1621 if(dct.getIndentation()!=null && dct.getIndentation()>0) {
1622 for (int indent=0; indent< dct.getIndentation(); indent++) {
1623 indentation.append("\t");
1625 dv.setNowrap("true");
1627 dv.setIndentation(indentation.toString());
1628 if(dct.isVisible()) {
1630 dv.setVisible(true);
1631 dv.setAlignment(dct.getDisplayAlignment());
1632 dv.setDisplayTotal(dct.getDisplayTotal());
1633 dv.setDisplayName(dct.getDisplayName());
1635 if (nvl(dct.getDrillDownURL()).length() > 0) {
1637 if(dv.getDisplayValue().length() > 0) {
1638 dv.setDrillDownURL(parseDrillDownURL(r, /* c, */ds, dct,request, childReportFormFields));
1639 dv.setDrillDowninPoPUp(dct.isDrillinPoPUp()!=null?dct.isDrillinPoPUp():false);
1642 if (dv.getDisplayValue().length() == 0) {
1643 //dv.setDisplayValue("[NULL]");
1644 dv.setDisplayValue("");
1649 dv.setVisible(false);
1652 //System.out.println("in Linear report b4" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
1654 if(dr.getFormatId()!=null)
1655 ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, true);
1657 ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, false);
1659 //System.out.println("in Linear report After" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
1662 reportDataList.add(dr);
1664 rd.setReportDataList(reportDataList);
1665 //Only if rownumber options is needed
1666 //rd.addRowNumbers(pageNo, getPageSize());
1668 if (colDataTotalsLinear == null)
1669 colDataTotalsLinear = generateColumnDataTotalsLinear(new ArrayList(reportCols), userId,
1670 getDbInfo(),request);
1671 if (displayColTotals && colDataTotalsLinear != null) {
1672 String totalLabel = "Total";
1673 if (getReportDataSize() > getPageSize())
1674 totalLabel += "<br><font size=1>(for all pages)</font>";
1676 rd.setColumnDataTotalsLinear(colDataTotalsLinear, totalLabel);
1678 // Please note the below function doesn't set the visibility for dv since this is set in this function. - Sundar
1679 rd.applyVisibility();
1682 } // loadHiveLinearReportData
1685 public int getHiveReportCount(String sql) throws RaptorException {
1686 //select t from (select count(*) t from (select * from program)x)x1;
1688 String countSql = "select t from (select count(*) t from ("+ sql + ")" + (Globals.isPostgreSQL() || Globals.isMySQL() ?" AS ":"") + " x) AS x1";
1692 String dbInfo = getDBInfo();
1693 System.out.println("SQL getReportCount()- " + countSql);
1695 ds = ConnectionUtils.getDataSet(countSql, dbInfo);
1698 if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
1700 org.onap.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.onap.portalsdk.analytics.util.RemDbInfo();
1701 dbType = remDbInfo.getDBType(dbInfo);
1702 } catch (Exception ex) {
1703 throw new RaptorException(ex);
1706 if( ds.getRowCount()>0) {
1707 count = Integer.parseInt(ds.getString(0,0));
1709 } catch (NumberFormatException ex) {}
1715 /*private*/ public ReportFormFields getChildReportFormFields( HttpServletRequest request, String URL ) throws RaptorException {
1716 String childReportID = getReportID(URL);
1718 ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, childReportID,
1721 ReportFormFields ddReportFormFields = ddRr.getReportFormFields();
1722 return ddReportFormFields;
1725 private String getReportID(String URL) {
1727 int pos = URL.toLowerCase().indexOf("c_master=")+9;
1728 String reportID = "";
1729 if(URL.toLowerCase().indexOf("&", pos)!=-1)
1730 reportID = URL.substring(pos, URL.toLowerCase().indexOf("&", pos));
1732 reportID = URL.substring(pos);
1736 /*private*/ public String parseDrillDownURL(int rowIdx, /* int colIdx, */DataSet ds, DataColumnType dct, HttpServletRequest request, ReportFormFields ddReportFormFields)
1737 throws RaptorException {
1738 Vector viewActions = DataCache.getDataViewActions();
1739 javax.servlet.http.HttpSession session = request.getSession();
1741 StringBuffer dUrl = new StringBuffer();
1743 //String childReportID = getReportID(dct.getDrillDownURL());
1745 //ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, childReportID,
1748 //ReportFormFields ddReportFormFields = ddRr.getReportFormFields();
1750 boolean isViewAction = false;
1752 String requestParam ="";
1753 for (int k = 0; k < viewActions.size(); k++)
1754 if (dct.getDrillDownURL().equals(
1755 AppUtils.getBaseActionURL() + ((String) viewActions.get(k))))
1756 isViewAction = true;
1758 // Drill-down to record details
1759 String param = nvl(dct.getDrillDownParams()); // i.e.
1760 // "c_master=[bo1.RECID$]"
1761 param = param.substring(AppUtils.getBaseActionParam().length() + 1,
1762 param.length() - 1); // i.e. "bo1.RECID$"
1763 param = param.replace('.', '_'); // i.e. "bo1.RECID$"
1765 dUrl.append(AppUtils.getBaseActionParam());
1766 dUrl.append(java.net.URLEncoder.encode(ds.getString(rowIdx, param.toLowerCase())));
1768 // Drill-down to another report
1769 // Replacing col ids with values
1770 String param = nvl(dct.getDrillDownParams());
1771 while (param.indexOf('[') >= 0) {
1772 int startIdx = param.indexOf('[');
1773 int endIdx = param.indexOf(']');
1774 StringBuffer sb = new StringBuffer();
1775 if(startIdx>endIdx) {
1776 if (endIdx < param.length() - 1)
1777 sb.append(param.substring(endIdx + 1));
1778 param = sb.toString();
1782 sb.append(param.substring(0, startIdx));
1784 if (param.charAt(startIdx + 1) == '!') {
1785 // Parameter is a form field value
1786 String fieldId = param.substring(startIdx + 2, endIdx);
1787 String fieldValue = (String) reportParamValues.get(fieldId);
1789 sb.append(java.net.URLEncoder.encode(nvl(fieldValue)));
1790 //TODO Add a else if condition to check whether the param is from request Param
1791 //TODO make a unique symbol like #
1792 }else if (param.charAt(startIdx + 1) == '#') {
1794 String fieldId = param.substring(startIdx + 2, endIdx);
1795 String fieldValue = request.getParameter(fieldId);
1796 sb.append(java.net.URLEncoder.encode(nvl(fieldValue)));
1799 // Parameter is a column value
1800 String fieldValue = "";
1801 String colValue = null;
1802 String colId = null;
1803 if (param.indexOf('!') < 0 || param.indexOf('!') > endIdx)
1804 colId = param.substring(startIdx + 1, endIdx);
1806 // Need to use NVL(column, form field)
1807 colId = param.substring(startIdx + 1, param.indexOf('!'));
1809 String fieldId = param.substring(param.indexOf('!') + 1, endIdx);
1810 FormField ff = getFormField(fieldId);
1811 if (ff.getFieldType().equals(FormField.FFT_TEXTAREA)) {
1812 fieldValue = reportParamValues.getParamValueforTextAreaDrilldown(fieldId);
1814 fieldValue = (String) reportParamValues.get(fieldId);
1817 DataColumnType column = getColumnById(colId);
1818 String columnName = "";
1819 int groupColumn = 0;
1821 if(column.getColName().startsWith("[")) {
1823 columnName = column.getDisplayName();
1824 for(ddReportFormFields.resetNext(); ddReportFormFields.hasNext(); ) {
1825 FormField ff = ddReportFormFields.getNext();
1826 if(ff.getFieldDisplayName().toLowerCase().equals(columnName.toLowerCase())) {
1828 sb.delete(sb.lastIndexOf("&")+1, sb.length());
1829 sb.append(ff.getFieldName()+"=");
1833 if (groupColumn == 0 || (groupColumn == 1 && groupMatch == 1)) {
1834 String dependsOn = column.getDependsOnFormField();
1835 if(nvl(dependsOn).length()>0)
1836 System.out.println("DependsOn " + dependsOn);
1837 if (column != null) {
1838 // if (column.getColType().equals(AppConstants.CT_DATE))
1839 //if (!nvl(column.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
1840 // .equals(AppConstants.DEFAULT_DATE_FORMAT))
1841 // Use extra column instead
1842 //commented out below line usually for Visual
1843 //colId += AppConstants.DD_COL_EXTENSION;
1844 colValue = ds.getString(rowIdx, colId.toLowerCase());
1845 // if SQL-Based and drill-down param is a date, decode
1846 // it to the expected Oracle format **/
1847 if (getReportDefType().equals(AppConstants.RD_SQL_BASED))
1848 if (!getColumnNoParseDateFlag(column))
1849 if (ReportParamDateValueParser.isDateParam(colValue))
1850 colValue = ReportParamDateValueParser
1851 .formatDateParamValue(colValue);
1854 String suppressValues = "|" + nvl(dct.getDrillDownType()) + "|";
1855 if (suppressValues.length() > 2
1856 && suppressValues.indexOf("|" + colValue + "|") >= 0)
1857 // Parameter value is suppressed and not passed to the
1858 // drill-down report
1861 sb.append(java.net.URLEncoder.encode(nvl(colValue, fieldValue)));
1863 sb.delete(sb.lastIndexOf("&")+1, sb.length());
1867 if (endIdx < param.length() - 1)
1868 sb.append(param.substring(endIdx + 1));
1869 param = sb.toString();
1871 if(Globals.getPassRequestParamInDrilldown()) {
1872 if(param.indexOf('#') < 0) {
1873 String[] reqParameters = Globals.getRequestParams().split(",");
1874 String[] sessionParameters = Globals.getSessionParams().split(",");
1875 for (int i = 0; i < reqParameters.length; i++) {
1876 if(request.getParameter(reqParameters[i])!=null) {
1877 if(!reqParameters[i].toUpperCase().startsWith("FF")){
1878 if(param.length()>0) {
1879 param += "&" + reqParameters[i]+"="
1880 + request.getParameter(reqParameters[i]);
1882 param += "&" + reqParameters[i]+"="
1883 + request.getParameter(reqParameters[i]);
1889 for (int i = 0; i < sessionParameters.length; i++) {
1890 if(session.getAttribute(sessionParameters[i].toUpperCase())!=null) {
1891 if(!sessionParameters[i].toUpperCase().startsWith("FF")){
1892 if(param.length()>0) {
1893 param += "&" + sessionParameters[i].toUpperCase()+"="
1894 + (String)session.getAttribute(sessionParameters[i].toUpperCase());
1896 param += "&" + sessionParameters[i].toUpperCase()+"="
1897 + (String)session.getAttribute(sessionParameters[i].toUpperCase());
1902 param += "&" + sessionParameters[i].toUpperCase()+"="
1903 + (String)session.getAttribute(sessionParameters[i]);
1911 dUrl.append(param.toString());
1913 dUrl.append(AppConstants.RI_DISPLAY_CONTENT);
1916 if(dct.isDrillinPoPUp()==null || (!dct.isDrillinPoPUp().booleanValue())) {
1917 dUrl.append(AppConstants.RI_SHOW_BACK_BTN);
1921 dUrl.append(AppConstants.DRILLDOWN_INDEX);
1922 int index = Integer.parseInt(nvl(AppUtils.getRequestValue(request, AppConstants.DRILLDOWN_INDEX), "0"));
1924 int form_index = Integer.parseInt(nvl(AppUtils.getRequestValue(request, AppConstants.FORM_DRILLDOWN_INDEX), "0"));
1925 index = index>0 ? --index : 0;
1926 form_index = form_index>0 ? --form_index : 0;*/
1927 request.setAttribute(AppConstants.DRILLDOWN_INDEX, Integer.toString(index));
1928 /*session.setAttribute(AppConstants.DRILLDOWN_INDEX, Integer.toString(index));
1929 request.setAttribute(AppConstants.FORM_DRILLDOWN_INDEX, Integer.toString(form_index));
1930 session.setAttribute(AppConstants.FORM_DRILLDOWN_INDEX, Integer.toString(form_index));*/
1932 dUrl.append("=" + AppUtils.getRequestNvlValue(request, AppConstants.DRILLDOWN_INDEX));
1934 //TODO Add a if condition to check whether the param is request Param
1937 if (dUrl.length() > 0)
1938 dUrl.insert(0, ((dct.getDrillDownURL()).indexOf('&') > 0) ? '&' : '&');
1939 dUrl.insert(0, AppUtils.getDrillActionURL()+dct.getDrillDownURL());
1941 //debugLogger.debug(" [[[[[[[[[[[[[[[[ " + dUrl);
1943 return dUrl.toString();
1944 } // parseDrillDownURL
1946 /** *********************************************************************************** */
1948 public DataRow generateColumnDataTotalsLinear(ArrayList reportCols, String userId,
1949 String dbInfo, HttpServletRequest request) throws RaptorException {
1952 displayColTotals = false;
1953 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
1955 DataColumnType dct = (DataColumnType) iter.next();
1957 if (nvl(dct.getDisplayTotal()).length() > 0) {
1958 displayColTotals = true;
1961 } // if checking dct
1965 if (displayColTotals) {
1968 // DbUtils.executeQuery(generateTotalSQLLinear(reportParamValues,
1970 ds = ConnectionUtils.getDataSet(generateTotalSQLLinear(reportParamValues, userId,request),
1973 for (int c = 0; c < reportCols.size(); c++) {
1974 DataColumnType dct = (DataColumnType) reportCols.get(c);
1975 if ( dct != null ) {
1976 DataValue dv = new DataValue();
1978 dr.addDataValue(dv);
1980 String totalValue = "";
1982 totalValue = ds.getString(0, c);
1983 if (nvl(dct.getDisplayTotal()).length() > 0
1984 && (!dct.getDisplayTotal().equals(AppConstants.TOTAL_SUM_ID)))
1985 totalValue = nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(dct
1986 .getDisplayTotal()))
1987 + ": " + totalValue;
1988 dv.setDisplayValue(Utils.truncateTotalDecimals(totalValue));
1990 dv.setAlignment(dct.getDisplayAlignment());
1991 dv.setColName(dct.getColName());
1992 dv.setDisplayName(dct.getDisplayName());
1993 dv.setColId(dct.getColId());
1994 dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
1995 StringBuffer indentation = new StringBuffer("");
1996 if(dct.getIndentation()!=null && dct.getIndentation()>0) {
1997 for (int indent=0; indent< dct.getIndentation(); indent++) {
1998 indentation.append("\t");
2000 dv.setNowrap("true");
2002 dv.setIndentation(indentation.toString());
2003 dv.setDisplayTotal(dct.getDisplayTotal());
2010 } // generateColumnDataTotalsLinear
2012 private Vector generateDataTotalsCrossTab(String rowColPos, String userId, HttpServletRequest request)
2013 throws RaptorException {
2014 String sql = getWholeSQL();
2015 Vector dataTotals = new Vector();
2017 boolean displayTotals = ((rowColPos.length() == 0) || (getCrossTabDisplayTotal(
2018 rowColPos).length() > 0));
2019 if (rowColPos.equals(AppConstants.CV_COLUMN))
2020 displayColTotals = displayTotals;
2021 else if (rowColPos.equals(AppConstants.CV_ROW))
2022 displayRowTotals = displayTotals;
2024 if (displayTotals) {
2026 // DbUtils.executeQuery(generateTotalSQLCrossTab(reportParamValues,
2027 // rowColPos, userId));
2028 String executeSql = generateTotalSQLCrossTab(
2029 sql, rowColPos, userId, request, reportParamValues);
2030 DataSet ds = ConnectionUtils.getDataSet(executeSql, getDbInfo());
2032 for (int i = 0; i < ds.getRowCount(); i++) {
2033 Vector headerValues = new Vector();
2034 String totalValue = null;
2037 for (Iterator iter = getAllColumns().iterator(); iter.hasNext();) {
2038 DataColumnType dct = (DataColumnType) iter.next();
2040 if (rowColPos.length() > 0
2041 && nvl(dct.getCrossTabValue()).equals(rowColPos)) {
2042 DataValue dataValue = new DataValue();
2043 dataValue.setBold(true);
2044 dataValue.setAlignment("center");
2045 dataValue.setDisplayValue(ds.getString(i, cPos++));
2046 headerValues.add(dataValue);
2048 //headerValues.add(ds.getString(i, cPos++));
2050 else if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_VALUE))
2051 totalValue = ds.getString(i, cPos++);
2054 dataTotals.add(new CrossTabTotalValue(headerValues, Utils
2055 .truncateTotalDecimals(totalValue)));
2060 } // generateDataTotalsCrossTab
2062 /** *********************************************************************************** */
2064 public void hideColVisual(String colId) {
2065 visualManager.hideColumn(colId);
2066 if (pageDataCache != null)
2067 pageDataCache.columnVisualShowHide(colId, false);
2070 public void showColVisual(String colId) {
2071 visualManager.showColumn(colId);
2072 if (pageDataCache != null)
2073 pageDataCache.columnVisualShowHide(colId, true);
2076 public void sortColVisual(String colId) {
2077 visualManager.setSortByColumn(colId);
2080 pageDataCache = null;
2084 /** *********************************************************************************** */
2086 public String generateDistinctValuesSQL(DataColumnType dct, String userId, HttpServletRequest request) throws RaptorException {
2087 return super.generateDistinctValuesSQL(reportParamValues, dct, userId, request);
2088 } // generateDistinctValuesSQL
2090 public String getDbInfo() {
2091 return this.cr.getDbInfo();
2094 public String parseReportSQL(String sql) throws RaptorException {
2095 StringBuffer parsedSQL = new StringBuffer();
2097 Vector updatedReportCols = new Vector();
2100 int lastParsePos = curSQLParsePos;
2101 String lastToken = null;
2102 logger.debug(EELFLoggerDelegate.debugLogger, ("Flat File parseReportSQL ******* SQL " + sql));
2103 sql = sql.replaceAll("([\\s]*\\() (?!FROM)", "(");
2104 sql = sql.replaceAll("[\\s]*\\)", ")");
2105 //sql = sql.replaceAll("[dD][eE][cC][oO][dD][eE] ", "decode");
2106 //sql = sql.replaceAll("[\\s]*\\(", "(");
2107 //sql = replaceNewLine(sql, "decode ", "decode");
2108 //sql = replaceNewLine(sql, "DECODE ", "decode");
2109 //sql = replaceNewLine(sql, "Decode ", "decode");
2111 String nextToken = getNextSQLParseToken(sql, true);
2112 String dbInfo = getDbInfo();
2113 boolean isCYMBALScript = false;
2114 if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
2116 org.onap.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.onap.portalsdk.analytics.util.RemDbInfo();
2117 String dbType = remDbInfo.getDBType(dbInfo);
2118 if (dbType.equals("DAYTONA") && !(nextToken.toUpperCase().equals("SELECT"))) {
2119 isCYMBALScript = true;
2121 } catch (Exception ex) {
2122 throw new RaptorException(ex);
2125 if ( isCYMBALScript == false ) {
2126 while (nextToken.length() > 0) {
2127 //System.out.println("LastToken " + lastToken + " NextToken " + nextToken);
2130 if (parsedSQL.length() == 0) {
2131 if (nextToken.toUpperCase().equals("SELECT"))
2132 parsedSQL.append("SELECT ");
2134 throw new org.onap.portalsdk.analytics.error.ValidationException(
2135 "The SQL must start with the SELECT keyword.");
2136 } else if (nextToken.toUpperCase().equals("DISTINCT")
2137 && parsedSQL.toString().equals("SELECT ")) {
2138 parsedSQL.append("DISTINCT ");
2139 } else if (nextToken.equals("*")
2140 && (parsedSQL.toString().equals("SELECT ") || parsedSQL.toString().equals(
2141 "SELECT DISTINCT "))) {
2142 throw new org.onap.portalsdk.analytics.error.ValidationException(
2143 "You cannot use \"SELECT *\". Please specify select columns/expressions.");
2144 } else if (nextToken.toUpperCase().equals("FROM")) {
2145 if (lastToken != null) {
2146 updatedReportCols.add(getParseSQLDataColumn(lastToken, null, parsedSQL,
2147 updatedReportCols, false));
2151 parsedSQL.append(" \n");
2152 while (lastParsePos < sql.length()
2153 && Character.isWhitespace(sql.charAt(lastParsePos)))
2155 parsedSQL.append(sql.substring(lastParsePos));
2158 //System.out.println("Next Token " + nextToken);
2159 if (nextToken.charAt(nextToken.length() - 1) == ',') {
2160 // The token ends with ,
2161 nextToken = nextToken.substring(0, nextToken.length() - 1);
2163 if (nextToken.length() == 0) {
2164 if (lastToken != null) {
2165 updatedReportCols.add(getParseSQLDataColumn(lastToken, null,
2166 parsedSQL, updatedReportCols, false));
2168 } // else just comma => ignore it
2170 //System.out.println("Next Token " + nextToken + " is Here" + " Last Token " + lastToken);
2171 if (lastToken != null) {
2172 updatedReportCols.add(getParseSQLDataColumn(lastToken, nextToken,
2173 parsedSQL, updatedReportCols, false));
2176 updatedReportCols.add(getParseSQLDataColumn(nextToken, null,
2177 parsedSQL, updatedReportCols, false));
2180 // The token doesn't end with ,
2181 if (lastToken == null)
2182 lastToken = nextToken;
2184 String token = getNextSQLParseToken(sql, false);
2185 //System.out.println(" ********** " + token + " " + lastToken);
2186 if (!token.toUpperCase().equals("FROM"))
2187 throw new org.onap.portalsdk.analytics.error.ValidationException(
2188 "|FROM keyword or a comma expected after [" + nextToken
2190 //System.out.println("Next Token " + nextToken);
2191 updatedReportCols.add(getParseSQLDataColumn(lastToken, nextToken,
2192 parsedSQL, updatedReportCols, false));
2198 lastParsePos = curSQLParsePos;
2199 nextToken = getNextSQLParseToken(sql, true);
2201 } else { // if CYMBAL Script
2202 nextToken = getNextCYMBALSQLParseToken(sql, true);
2204 Matcher matcher = null;
2205 String extracted = null;
2206 while (nextToken.length() > 0) {
2207 if (lastToken == null) lastToken = nextToken;
2209 if( lastToken.toUpperCase().equals("DO DISPLAY")) {
2210 re = Pattern.compile("each(.*)\\[.(.*?)\\]"); //\\[(.*?)\\]
2211 matcher = re.matcher(nextToken);
2212 if (matcher.find()) {
2213 extracted = matcher.group();
2214 re = Pattern.compile("\\[(.*?)\\]");
2215 matcher = re.matcher(nextToken);
2216 if(matcher.find()) {
2217 extracted = matcher.group();
2218 extracted = extracted.substring(1,extracted.length()-2);
2219 StringTokenizer sToken = new StringTokenizer(extracted);
2220 while(sToken.hasMoreTokens()) {
2221 updatedReportCols.add(getParseSQLDataColumn("", sToken.nextToken(),
2222 new StringBuffer(""), updatedReportCols, true));
2229 lastToken = nextToken;
2230 nextToken = getNextCYMBALSQLParseToken(sql, true);
2234 if (updatedReportCols.size() == 0)
2235 throw new org.onap.portalsdk.analytics.error.ValidationException(
2236 "The SQL statement must have at least one column in the SELECT clause.");
2239 return parsedSQL.toString();
2243 private String getNextCYMBALSQLParseToken(String sql, boolean updateParsePos) {
2244 int braketCount = 0;
2245 boolean isInsideQuote = false;
2246 StringBuffer nextToken = new StringBuffer();
2247 for (int idxNext = curSQLParsePos; idxNext < sql.length(); idxNext++) {
2248 char ch = sql.charAt(idxNext);
2251 nextToken.append(ch);
2255 return nextToken.toString();
2256 } // getNextSQLParseToken
2258 private String getNextSQLParseToken(String sql, boolean updateParsePos) {
2259 int braketCount = 0;
2260 boolean isInsideQuote = false;
2261 StringBuffer nextToken = new StringBuffer();
2262 for (int idxNext = curSQLParsePos; idxNext < sql.length(); idxNext++) {
2263 char ch = sql.charAt(idxNext);
2265 if (Character.isWhitespace(ch) || ch == ',') {
2267 nextToken.append(ch);
2269 if (nextToken.length() == 0)
2271 else if (braketCount == 0 && (!isInsideQuote)) {
2273 curSQLParsePos = idxNext + ((ch == ',') ? 1 : 0);
2275 } else if (ch != ',' && nextToken.charAt(nextToken.length() - 1) != ' ')
2276 nextToken.append(' ');
2278 nextToken.append(ch);
2280 if (ch == '(' || ch == '[')
2282 else if (ch == ')' || ch == ']')
2284 else if (ch == '\''/* ||ch=='\"' */)
2285 isInsideQuote = (!isInsideQuote);
2289 return nextToken.toString();
2290 } // getNextSQLParseToken
2292 private DataColumnType getParseSQLDataColumn(String sqlExpression, String colId,
2293 StringBuffer parsedSQL, Vector updatedReportCols, boolean isCYMBALScript) throws RaptorException {
2294 DataColumnType dct = null;
2296 if (colId != null) {
2297 if (!isParseSQLColID(colId))
2298 throw new org.onap.portalsdk.analytics.error.ValidationException(
2301 + "] must either be a valid column id consisting only of letters, numbers, and underscores, or there must be a comma in front of it.");
2303 dct = getColumnById(colId);
2305 // Getting unique column id
2308 for (int i = 0; (i < sqlExpression.length()) && (colIdN < 2); i++)
2309 if (Character.isLetter(sqlExpression.charAt(i))) {
2310 colId += sqlExpression.toLowerCase().charAt(i);
2314 colIdN = getAllColumns().size() + updatedReportCols.size();
2315 for (boolean idAlreadyUsed = true; idAlreadyUsed; colIdN++) {
2316 String newColId = colId + colIdN;
2317 idAlreadyUsed = false;
2319 for (Iterator iter = getAllColumns().iterator(); iter.hasNext();)
2320 if (newColId.equals(((DataColumnType) iter.next()).getColId())) {
2321 idAlreadyUsed = true;
2326 for (Iterator iter = updatedReportCols.iterator(); iter.hasNext();)
2327 if (newColId.equals(((DataColumnType) iter.next()).getColId())) {
2328 idAlreadyUsed = true;
2333 colId += (colIdN - 1);
2337 dct = (new ObjectFactory()).createDataColumnType();
2338 dct.setColId(colId);
2339 dct.setDisplayWidth(10);
2340 dct.setDisplayAlignment("Left");
2341 dct.setVisible(true);
2342 dct.setGroupBreak(false); // ???
2344 boolean isValidIdentifier = Character.isLetterOrDigit(sqlExpression.charAt(0));
2345 for (int i = 0; i < sqlExpression.length(); i++)
2346 if (!(Character.isLetterOrDigit(sqlExpression.charAt(i))
2347 || (sqlExpression.charAt(i) == '_') || (sqlExpression.charAt(i) == '$'))) {
2348 isValidIdentifier = false;
2352 if (isValidIdentifier) {
2353 dct.setDisplayName(sqlExpression);
2355 dct.setDisplayName(colId);
2359 sqlExpression = sqlExpression.replaceAll(", '", ",'");
2360 dct.setDbColName(sqlExpression);
2361 dct.setColName(sqlExpression);
2362 dct.setCalculated(true);
2363 dct.setColType(AppConstants.CT_CHAR);
2364 dct.setDbColType(AppConstants.CT_CHAR);
2365 adjustColumnType(dct); // ???
2367 if(!isCYMBALScript) {
2368 if (parsedSQL.toString().equals("SELECT ")
2369 || parsedSQL.toString().equals("SELECT DISTINCT "))
2370 parsedSQL.append("\n\t");
2372 parsedSQL.append(", \n\t");
2373 parsedSQL.append(sqlExpression);
2374 parsedSQL.append(" ");
2375 parsedSQL.append(colId);
2379 } // getParseSQLDataColumn
2381 private boolean isParseSQLColID(String token) {
2382 if (nvl(token).length() == 0)
2385 for (int i = 0; i < token.length(); i++) {
2386 char ch = token.charAt(i);
2388 if (i == 0 && ch == '_')
2391 if (!(Character.isLetterOrDigit(ch) || ch == '_'))
2396 } // isParseSQLColID
2398 /*private*/ public String parseReportSQLForDrillDownParams(String reportSQL, DataColumnType dataColumnRequest, HttpServletRequest request){
2399 String param = nvl(dataColumnRequest.getDrillDownParams());
2400 String sql = reportSQL;
2402 while (param.indexOf('[', pos) >= 0) {
2403 int startIdx = param.indexOf('[',pos);
2404 int endIdx = param.indexOf(']',startIdx+1);
2406 StringBuffer sb = new StringBuffer();
2408 sb.append(param.substring(0, startIdx));
2411 if (param.charAt(startIdx + 1) == '#') {
2412 // Parameter is a form field value
2413 String fieldId = param.substring(startIdx + 2, endIdx);
2414 String fieldValue = ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), request.getParameter(fieldId));
2415 sql = Utils.replaceInString(sql, "[" + fieldId.toUpperCase()+"]", fieldValue );
2421 public List getMapMarkers(ReportData rd, org.onap.portalsdk.analytics.xmlobj.ReportMap xmlmap){
2423 ArrayList markers = new ArrayList();
2425 HashMap colHash = new HashMap();
2427 for(rd.reportDataRows.resetNext(); rd.reportDataRows.hasNext(); rNum++) {
2428 DataRow dr = rd.reportDataRows.getNext();
2429 for(dr.resetNext(); dr.hasNext(); ) {
2430 DataValue dv = dr.getNext();
2431 colHash.put(dv.getColId(), dv.getDisplayValueLinkHtml());
2434 for (int i = 0; i < xmlmap.getMarkers().size(); i ++){
2435 Marker marker = new Marker("", "", "");
2436 org.onap.portalsdk.analytics.xmlobj.Marker m = (org.onap.portalsdk.analytics.xmlobj.Marker) xmlmap.getMarkers().get(i);
2437 String address = (String) colHash.get(m.getAddressColumn());
2438 String data = (String) colHash.get(m.getDataColumn());
2439 marker.setAddress(address);
2440 if (xmlmap.getAddAddressInDataYN() != null && xmlmap.getAddAddressInDataYN().equals("Y")){
2441 marker.setData(address + "<br/>" + data);
2444 marker.setData(data);
2446 marker.setColor(m.getMarkerColor());
2447 markers.add(marker);
2448 System.out.println("%%%%%%%%%%%% marker is : " + address + data);
2458 public ReportParamValues getReportParamValues() {
2459 return reportParamValues;
2462 public String getFormFieldFilled(String title) {
2463 if( getFormFieldList()!=null && reportParamValues!=null && nvl(title).length()>0) {
2464 for (Iterator iter1 = getFormFieldList().getFormField().iterator(); iter1.hasNext();) {
2465 FormFieldType fft = (FormFieldType) iter1.next();
2466 String fieldDisplay = getFormFieldDisplayName(fft);
2467 String fieldId = fft.getFieldId();
2468 if(!fft.getFieldType().equals(FormField.FFT_BLANK) && !fft.getFieldType().equals(FormField.FFT_LIST_MULTI) && !fft.getFieldType().equals(FormField.FFT_TEXTAREA)) {
2469 String paramValue = Utils.oracleSafe(nvl(reportParamValues.getParamValue(fieldId)));
2470 title = Utils.replaceInString(title, fieldDisplay, nvl(
2478 public synchronized Object clone() {
2480 return super.clone();
2481 } catch (CloneNotSupportedException e) {
2482 // this shouldn't happen, since we are Cloneable
2483 throw new InternalError("Cloning throws error.");
2487 public VisualManager getVisualManager() {
2488 return visualManager;
2491 public String getReportSQLWithRowNum(String _orderBy, boolean asc) {
2492 String sql = getWholeSQL();
2493 int closeBracketPos = 0;
2494 // Added reportSQLOnlyFirstPart which has Column information with Rownum
2495 return nvl(getReportSQLOnlyFirstPart()) + " " + sql + ") x ";
2499 public int getDisplayMode() {
2500 return DISPLAY_MODE;
2503 public void setDisplayMode(int mode) {
2504 DISPLAY_MODE = mode;
2507 public int getDateOption() {
2511 public void setDateOption(int dateOption) {
2512 DATE_OPTION = dateOption;
2515 public boolean isDisplayColTotals() {
2516 return displayColTotals;
2519 public void setDisplayColTotals(boolean displayColTotals) {
2520 this.displayColTotals = displayColTotals;
2523 public boolean isDisplayRowTotals() {
2524 return displayRowTotals;
2527 public void setDisplayRowTotals(boolean displayRowTotals) {
2528 this.displayRowTotals = displayRowTotals;
2532 private boolean canPersistLinearReport() {
2533 boolean visibleColExist = false;
2535 if (getDataSourceList().getDataSource().size() > 0) {
2536 for (Iterator iter = getAllColumns().iterator(); iter.hasNext();) {
2537 DataColumnType dct = (DataColumnType) iter.next();
2539 if (dct.isVisible()) {
2540 visibleColExist = true;
2546 return visibleColExist;
2547 } // canPersistLinearReport
2549 public void persistLinearReport(HttpServletRequest request)
2550 throws RaptorException {
2551 if (!canPersistLinearReport())
2554 Connection connection = null;
2556 String userID = AppUtils.getUserID(request);
2557 String reportXML = marshal();
2558 logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report " + reportID
2559 + " XML marshalled succesfully"));
2562 verifySQLBasedReportAccess(request);
2563 reportSecurity.reportUpdate(request);
2564 connection = DbUtils.startTransaction();
2565 ReportLoader.updateCustomReportRec(connection, this, reportXML);
2566 ReportLoader.createReportLogEntry(connection, reportID, userID,
2567 AppConstants.RLA_UPDATE, "", "");
2568 logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] DB update report "
2569 + reportID + " succesfull"));
2570 DbUtils.commitTransaction(connection);
2571 } catch (RaptorException e) {
2572 e.printStackTrace();
2573 DbUtils.rollbackTransaction(connection);
2576 DbUtils.clearConnection(connection);
2578 } // persistLinearReport
2580 public void persistDashboardReport(HttpServletRequest request)
2581 throws RaptorException {
2583 Connection connection = null;
2585 String userID = AppUtils.getUserID(request);
2586 String reportXML = marshal();
2587 logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report " + reportID
2588 + " XML marshalled succesfully"));
2591 verifySQLBasedReportAccess(request);
2592 reportSecurity.reportUpdate(request);
2593 connection = DbUtils.startTransaction();
2594 ReportLoader.updateCustomReportRec(connection, this, reportXML);
2595 ReportLoader.createReportLogEntry(connection, reportID, userID,
2596 AppConstants.RLA_UPDATE, "", "");
2597 logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] DB update report "
2598 + reportID + " succesfull"));
2599 DbUtils.commitTransaction(connection);
2600 } catch (RaptorException e) {
2601 e.printStackTrace();
2602 DbUtils.rollbackTransaction(connection);
2605 DbUtils.clearConnection(connection);
2607 } // persistDashboardReport
2608 public String getTotalSql() {
2612 public void setTotalSql(String totalSql) {
2613 this.totalSql = totalSql;
2616 public void setTriggerFormFieldCheck( ReportFormFields FormFieldList, FormField selectedFormField) {
2618 for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
2619 FormField ff = (FormField) iter.next();
2620 if(!ff.getFieldName().equals(selectedFormField.getFieldName())) {
2621 if(nvl(ff.getBaseSQL()).length()>0 && ff.getBaseSQL().indexOf("["+selectedFormField.getFieldDisplayName() +"]")!= -1) {
2622 selectedFormField.setTriggerOtherFormFields(true);
2630 public void setTriggerThisFormFieldCheck( ReportFormFields FormFieldList, FormField selectedFormField) {
2632 String sql = nvl(selectedFormField.getBaseSQL()).length()>0 ? selectedFormField.getBaseSQL():"";
2633 for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
2634 FormField ff = (FormField) iter.next();
2635 if(!ff.getFieldName().equals(selectedFormField.getFieldName())) {
2636 if(sql.indexOf("["+ff.getFieldDisplayName() +"]")!= -1) {
2637 selectedFormField.setTriggerThisFormfield(true);
2646 private boolean isAllowEdit(HttpServletRequest request) {
2647 boolean allowEdit = false;
2648 String userId = AppUtils.getUserID(request);
2650 if( AppUtils.isAdminUser(request) || AppUtils.isSuperUser(request) ) {
2653 if(getOwnerID().equals(userId)) allowEdit = true;
2654 else allowEdit = false;
2656 } catch (RaptorException ex) {
2661 public ReportJSONRuntime createReportJSONRuntime(HttpServletRequest request, ReportData rd) {
2662 String userId = AppUtils.getUserID(request);
2663 ObjectMapper mapper = new ObjectMapper();
2664 ReportJSONRuntime reportJSONRuntime = new ReportJSONRuntime();
2665 reportJSONRuntime.setReportTitle(getReportTitle());
2666 //reportJSONRuntime.setReportSubTitle(getReportSubTitle());
2667 reportJSONRuntime.setReportID(getReportID());
2668 reportJSONRuntime.setReportDescr(getReportDescr());
2669 reportJSONRuntime.setReportName(getReportName());
2670 reportJSONRuntime.setReportSubTitle(getReportSubTitle());
2671 reportJSONRuntime.setAllowSchedule(isAllowSchedule());
2672 reportJSONRuntime.setAllowEdit(isAllowEdit(request));
2673 reportJSONRuntime.setColIdxTobeFreezed(getFrozenColumnId());
2674 reportJSONRuntime.setNumFormCols(getNumFormColsAsInt());
2676 reportJSONRuntime.setBackBtnURL("");
2677 String chartType = getChartType();
2678 boolean displayChart = (nvl(chartType).length()>0)&&getDisplayChart();
2679 boolean displayChartWizard = getDisplayChart();
2680 reportJSONRuntime.setChartAvailable(displayChart);
2681 reportJSONRuntime.setChartWizardAvailable(displayChartWizard);
2682 reportJSONRuntime.setDisplayData(!isDisplayOptionHideData());
2683 reportJSONRuntime.setDisplayForm(!isDisplayOptionHideForm());
2684 reportJSONRuntime.setHideFormFieldsAfterRun(isHideFormFieldAfterRun());
2685 reportJSONRuntime.setDisplayExcel(!isDisplayOptionHideExcelIcons());
2686 reportJSONRuntime.setDisplayPDF(!isDisplayOptionHidePDFIcons());
2687 ArrayList<IdNameValue> formFieldValues = new ArrayList<>();
2688 ArrayList<FormFieldJSON> formFieldJSONList = new ArrayList<>();
2689 if(getReportFormFields()!=null) {
2690 formFieldJSONList = new ArrayList<>(getReportFormFields().size());
2691 for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
2692 formFieldValues = new ArrayList<>();
2693 FormField ff = (FormField) iter.next();
2694 ff.setDbInfo(getDbInfo());
2695 FormFieldJSON ffJSON = new FormFieldJSON();
2696 ffJSON.setFieldId(ff.getFieldName());
2697 ffJSON.setFieldType(ff.getFieldType());
2698 ffJSON.setFieldDisplayName(ff.getFieldDisplayName());
2699 ffJSON.setHelpText(ff.getHelpText());
2700 ffJSON.setValidationType(ff.getValidationType());
2701 ffJSON.setVisible(ff.isVisible());
2702 //ffJSON.setTriggerOtherFormFields(ff.getDependsOn());
2703 IdNameList lookup = null;
2704 lookup = ff.getLookupList();
2705 String selectedValue = "";
2707 IdNameList lookupList = null;
2708 boolean readOnly = false;
2710 if(!ff.hasPredefinedList) {
2711 IdNameSql lu = (IdNameSql) lookup;
2712 String SQL = lu.getSql();
2713 oldSQL = lu.getSql();
2714 setTriggerFormFieldCheck( getReportFormFields(), ff);
2715 ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
2716 SQL = parseAndFillReq_Session_UserValues(request, SQL, userId);
2717 SQL = parseAndFillWithCurrentValues(request, SQL, ff);
2718 String defaultSQL = lu.getDefaultSQL();
2719 defaultSQL = parseAndFillReq_Session_UserValues(request, defaultSQL, userId);
2720 defaultSQL = parseAndFillWithCurrentValues(request, defaultSQL, ff);
2721 lookup = new IdNameSql(-1,SQL,defaultSQL);
2723 lookupList = lookup;
2725 lookup.loadUserData(0, "", ff.getDbInfo(), ff.getUserId());
2726 } catch (Exception e ){ e.printStackTrace(); //throw new RaptorRuntimeException(e);
2729 lookup.trimToSize();
2731 String[] requestValue = request.getParameterValues(ff.getFieldName());
2733 if(lookup != null && lookup.size() > 0) {
2734 for (lookup.resetNext(); lookup.hasNext();) {
2735 IdNameValue value = lookup.getNext();
2736 readOnly = value.isReadOnly();
2737 if(requestValue != null && Arrays.asList(requestValue).contains(value.getId())) {
2738 //if(value.getId().equals(requestValue))
2739 value.setDefaultValue(true);
2740 } else if (AppUtils.nvl(ff.getDefaultValue()).length()>0) {
2741 if(ff.getDefaultValue().equals(value.getId())) {
2742 value.setDefaultValue(true);
2745 if(!(ff.getFieldType().equals(FormField.FFT_CHECK_BOX) || ff.getFieldType().equals(FormField.FFT_COMBO_BOX) || ff.getFieldType().equals(FormField.FFT_LIST_BOX)
2746 || ff.getFieldType().equals(FormField.FFT_LIST_MULTI)) && value.isDefaultValue())
2747 formFieldValues.add(value);
2748 else if(ff.getFieldType().equals(FormField.FFT_CHECK_BOX) || ff.getFieldType().equals(FormField.FFT_COMBO_BOX) || ff.getFieldType().equals(FormField.FFT_LIST_BOX)
2749 || ff.getFieldType().equals(FormField.FFT_LIST_MULTI)) {
2750 formFieldValues.add(value);
2755 if(requestValue!=null && requestValue.length>0) {
2756 IdNameValue value = new IdNameValue(requestValue[0], requestValue[0], true, false);
2757 formFieldValues.add(value);
2762 setTriggerFormFieldCheck( getReportFormFields(), ff);
2763 ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
2764 String[] requestValue = request.getParameterValues(ff.getFieldName());
2765 if(requestValue!=null && requestValue.length>0) {
2766 IdNameValue value = new IdNameValue(requestValue[0], requestValue[0], true, false);
2767 formFieldValues.add(value);
2768 } else if (AppUtils.nvl(ff.getDefaultValue()).length()>0) {
2769 IdNameValue value = new IdNameValue(ff.getDefaultValue(), ff.getDefaultValue(), true, false);
2770 formFieldValues.add(value);
2773 if(!ff.hasPredefinedList) {
2774 if(oldSQL != null && !oldSQL.equals("") && lookup!=null) {
2775 ((IdNameSql)lookup).setSQL(oldSQL);
2781 ffJSON.setFormFieldValues(formFieldValues);
2782 formFieldJSONList.add(ffJSON);
2785 reportJSONRuntime.setFormFieldList(formFieldJSONList);
2786 //reportJSONRuntime.setReportDataColumns(get);
2788 Map<String,Object> dvJSON = null;
2791 reportJSONRuntime.setTotalRows(getReportDataSize());
2792 ArrayList<ColumnHeader> colList = new ArrayList<>();
2793 ArrayList<Map<String,Object>> reportDataRows = new ArrayList<>();
2794 ArrayList<Map<String,Object>> reportTotalDataRows = new ArrayList<Map<String,Object>>();
2795 for(rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext(); ) {
2797 ColumnHeaderRow chr = rd.reportColumnHeaderRows.getNext();
2798 for(chr.resetNext(); chr.hasNext(); ) {
2799 colList.add(chr.getNext());
2802 if(getReportDataSize() > 0) {
2804 for(rd.reportDataRows.resetNext(); rd.reportDataRows.hasNext(); count++) {
2805 dvJSON = new HashMap<>();
2806 DataRow dr = rd.reportDataRows.getNext();
2807 for(dr.resetNext(); dr.hasNext(); ) {
2808 DataValue dv = dr.getNext();
2810 dvJSON.put(dv.getColId(), dv);
2811 } catch (Exception ex) {
2812 ex.printStackTrace();
2816 reportDataRows.add(dvJSON);
2819 if(rd.reportDataTotalRow != null) {
2820 for(rd.reportDataTotalRow.resetNext(); rd.reportDataTotalRow.hasNext(); count++) {
2821 dvJSON = new HashMap<String,Object>();
2822 DataRow dr = rd.reportDataTotalRow.getNext();
2823 for(dr.resetNext(); dr.hasNext(); ) {
2824 DataValue dv = dr.getNext();
2826 dvJSON.put(dv.getColId(), dv);
2827 } catch (Exception ex) {
2828 ex.printStackTrace();
2832 reportTotalDataRows.add(dvJSON);
2835 reportJSONRuntime.setReportDataColumns(colList);
2836 reportJSONRuntime.setReportDataRows(reportDataRows);
2837 //reportJSONRuntime.setSqlWhole(getWholeSQL());
2838 reportJSONRuntime.setPageSize(getPageSize());
2839 reportJSONRuntime.setReportTotalDataRows(reportTotalDataRows);
2843 if(getReportDataSize() <= 0) {
2844 reportJSONRuntime.setMessage(getEmptyMessage());
2846 reportJSONRuntime.setSqlWhole(getWholeSQL());
2847 return reportJSONRuntime;
2851 public ReportJSONRuntime createFormFieldJSONRuntime(HttpServletRequest request) {
2852 String userId = AppUtils.getUserID(request);
2853 ObjectMapper mapper = new ObjectMapper();
2854 ReportJSONRuntime reportJSONRuntime = new ReportJSONRuntime();
2855 reportJSONRuntime.setReportTitle(getReportTitle());
2856 reportJSONRuntime.setReportID(getReportID());
2857 reportJSONRuntime.setReportName(getReportName());
2858 reportJSONRuntime.setReportSubTitle(getReportSubTitle());
2859 reportJSONRuntime.setAllowEdit(isAllowEdit(request));
2860 reportJSONRuntime.setNumFormCols(getNumFormColsAsInt());
2861 ArrayList<IdNameValue> formFieldValues = new ArrayList<>();
2862 ArrayList<FormFieldJSON> formFieldJSONList = new ArrayList<>();
2863 if(reportFormFields!=null) {
2864 formFieldJSONList = new ArrayList<>(reportFormFields.size());
2865 for (Iterator iter = reportFormFields.iterator(); iter.hasNext();) {
2866 formFieldValues = new ArrayList<>();
2867 FormField ff = (FormField) iter.next();
2868 FormFieldJSON ffJSON = new FormFieldJSON();
2869 ffJSON.setFieldId(ff.getFieldName());
2870 ffJSON.setFieldType(ff.getFieldType());
2871 ffJSON.setFieldDisplayName(ff.getFieldDisplayName());
2872 ffJSON.setHelpText(ff.getHelpText());
2873 ffJSON.setValidationType(ff.getValidationType());
2874 ffJSON.setFormFieldValues(formFieldValues);
2875 ffJSON.setVisible(ff.isVisible());
2876 formFieldJSONList.add(ffJSON);
2878 for (Iterator iter = reportFormFields.iterator(); iter.hasNext();) {
2879 formFieldValues = new ArrayList<>();
2880 FormField ff = (FormField) iter.next();
2881 ff.setDbInfo(getDbInfo());
2882 for (Iterator iter1 = formFieldJSONList.iterator(); iter1.hasNext();) {
2883 FormFieldJSON ffJSON = (FormFieldJSON) iter1.next();
2884 if(ffJSON.getFieldId().equals(ff.getFieldName())) {
2885 IdNameList lookup = null;
2886 lookup = ff.getLookupList();
2887 String selectedValue = "";
2889 IdNameList lookupList = null;
2890 boolean readOnly = false;
2892 if(!ff.hasPredefinedList) {
2893 IdNameSql lu = (IdNameSql) lookup;
2894 String SQL = lu.getSql();
2895 oldSQL = lu.getSql();
2896 setTriggerFormFieldCheck( getReportFormFields(), ff);
2897 ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
2898 setTriggerThisFormFieldCheck(getReportFormFields(), ff);
2899 SQL = parseAndFillReq_Session_UserValues(request, SQL, userId);
2900 SQL = parseAndFillOtherFormfieldValues(request, SQL, userId, formFieldJSONList);
2901 //SQL = parseAndFillWithCurrentValues(formGrid,SQL, ff);
2902 String defaultSQL = lu.getDefaultSQL();
2903 defaultSQL = parseAndFillReq_Session_UserValues(request, defaultSQL, userId);
2904 //defaultSQL = parseAndFillWithCurrentValues(formGrid,defaultSQL, ff);
2905 lookup = new IdNameSql(-1,SQL,defaultSQL);
2907 lookupList = lookup;
2909 lookup.loadUserData(0, "", ff.getDbInfo(), ff.getUserId());
2910 } catch (Exception e ){ e.printStackTrace(); //throw new RaptorRuntimeException(e);
2913 lookup.trimToSize();
2915 String requestValue = request.getParameter(ff.getFieldName());
2916 ArrayList<String> requestValueList = new ArrayList<>();
2917 requestValueList.add(requestValue);
2919 /*if(ff.isTriggerThisFormfield()) {
2920 refreshFormFieldsWithLatestValue(request, userId, ff, formFieldJSONList);
2924 for (lookup.resetNext(); lookup.hasNext();) {
2925 IdNameValue value = lookup.getNext();
2926 readOnly = value.isReadOnly();
2927 if(nvl(requestValue).length()>0) {
2928 if(value.getId().equals(requestValue))
2929 value.setDefaultValue(true);
2931 formFieldValues.add(value);
2936 setTriggerFormFieldCheck( getReportFormFields(), ff);
2937 ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
2938 String[] requestValue = request.getParameterValues(ff.getFieldName());
2939 if(requestValue!=null && requestValue.length>0) {
2940 IdNameValue value = new IdNameValue(requestValue[0], requestValue[0], true, false);
2941 formFieldValues.add(value);
2942 } else if (AppUtils.nvl(ff.getDefaultValue()).length()>0) {
2943 IdNameValue value = new IdNameValue(ff.getDefaultValue(), ff.getDefaultValue(), true, false);
2944 formFieldValues.add(value);
2947 if(!ff.hasPredefinedList) {
2948 if(oldSQL != null && !oldSQL.equals("") && lookup!=null) {
2949 ((IdNameSql)lookup).setSQL(oldSQL);
2954 //if(!ff.isTriggerThisFormfield()) {
2955 ffJSON.setFormFieldValues(formFieldValues);
2965 reportJSONRuntime.setFormFieldList(formFieldJSONList);
2966 //reportJSONRuntime.setReportDataColumns(get);
2968 return reportJSONRuntime;
2973 private String parseAndFillOtherFormfieldValues(HttpServletRequest request, String SQL, String userId,
2974 ArrayList<FormFieldJSON> formFieldJSONList) {
2975 ArrayList<IdNameValue> formFieldValues = new ArrayList<>();
2976 String selectedValue = "";
2977 String displayName = "";
2978 for (Iterator iter1 = formFieldJSONList.iterator(); iter1.hasNext();) {
2979 FormFieldJSON ffJSON = (FormFieldJSON) iter1.next();
2980 String fieldId = ffJSON.getFieldId();
2981 displayName = ffJSON.getFieldDisplayName();
2982 if (request.getParameter(fieldId) != null && request.getParameter(fieldId).length() > 0) {
2983 if (ffJSON.getFieldType().equals(FormField.FFT_LIST_MULTI)
2984 || ffJSON.getFieldType().equals(FormField.FFT_CHECK_BOX)) {
2986 selectedValue = formatListValue(displayName, Utils.oracleSafe(request.getParameter(fieldId)),
2987 null, false, true, null, null);
2988 } catch (RaptorException e) {
2989 e.printStackTrace();
2992 selectedValue = "'" + request.getParameter(fieldId) + "'";
2995 ArrayList<IdNameValue> formfieldvalues = ffJSON.getFormFieldValues();
2996 for (int i = 0; i < formfieldvalues.size(); i++) {
2997 IdNameValue formfieldItem = formfieldvalues.get(i);
2998 if (formfieldItem.isDefaultValue()) {
2999 selectedValue = formfieldItem.getId();
3003 SQL = Utils.replaceInString(SQL, "[" + displayName + "]", selectedValue);
3008 public String formatSelectedItems(List selectedItems, String type) {
3009 StringBuffer value = new StringBuffer("");
3011 boolean multiple = false;
3012 if(type.equals("LIST_MULTI_SELECT"))
3014 //multiple = (selectedItems.size()>1);
3015 for(Iterator iter = selectedItems.iterator(); iter.hasNext(); ) {
3017 String entry = (String) iter.next();
3018 if(count == 1 && multiple)
3020 //if(type.equals(FormField.FFT_CHECK_BOX))
3021 /*if(type.equals(FormField.FFT_CHECK_BOX))
3022 value.append("'"+Utils.oracleSafe(entry)+"'");
3023 else*/ if (type.equals(FormField.FFT_LIST_MULTI))
3024 value.append("'"+Utils.oracleSafe(entry)+"'");
3025 else if(type.equals(FormField.FFT_LIST_BOX))
3026 value.append(Utils.oracleSafe(entry));
3028 value.append("'"+Utils.oracleSafe(entry)+"'");
3029 if((count < selectedItems.size()) && multiple)
3031 if((count == selectedItems.size()) && multiple)
3035 if(value.length()>0)
3036 return value.toString();
3041 public String parseAndFillWithCurrentValues(HttpServletRequest request, String sql, FormField source_Formfield) {
3043 if (getFormFieldList() != null) {
3044 for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
3045 FormFieldType fft = (FormFieldType) iter.next();
3046 String fieldId = fft.getFieldId();
3047 String fieldDisplay = getFormFieldDisplayName(fft);
3048 String formfield_value = "";
3049 List<String> selectedItems = new ArrayList<>();
3050 //Added so that Combo Box in old RAPTOR definition is translated to List box
3051 if(fft.getFieldType().equals(FormField.FFT_COMBO_BOX)) {
3052 fft.setFieldType(FormField.FFT_LIST_BOX);
3054 if(!fft.getFieldType().equals(FormField.FFT_BLANK)) {
3055 //if(source_Formfield==null || (source_Formfield!=null && !fft.getFieldId().equals(source_Formfield.getFieldName()))) {
3057 // Add param base sql
3058 if(fft.getFieldType().equals(FormField.FFT_LIST_MULTI) || fft.getFieldType().equals(FormField.FFT_CHECK_BOX)) {
3059 if(request.getParameterValues(fieldId)!=null && request.getParameterValues(fieldId).length > 0) {
3061 selectedItems = Arrays.asList(request.getParameterValues(fieldId));
3062 formfield_value = formatSelectedItems(selectedItems, fft.getFieldType());
3064 formfield_value = "";
3066 } else if(fft.getFieldType().equals(FormField.FFT_RADIO_BTN)) {
3067 if(request.getParameter(fieldId)!=null) {
3068 formfield_value = request.getParameter(fieldId);
3070 formfield_value = "";
3072 } else if (fft.getFieldType().equals(FormField.FFT_HIDDEN)) {
3073 if(request.getParameter(fieldId)!=null) {
3074 formfield_value = request.getParameter(fieldId);
3076 formfield_value = "";
3078 } else if((fft.getFieldType().equals(FormField.FFT_TEXT) || fft.getFieldType().equals(FormField.FFT_TEXTAREA)) &&
3079 (!fft.getValidationType().equals(FormField.VT_DATE) && !fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)&&
3080 !fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) && !fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) ) {
3081 if(request.getParameter(fieldId)!=null) {
3082 formfield_value = request.getParameter(fieldId);
3084 formfield_value = "";
3086 } else if (fft.getValidationType().equals(FormField.VT_DATE) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)||
3087 fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
3088 /*if(formGrid.hasFellow(fieldId, true)) {
3089 Datebox tb = (Datebox) formGrid.getFellowIfAny(fieldId, true);
3091 formfield_value = tb.getText();
3092 } catch (WrongValueException ex) {
3093 formfield_value = "";
3095 if(AppUtils.nvl(formfield_value).length() > 0) {
3096 if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)) {
3097 if(formGrid.hasFellow(fieldId+"_Hr", true)) {
3098 Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
3099 formfield_value = formfield_value + " " + hiddenLbHr.getValue();
3101 } else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN)) {
3102 if(formGrid.hasFellow(fieldId+"_Min", true)) {
3103 Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
3104 //formfield_value = formfield_value + " " + hiddenLbHr.getValue();
3105 Label hiddenLbMin = (Label) formGrid.getFellowIfAny(fieldId+"_Min", true);
3106 formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue();
3109 } else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
3110 if(formGrid.hasFellow(fieldId+"_Sec", true)) {
3111 Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
3112 //formfield_value = formfield_value + " " + hiddenLbHr.getValue();
3113 Label hiddenLbMin = (Label) formGrid.getFellowIfAny(fieldId+"_Min", true);
3114 //formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue();
3115 Label hiddenLbSec = (Label) formGrid.getFellowIfAny(fieldId+"_Sec", true);
3116 formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue()+ ":" +hiddenLbSec.getValue();
3123 formfield_value = "";
3125 } else if ((fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)||
3126 fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC))) {
3127 /*if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)||
3128 fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
3129 if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)) {
3130 if(formGrid.hasFellow(fieldId+"_Hr", true)) {
3131 Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
3132 formfield_value = formfield_value + " " + hiddenLbHr.getValue();
3134 } else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN)) {
3135 if(formGrid.hasFellow(fieldId+"_Min", true)) {
3136 Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
3137 //formfield_value = formfield_value + " " + hiddenLbHr.getValue();
3138 Label hiddenLbMin = (Label) formGrid.getFellowIfAny(fieldId+"_Min", true);
3139 formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue();
3142 } else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
3143 if(formGrid.hasFellow(fieldId+"_Sec", true)) {
3144 Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
3145 //formfield_value = formfield_value + " " + hiddenLbHr.getValue();
3146 Label hiddenLbMin = (Label) formGrid.getFellowIfAny(fieldId+"_Min", true);
3147 //formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue();
3148 Label hiddenLbSec = (Label) formGrid.getFellowIfAny(fieldId+"_Sec", true);
3149 formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue()+ ":" +hiddenLbSec.getValue();
3155 } else if (fft.getFieldType().equals(FormField.FFT_TEXT_W_POPUP)) {
3156 if(request.getParameter(fieldId)!=null) {
3157 formfield_value = request.getParameter(fieldId);
3159 formfield_value = "";
3161 } else if (fft.getFieldType().equals(FormField.FFT_LIST_BOX)) {
3162 if(request.getParameter(fieldId)!=null) {
3163 formfield_value = request.getParameter(fieldId);
3165 formfield_value = "";
3169 if(nvl(formfield_value).length()>0) {
3170 sql = Utils.replaceInString(sql, fieldDisplay, formfield_value);
3172 sql = Utils.replaceInString(sql, "'"+fieldDisplay+"'", "null");
3173 sql = Utils.replaceInString(sql, fieldDisplay, "null");
3174 //sql = Utils.replaceInString(sql, fieldDisplay, "''");
3181 public String parseAndFillReq_Session_UserValues(HttpServletRequest request, String sql, String user_id) {
3182 HttpSession session = request.getSession();
3184 String[] reqParameters = Globals.getRequestParams().split(",");
3185 String[] sessionParameters = Globals.getSessionParams().split(",");
3186 String[] scheduleSessionParameters = Globals.getSessionParamsForScheduling().split(",");
3189 if(AppUtils.nvl(sql).length()>0) {
3190 for (int i = 0; i < reqParameters.length; i++) {
3191 if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
3192 sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
3193 else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
3194 sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
3197 for (int i = 0; i < scheduleSessionParameters.length; i++) {
3198 //debugLogger.debug(" Session " + " scheduleSessionParameters[i] " + scheduleSessionParameters[i].toUpperCase() + " " + request.getParameter(scheduleSessionParameters[i]));
3199 if(request.getParameter(scheduleSessionParameters[i])!=null && request.getParameter(scheduleSessionParameters[i]).trim().length()>0 )
3200 sql = Utils.replaceInString(sql, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
3201 if(request.getAttribute(scheduleSessionParameters[i])!=null && ((String)request.getAttribute(scheduleSessionParameters[i])).trim().length()>0 )
3202 sql = Utils.replaceInString(sql, "[" + scheduleSessionParameters[i].toUpperCase()+"]", (String) request.getAttribute(scheduleSessionParameters[i]) );
3206 for (int i = 0; i < sessionParameters.length; i++) {
3207 //if(!sessionParameters[i].startsWith("ff"))
3208 //fieldSQL = Utils.replaceInString(fieldSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i].toUpperCase()) );
3210 if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0) {
3211 //debugLogger.debug(" Session " + " sessionParameters[i] " + sessionParameters[i] + " " + (String)session.getAttribute(sessionParameters[i]));
3212 sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
3216 sql = Utils.replaceInString(sql, "[USERID]", user_id);
3217 sql = Utils.replaceInString(sql, "[USER_ID]", user_id);
3218 sql = Utils.replaceInString(sql, "[LOGGED_USERID]", user_id);