f0829d29980436d7a5e1d642451ed6aa9ce814be
[portal/sdk.git] /
1 /*
2  * ============LICENSE_START==========================================
3  * ONAP Portal SDK
4  * ===================================================================
5  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6  * ===================================================================
7  *
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
12  *
13  *             http://www.apache.org/licenses/LICENSE-2.0
14  *
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.
20  *
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
25  *
26  *             https://creativecommons.org/licenses/by/4.0/
27  *
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.
33  *
34  * ============LICENSE_END============================================
35  *
36  *
37  */
38 package org.onap.portalsdk.analytics.controller;
39
40 import java.text.SimpleDateFormat;
41 import java.util.ArrayList;
42 import java.util.Calendar;
43 import java.util.Collections;
44 import java.util.Iterator;
45 import java.util.List;
46 import java.util.TimeZone;
47
48 import javax.servlet.http.HttpServletRequest;
49 import javax.xml.datatype.DatatypeConfigurationException;
50 import javax.xml.datatype.DatatypeFactory;
51 import javax.xml.datatype.XMLGregorianCalendar;
52
53 import org.onap.portalsdk.analytics.error.RaptorException;
54 import org.onap.portalsdk.analytics.error.ValidationException;
55 import org.onap.portalsdk.analytics.model.ReportHandler;
56 import org.onap.portalsdk.analytics.model.ReportLoader;
57 import org.onap.portalsdk.analytics.model.base.IdNameValue;
58 import org.onap.portalsdk.analytics.model.base.OrderBySeqComparator;
59 import org.onap.portalsdk.analytics.model.base.OrderSeqComparator;
60 import org.onap.portalsdk.analytics.model.definition.ReportDefinition;
61 import org.onap.portalsdk.analytics.model.definition.ReportSchedule;
62 import org.onap.portalsdk.analytics.model.runtime.FormField;
63 import org.onap.portalsdk.analytics.model.runtime.ReportRuntime;
64 import org.onap.portalsdk.analytics.system.AppUtils;
65 import org.onap.portalsdk.analytics.system.DbUtils;
66 import org.onap.portalsdk.analytics.system.Globals;
67 import org.onap.portalsdk.analytics.util.AppConstants;
68 import org.onap.portalsdk.analytics.util.DataSet;
69 import org.onap.portalsdk.analytics.util.XSSFilter;
70 import org.onap.portalsdk.analytics.xmlobj.ChartDrillFormfield;
71 import org.onap.portalsdk.analytics.xmlobj.ColFilterType;
72 import org.onap.portalsdk.analytics.xmlobj.DataColumnType;
73 import org.onap.portalsdk.analytics.xmlobj.DataSourceType;
74 import org.onap.portalsdk.analytics.xmlobj.FormFieldType;
75 import org.onap.portalsdk.analytics.xmlobj.FormatType;
76 import org.onap.portalsdk.analytics.xmlobj.JavascriptItemType;
77 import org.onap.portalsdk.analytics.xmlobj.Marker;
78 import org.onap.portalsdk.analytics.xmlobj.ObjectFactory;
79 import org.onap.portalsdk.analytics.xmlobj.SemaphoreType;
80 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
81
82 /**<HR/>
83  * This class is part of <B><I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I></B><BR/>
84  * <HR/>
85  *
86  * --------------------------------------------------------------------------------------------------<BR/>
87  * <B>WizardProcessor.java</B> - This class is used to process the user input provided in the wizard.<BR/>
88  * It is called in creation as well as updation process. It builds report xml via JAXB using user<BR/>
89  * input. This is vital one, to store meta information of each report<BR/>
90  * ---------------------------------------------------------------------------------------------------<BR/>
91  *
92  *
93  * <U>Change Log</U><BR/><BR/>
94  *
95  * 31-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> For Time Series multi series property is exposed. </LI></UL>
96  * 28-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> If user login id is null, it would display user name when user is added for schedule. </LI></UL>
97  * 18-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> request Object is passed to prevent caching user/roles - Datamining/Hosting. </LI></UL>
98  * 12-Aug-2009 : Version 8.5 (Sundar); <UL><LI> For Line Charts too options are captured and rendering is customized. </LI></UL>
99  * 29-Jul-2009 : Version 8.4 (Sundar); <UL><LI> Maximum Excel Download size would be persisted if changed. </LI></UL>
100  * 14-Jul-2009 : Version 8.4 (Sundar); <UL><LI> Schedule feature is added to Dashboard Reports. </LI></UL>
101  * 29-Jun-2009 : Version 8.4 (Sundar); <UL><LI> Options for <I>Compare to Previous year Chart</I> are processed.</LI>
102  *                                                                              <LI> In the Bar chart Last Occuring Series/Category can be plotted as Bar or Line Renderer. </LI>
103  *                                                                        </UL>
104  * 22-Jun-2009 : Version 8.4 (Sundar); <UL><LI> processChart method is modified to accommodate creating
105  * Bar Charts, Time Difference Charts and adding generic chart options.</LI></UL>
106  *
107  */
108
109 public class WizardProcessor extends org.onap.portalsdk.analytics.RaptorObject {
110         private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(WizardProcessor.class);
111
112         public static Calendar getCalendar(XMLGregorianCalendar xmlCalendar){
113             TimeZone timeZone = xmlCalendar.getTimeZone(xmlCalendar.getTimezone());
114             Calendar calendar = Calendar.getInstance(timeZone);
115             calendar.set(Calendar.YEAR,xmlCalendar.getYear());
116             calendar.set(Calendar.MONTH,xmlCalendar.getMonth()-1);
117             calendar.set(Calendar.DATE,xmlCalendar.getDay());
118             calendar.set(Calendar.HOUR_OF_DAY,xmlCalendar.getHour());
119             calendar.set(Calendar.MINUTE,xmlCalendar.getMinute());
120             calendar.set(Calendar.SECOND,xmlCalendar.getSecond());
121             return calendar;
122         }
123
124         public WizardProcessor() {
125         }
126
127         private String adjustDataType(String oracleDataType) {
128                 return "VARCHAR2".equals(oracleDataType) ? AppConstants.CT_CHAR : oracleDataType;
129                 // Probably should be expanded to convert any CHAR or VARCHAR type to
130                 // CT_CHAR, number type to CT_NUMBER and date to CT_DATE
131         } // adjustDataType
132
133         public void persistReportDefinition(HttpServletRequest request, ReportDefinition rdef)
134                         throws RaptorException {
135                 ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(
136                                 AppConstants.SI_REPORT_RUNTIME);
137                 if (rr != null && rr.getReportID().equals(rdef.getReportID()))
138                         request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
139                 rdef.persistReport(request);
140         } // persistReportDefinition
141
142         public void processWizardStep(HttpServletRequest request) throws Exception {
143                 String action = nvl(request.getParameter(AppConstants.RI_WIZARD_ACTION),
144                                 AppConstants.WA_BACK);
145
146                 String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
147                 ReportDefinition rdef = (new ReportHandler()).loadReportDefinition(request, reportID);
148                 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
149
150                 String curStep = rdef.getWizardSequence().getCurrentStep();
151                 String curSubStep = rdef.getWizardSequence().getCurrentSubStep();
152                 if (AppUtils.getRequestNvlValue(request, "showDashboardOptions").length()<=0)
153                    request.setAttribute("showDashboardOptions", "F");
154         logger.debug(EELFLoggerDelegate.debugLogger, ("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^curStep " + curStep + " " + curSubStep + " " + action));
155                 boolean reportUpdated = false;
156                 if (!action.equals(AppConstants.WA_BACK)) {
157                         if (curStep.equals(AppConstants.WS_DEFINITION)) {
158                                 reportUpdated = processDefinition(request);
159                         } else if (curStep.equals(AppConstants.WS_SQL)) {
160                                 if (action.equals(AppConstants.WA_VALIDATE))
161                                         reportUpdated = processValidateSQL(request);
162                         } else if (curStep.equals(AppConstants.WS_TABLES)) {
163                                 if (curSubStep.equals(AppConstants.WSS_ADD))
164                                         reportUpdated = processTableAdd(request);
165                                 else if (curSubStep.equals(AppConstants.WSS_EDIT))
166                                         reportUpdated = processTableEdit(request);
167                                 else if (action.equals(AppConstants.WA_DELETE))
168                                         reportUpdated = processTableDelete(request);
169                         } else if (curStep.equals(AppConstants.WS_COLUMNS)) {
170                                 if (curSubStep.equals(AppConstants.WSS_ADD)
171                                                 || curSubStep.equals(AppConstants.WSS_EDIT) || action.equals(AppConstants.WA_SAVE) || action.equals(AppConstants.WA_NEXT)) {
172                                         reportUpdated = processColumnAddEdit(request, curSubStep
173                                                         .equals(AppConstants.WSS_EDIT) || curSubStep
174                                                         .equals(AppConstants.WA_MODIFY));
175                                 }
176                                 else if (curSubStep.equals(AppConstants.WSS_ADD_MULTI))
177                                         reportUpdated = processColumnAddMulti(request);
178                                 else if (curSubStep.equals(AppConstants.WSS_ORDER_ALL))
179                                         reportUpdated = processColumnOrderAll(request);
180                                 else if (action.equals(AppConstants.WA_DELETE))
181                                         reportUpdated = processColumnDelete(request);
182                                 else if (action.equals(AppConstants.WA_MOVE_UP))
183                                         reportUpdated = processColumnMoveUp(request);
184                                 else if (action.equals(AppConstants.WA_MOVE_DOWN))
185                                         reportUpdated = processColumnMoveDown(request);
186                         } else if (curStep.equals(AppConstants.WS_FORM_FIELDS)) {
187                                 if (curSubStep.equals(AppConstants.WSS_ADD)
188                                                 || curSubStep.equals(AppConstants.WSS_EDIT))
189                                         reportUpdated = processFormFieldAddEdit(request, curSubStep
190                                                         .equals(AppConstants.WSS_EDIT), action);
191                                 else if (action.equals(AppConstants.WA_DELETE))
192                                         reportUpdated = processFormFieldDelete(request);
193                                 else if (action.equals(AppConstants.WA_MOVE_UP))
194                                         reportUpdated = processFormFieldMoveUp(request);
195                                 else if (action.equals(AppConstants.WA_MOVE_DOWN))
196                                         reportUpdated = processFormFieldMoveDown(request);
197                                 else if (action.equals(AppConstants.WSS_ADD_BLANK))
198                                         reportUpdated = processFormFieldBlank(request);
199                                 else if (action.equals(AppConstants.WSS_INFO_BAR))
200                                         reportUpdated = processFormFieldInfoBar(request);
201                         } else if (curStep.equals(AppConstants.WS_FILTERS)) {
202                                 if (curSubStep.equals(AppConstants.WSS_ADD)
203                                                 || curSubStep.equals(AppConstants.WSS_EDIT))
204                                         reportUpdated = processFilterAddEdit(request, curSubStep
205                                                         .equals(AppConstants.WSS_EDIT));
206                                 else if (action.equals(AppConstants.WA_DELETE))
207                                         reportUpdated = processFilterDelete(request);
208                         } else if (curStep.equals(AppConstants.WS_SORTING)) {
209                                 if (curSubStep.equals(AppConstants.WSS_ADD)
210                                                 || curSubStep.equals(AppConstants.WSS_EDIT))
211                                         reportUpdated = processSortAddEdit(request, curSubStep
212                                                         .equals(AppConstants.WSS_EDIT));
213                                 else if (curSubStep.equals(AppConstants.WSS_ORDER_ALL))
214                                         reportUpdated = processSortOrderAll(request);
215                                 else if (action.equals(AppConstants.WA_DELETE))
216                                         reportUpdated = processSortDelete(request);
217                                 else if (action.equals(AppConstants.WA_MOVE_UP))
218                                         reportUpdated = processSortMoveUp(request);
219                                 else if (action.equals(AppConstants.WA_MOVE_DOWN))
220                                         reportUpdated = processSortMoveDown(request);
221                         } else if (curStep.equals(AppConstants.WS_JAVASCRIPT)) {
222                                 if (action.equals(AppConstants.WSS_ADD))
223                                         reportUpdated = processAddJavascriptElement(request);
224                                 else if (action.equals(AppConstants.WA_SAVE))
225                                         reportUpdated = processSaveJavascriptElement(request);
226                                 else if (action.equals(AppConstants.WA_DELETE))
227                                         reportUpdated = processDeleteJavascriptElement(request);
228                                 else
229                                         reportUpdated = processJavascript(request);
230                         } else if (curStep.equals(AppConstants.WS_CHART)) {
231                                 reportUpdated = processChart(request, action);
232                         } else if (curStep.equals(AppConstants.WS_USER_ACCESS)) {
233                                 reportUpdated = processUserAccess(request, action);
234                         } else if (curStep.equals(AppConstants.WS_REPORT_LOG)) {
235                                 if (action.equals(AppConstants.WA_DELETE_USER))
236                                         reportUpdated = processClearLog(request);
237                         } else if (curStep.equals(AppConstants.WS_SCHEDULE)) {
238                                 reportUpdated = processSchedule(request, action);
239                         } else if(curStep.equals(AppConstants.WS_DATA_FORECASTING)) {
240                                 reportUpdated = processForecasting(request, action);
241                         }
242                         /****For Report Maps - Start*****/
243                         else if (curStep.equals(AppConstants.WS_MAP)) {
244                                 reportUpdated = processMap(request, action);
245                         }
246                         /****For Report Maps - End*****/
247
248                         // else
249             }
250                 if (reportUpdated)
251                         persistReportDefinition(request, rdef);
252         } // processWizardStep
253
254         public void processImportSemaphorePopup(HttpServletRequest request) throws RaptorException {
255                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
256                                 AppConstants.SI_REPORT_DEFINITION);
257
258                 String importReportId = AppUtils
259                                 .getRequestNvlValue(request, AppConstants.RI_REPORT_ID);
260                 ReportRuntime rr = (new ReportHandler()).loadReportRuntime(request, importReportId,
261                                 false);
262
263                 ArrayList importedList = new ArrayList();
264                 if (rr.getSemaphoreList() != null)
265                         for (Iterator iter = rr.getSemaphoreList().getSemaphore().iterator(); iter
266                                         .hasNext();) {
267                                 SemaphoreType sem = rdef.addSemaphore(new ObjectFactory(),
268                                                 (SemaphoreType) iter.next());
269                                 importedList
270                                                 .add(new IdNameValue(sem.getSemaphoreId(), sem.getSemaphoreName()));
271                         } // for
272
273                 if (!importedList.isEmpty()) {
274                         request.setAttribute(AppConstants.RI_DATA_SET, importedList);
275                         persistReportDefinition(request, rdef);
276                 } // if
277         } // processImportSemaphorePopup
278
279         public void processSemaphorePopup(HttpServletRequest request) throws RaptorException {
280                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
281                                 AppConstants.SI_REPORT_DEFINITION);
282
283                 String semaphoreId = AppUtils.getRequestNvlValue(request, "semaphoreId");
284                 String semaphoreName = AppUtils.getRequestNvlValue(request, "semaphoreName");
285                 String semaphoreType = AppUtils.getRequestNvlValue(request, "semaphoreType");
286
287                 SemaphoreType semaphore = rdef.getSemaphoreById(semaphoreId);
288                 if (semaphore == null) {
289                         semaphore = rdef.addSemaphoreType(new ObjectFactory(), semaphoreName,
290                                         semaphoreType, null);
291                         semaphoreId = semaphore.getSemaphoreId();
292                         request.setAttribute("semaphoreId", semaphoreId);
293                 } else {
294                         rdef.deleteSemaphore(semaphore);
295                         semaphore.setSemaphoreName(semaphoreName);
296                         semaphore.setSemaphoreType(semaphoreType);
297
298                         rdef.setSemaphore(semaphore);
299                 }
300
301                 String[] formatId = request.getParameterValues("formatId");
302                 String[] lessThanValue = request.getParameterValues("lessThanValue");
303                 String[] expression = request.getParameterValues("expression");
304                 String[] bold = request.getParameterValues("bold");
305                 String[] italic = request.getParameterValues("italic");
306                 String[] underline = request.getParameterValues("underline");
307                 String[] bgColor = request.getParameterValues("bgColor");
308                 String[] fontColor = request.getParameterValues("fontColor");
309                 String[] fontFace = request.getParameterValues("fontFace");
310                 String[] fontSize = request.getParameterValues("fontSize");
311
312                 for (int i = 0; i < lessThanValue.length; i++)
313                         if (i == 0 || nvl(lessThanValue[i]).length() > 0) {
314                                 FormatType fmt = null;
315                                 if (i == 0 || nvl(formatId[i]).length() > 0)
316                                         fmt = ReportDefinition.getSemaphoreFormatById(semaphore, nvl(formatId[i]));
317                                 if (fmt == null)
318                                         fmt = ReportDefinition.addEmptyFormatType(new ObjectFactory(), semaphore);
319
320                                 fmt.setLessThanValue(nvl(lessThanValue[i]));
321                                 fmt.setExpression(nvl(expression[i]));
322                                 fmt.setBold("Y".equals(bold[i]));
323                                 fmt.setItalic("Y".equals(italic[i]));
324                                 fmt.setUnderline("Y".equals(underline[i]));
325                                 fmt.setBgColor(bgColor[i]);
326                                 fmt.setFontColor(fontColor[i]);
327                                 fmt.setFontFace(fontFace[i]);
328                                 fmt.setFontSize(fontSize[i]);
329                         } else if (nvl(formatId[i]).length() > 0)
330         ReportDefinition.deleteFormatType(semaphore, formatId[i]);
331
332                 persistReportDefinition(request, rdef);
333         } // processSemaphorePopup
334
335         private boolean processDefinition(HttpServletRequest request) throws RaptorException {
336                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
337                                 AppConstants.SI_REPORT_DEFINITION);
338
339                 String reportName  = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportName"));
340                 String reportDescr = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportDescr"));
341                 String folderId = AppUtils.getRequestNvlValue(request, "folder_id");
342                 boolean isAllowSchedule = (AppUtils.getRequestNvlValue(request, "allowSchedule").length()<=0?"N":AppUtils.getRequestNvlValue(request, "allowSchedule")).startsWith("Y");
343                 boolean isColumnGroup = (AppUtils.getRequestNvlValue(request, "multiGroupColumn").length()<=0?"N":AppUtils.getRequestNvlValue(request, "multiGroupColumn")).startsWith("Y");
344                 boolean isTopDown = (AppUtils.getRequestNvlValue(request, "topDown").length()<=0?"N":AppUtils.getRequestNvlValue(request, "topDown")).startsWith("Y");
345                 boolean isSizedByContent= (AppUtils.getRequestNvlValue(request, "sizedByContent").length()<=0?"N":AppUtils.getRequestNvlValue(request, "sizedByContent")).startsWith("Y");
346                 boolean reportsInNewWindow = false;
347                 boolean hideFormFieldAfterRun = false;
348
349                 /*recurrance in schedule tab  - Start*/
350       String isOneTimeScheduleAllowed = nvl(AppUtils.getRequestValue(request, "isOneTimeScheduleAllowed"),"N");
351         String isHourlyScheduleAllowed = nvl(AppUtils.getRequestValue(request, "isHourlyScheduleAllowed"),"N");
352         String isDailyScheduleAllowed = nvl(AppUtils.getRequestValue(request, "isDailyScheduleAllowed"),"N");
353         String isDailyMFScheduleAllowed = nvl(AppUtils.getRequestValue(request, "isDailyMFScheduleAllowed"),"N");
354         String isWeeklyScheduleAllowed = nvl(AppUtils.getRequestValue(request, "isWeeklyScheduleAllowed"),"N");
355         String isMonthlyScheduleAllowed = nvl(AppUtils.getRequestValue(request, "isMonthlyScheduleAllowed"),"N");
356     /*recurrance in schedule tab  - End*/
357
358
359                 if (reportDescr.length() > 1000)
360                         reportDescr = reportDescr.substring(0, 1000);
361                 boolean reportUpdated;
362
363                 String reportType = AppUtils.getRequestNvlValue(request, "reportType");
364
365                 rdef.setFolderId(folderId);
366
367                 if(reportType.equals(AppConstants.RT_DASHBOARD)) {
368                         rdef.setReportName(reportName);
369                         rdef.setReportDescr(reportDescr);
370                         rdef.setReportType(reportType);
371             String dashboardLayoutHTML = AppUtils.getRequestNvlValue(request, "dashboardLayoutHTML");
372                         rdef.setDashboardLayoutHTML(dashboardLayoutHTML);
373                         String dataContainerHeight = nvl(AppUtils.getRequestValue(request, "heightContainer"), "auto");
374                         String dataContainerWidth = nvl(AppUtils.getRequestValue(request, "widthContainer"), "auto");
375                         rdef.setDataContainerHeight(dataContainerHeight);
376                         rdef.setDataContainerWidth(dataContainerWidth);
377                         rdef.setAllowSchedule(isAllowSchedule?"Y":"N");
378
379
380                     reportUpdated = true;
381
382
383                         if (rdef.getWizardSequence() instanceof WizardSequence)
384                                 rdef.generateWizardSequence(request);
385
386                 } else {
387
388                         if (AppUtils.getRequestNvlValue(request, "reportType").equals(AppConstants.RT_CROSSTAB) || rdef.getReportType().equals(AppConstants.RT_CROSSTAB))  {
389
390                                 String widthNo = AppUtils.getRequestNvlValue(request, "widthNo");
391                                 if(nvl(widthNo).endsWith("px"))
392                                         rdef.setWidthNoColumn(widthNo);
393                                 else
394                                         rdef.setWidthNoColumn(widthNo+"px");
395                         }
396
397                         String dataGridAlign = AppUtils.getRequestNvlValue(request, "dataGridAlign");
398                         if(nvl(dataGridAlign).length()>0) {
399                                 rdef.setDataGridAlign(dataGridAlign);
400                         } else {
401                                 rdef.setDataGridAlign("left");
402                         }
403
404                         String pdfImgLogo = AppUtils.getRequestNvlValue(request, "pdfImg");
405                         if(nvl(pdfImgLogo).length()>0)
406                                 rdef.setPdfImg(pdfImgLogo);
407                         else
408                                 rdef.setPdfImg(null);
409                         String emptyMessage = AppUtils.getRequestNvlValue(request, "emptyMessage");
410                         if(nvl(emptyMessage).length()>0)
411                                 rdef.setEmptyMessage(emptyMessage);
412                         else
413                                 rdef.setEmptyMessage("");
414                         String formHelp = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "formHelp"));
415                         //String rDashboardType = nvl(AppUtils.getRequestValue(request, "showDashboardOptions"), "N");
416                         //rdef.setDashboardType(rDashboardType.equals("Y"));
417                         int excelDownloadSize =  500;
418                         try {
419                                 excelDownloadSize = Integer.parseInt(AppUtils.getRequestValue(request, "excelDownloadSize"));
420                         } catch (NumberFormatException ex) {}
421                         if(AppUtils.getRequestNvlValue(request, "excelDownloadSize").length()>0)
422                          rdef.setMaxRowsInExcelDownload(Integer.parseInt(AppUtils.getRequestValue(request, "excelDownloadSize")));
423                         if(AppUtils.getRequestNvlValue(request, "reportInNewWindow").length()>0)
424                                 reportsInNewWindow = AppUtils.getRequestNvlValue(request,"reportInNewWindow").equals("Y");
425                         if(AppUtils.getRequestNvlValue(request, "hideFormFieldsAfterRun").length()>0)
426                                 hideFormFieldAfterRun = AppUtils.getRequestNvlValue(request,"hideFormFieldsAfterRun").equals("Y");
427
428
429                         if(AppUtils.getRequestNvlValue(request, "displayFolderTree").length()>0)
430                                 rdef.setDisplayFolderTree(AppUtils.getRequestNvlValue(request,"displayFolderTree").equals("Y"));
431                         else
432                                 rdef.setDisplayFolderTree(false);
433                         String dataSource = AppUtils.getRequestNvlValue(request, "dataSource");
434                         String dbType = Globals.getDBType();
435                         String schemaSql = Globals.getRemoteDbSchemaSqlWithWhereClause();
436                         schemaSql = schemaSql.replace("[schema_id]", dataSource);
437                         DataSet ds = null;
438                          try {
439                                 ds = DbUtils.executeQuery(schemaSql);
440
441                                 String prefix = "", desc = "";
442
443                                 for (int i = 0; i < ds.getRowCount(); i++) {
444                                         dbType = ds.getItem(i, 2);
445                                 }
446                 }
447                 catch (Exception e) {}
448
449                         int pageSize = Globals.getDefaultPageSize();
450                         try {
451                                 pageSize = Integer.parseInt(AppUtils.getRequestValue(request, "pageSize"));
452                         } catch (NumberFormatException e) {
453                         }
454                         String rApproved = nvl(AppUtils.getRequestValue(request, "menuApproved"), "N");
455                         String menuID = "";
456                         String[] menuIDs = request.getParameterValues("menuID");
457                         if (menuIDs != null)
458                                 for (int i = 0; i < menuIDs.length; i++)
459                                         menuID += (menuID.length() == 0 ? "" : "|") + menuIDs[i];
460                 /*      else
461                                 menuID = "";*/
462
463 //                      boolean additionalFieldsShown = AppUtils.getRequestNvlValue(request,
464 //                                      "additionalFieldsShown").equals("Y");
465                         boolean rRCSDisabled = AppUtils.getRequestNvlValue(request, "runtimeColSortDisabled").equals("Y");
466                         String reportDefType = AppUtils.getRequestNvlValue(request, "reportDefType");
467                         String dataContainerHeight = nvl(AppUtils.getRequestValue(request, "heightContainer"), "auto");
468                         String dataContainerWidth = nvl(AppUtils.getRequestValue(request, "widthContainer"), "auto");
469
470                         String displayOptions = nvl(AppUtils.getRequestValue(request, "hideForm"), "N")
471                                         + nvl(AppUtils.getRequestValue(request, "hideChart"), "N")
472                                         + nvl(AppUtils.getRequestValue(request, "hideData"), "N")
473                                         + nvl(AppUtils.getRequestValue(request, "hideBtns"), "N")
474                                         + nvl(AppUtils.getRequestValue(request, "hideMap"), "N")
475                                         + nvl(AppUtils.getRequestValue(request, "hideExcelIcons"), "N")
476                                         + nvl(AppUtils.getRequestValue(request, "hidePDFIcons"), "N");
477 /*                      StringBuffer dashboardOptions = new StringBuffer("");
478                         dashboardOptions.append((nvl(AppUtils.getRequestValue(request, "hide"),"chart").equals("chart"))?"Y":"N");
479                         dashboardOptions.append((nvl(AppUtils.getRequestValue(request, "hide"),"").equals("data"))?"Y":"N");
480                         dashboardOptions.append((nvl(AppUtils.getRequestValue(request, "hideBtns"),"").equals("Y"))?"Y":"N");*/
481
482                         String numFormCols = nvl(AppUtils.getRequestValue(request, "numFormCols"), "1");
483                         String reportTitle = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportTitle"));
484                         String reportSubTitle = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportSubTitle"));
485                         String reportHeader = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportHeader"));
486                         String reportFooter = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportFooter"));
487
488                         int frozenColumns = 0;
489                         try {
490                                 frozenColumns = Integer.parseInt(AppUtils.getRequestValue(request, "frozenColumns"));
491                         } catch (NumberFormatException ex) {
492
493                         }
494
495 /*                      reportUpdated = (!(reportName.equals(nvl(rdef.getReportName()))))
496                                         && (!(reportDescr.equals(nvl(rdef.getReportDescr()))))
497                                         && (!(formHelp.equals(nvl(rdef.getFormHelpText()))))
498                                         && (!(reportType.equals(nvl(rdef.getReportType()))))
499                                         && (pageSize != rdef.getPageSize()) &&
500                                         // rPublic.equals(rdef.isPublic()?"Y":"N")&&
501                                         (!(menuID.equals(nvl(rdef.getMenuID()))))
502                                         && (!(rApproved.equals(rdef.isMenuApproved()))) && (additionalFieldsShown ? ((!(rRCSDisabled
503                                         .equals(rdef.isRuntimeColSortDisabled())))
504                                         && (!(displayOptions.equals(nvl(rdef.getDisplayOptions()))))
505                                         && (!(dashboardOptions.equals(nvl(rdef.getDashboardOptions()))))
506                                         && (!(numFormCols.equals(nvl(rdef.getNumFormCols()))))
507                                         && (!(reportTitle.equals(nvl(rdef.getReportTitle()))))
508                                         && (!(reportSubTitle.equals(nvl(rdef.getReportSubTitle()))))
509                                         && (!(reportHeader.equals(nvl(rdef.getReportHeader())))) && (!(reportFooter
510                                         .equals(nvl(rdef.getReportFooter()))))&& (reportsInNewWindow != rdef.isReportInNewWindow())):true);
511 */
512 /*                      reportUpdated = rRCSDisabled ==(rdef.isRuntimeColSortDisabled()
513                                         && displayOptions.equals(nvl(rdef.getDisplayOptions()))
514                                         //&& dashboardOptions.equals(nvl(rdef.getDashboardOptions()))
515                                         && numFormCols.equals(nvl(rdef.getNumFormCols()))
516                                         && reportTitle.equals(nvl(rdef.getReportTitle()))
517                                         && reportSubTitle.equals(nvl(rdef.getReportSubTitle()))
518                                         && reportHeader.equals(nvl(rdef.getReportHeader()))
519                                         && reportsInNewWindow == rdef.isReportInNewWindow()
520                                         && reportFooter.equals(nvl(rdef.getReportFooter())))
521                                         ;*/
522
523
524                         /*reportUpdated = (!(reportName.equals(nvl(rdef.getReportName()))
525                                         && reportDescr.equals(nvl(rdef.getReportDescr()))
526                                         && formHelp.equals(nvl(rdef.getFormHelpText()))
527                                         && reportType.equals(nvl(rdef.getReportType()))
528                                         && (pageSize == rdef.getPageSize())
529                                         && excelDownloadSize == rdef.getMaxRowsInExcelDownload()
530                                         && reportsInNewWindow == rdef.isReportInNewWindow()
531                                         && displayOptions.equals(rdef.getDisplayOptions())
532                                         && dataContainerHeight.equals(rdef.getDataContainerHeight())
533                                         && dataContainerWidth.equals(rdef.getDataContainerWidth())
534                                         && (isAllowSchedule ==(rdef.isAllowSchedule()))
535                                         // rPublic.equals(rdef.isPublic()?"Y":"N")&&
536                                         && menuID.equals(nvl(rdef.getMenuID()))
537                                         && rApproved.equals(rdef.isMenuApproved() ? "Y" : "N") && (rRCSDisabled
538                                         == ((rdef.isRuntimeColSortDisabled())
539                                         && displayOptions.equals(nvl(rdef.getDisplayOptions()))
540                                         //&& dashboardOptions.equals(nvl(rdef.getDashboardOptions()))
541                                         && numFormCols.equals(nvl(rdef.getNumFormCols()))
542                                         && reportTitle.equals(nvl(rdef.getReportTitle()))
543                                         && reportSubTitle.equals(nvl(rdef.getReportSubTitle()))
544                                         && isOneTimeScheduleAllowed.equals(nvl(rdef.getIsOneTimeScheduleAllowed()))
545                     && isHourlyScheduleAllowed.equals(nvl(rdef.getIsHourlyScheduleAllowed()))
546                     && isDailyScheduleAllowed.equals(nvl(rdef.getIsDailyScheduleAllowed()))
547                     && isDailyMFScheduleAllowed.equals(nvl(rdef.getIsDailyMFScheduleAllowed()))
548                     && isWeeklyScheduleAllowed.equals(nvl(rdef.getIsWeeklyScheduleAllowed()))
549                     && isMonthlyScheduleAllowed.equals(nvl(rdef.getIsMonthlyScheduleAllowed()))
550                     && reportHeader.equals(nvl(rdef.getReportHeader())) && reportFooter
551                                         .equals(nvl(rdef.getReportFooter()))))
552                                         ));     */
553                         rdef.setReportName(reportName);
554                         rdef.setReportDescr(reportDescr);
555                         rdef.setFormHelpText(formHelp);
556                         rdef.setReportType(reportType);
557                         rdef.setPageSize(pageSize);
558                         rdef.setDBInfo(dataSource);
559                         rdef.setDBType(dbType);
560                         rdef.setDisplayOptions(displayOptions);
561                         rdef.setDataContainerHeight(dataContainerHeight);
562                         rdef.setDataContainerWidth(dataContainerWidth);
563                         rdef.setAllowSchedule(isAllowSchedule?"Y":"N");
564                         rdef.setMultiGroupColumn(isColumnGroup?"Y":"N");
565                         rdef.setTopDown(isTopDown?"Y":"N");
566                         rdef.setSizedByContent(isSizedByContent?"Y":"N");
567                         // rdef.setPublic(rPublic.equals("Y"));
568                         rdef.setMenuID(menuID);
569                         rdef.setMenuApproved(rApproved.equals("Y"));
570                         if (reportDefType.length() > 0)
571                                 rdef.setReportDefType(reportDefType);
572 /*                      if(rdef.isDashboardType()) {
573                                 rdef.setDashboardOptions(dashboardOptions.toString());
574                         }*/
575                         rdef.setHideFormFieldAfterRun(hideFormFieldAfterRun);
576                         rdef.setReportInNewWindow(reportsInNewWindow);
577                         rdef.setRuntimeColSortDisabled(rRCSDisabled);
578                         rdef.setNumFormCols(numFormCols);
579                         rdef.setReportTitle(reportTitle);
580                         rdef.setReportSubTitle(reportSubTitle);
581                         rdef.setReportHeader(reportHeader);
582                         rdef.setReportFooter(reportFooter);
583                         rdef.setIsOneTimeScheduleAllowed(isOneTimeScheduleAllowed);
584                         rdef.setIsHourlyScheduleAllowed(isHourlyScheduleAllowed);
585             rdef.setIsDailyScheduleAllowed(isDailyScheduleAllowed);
586             rdef.setIsDailyMFScheduleAllowed(isDailyMFScheduleAllowed);
587             rdef.setIsWeeklyScheduleAllowed(isWeeklyScheduleAllowed);
588             rdef.setIsMonthlyScheduleAllowed(isMonthlyScheduleAllowed);
589             rdef.setFrozenColumns(frozenColumns);
590
591                         } // if
592
593                         if (rdef.getWizardSequence() instanceof WizardSequence)
594                                 rdef.generateWizardSequence(request);
595
596
597                 /*
598                  * if(formHelp.length()>255) formHelp = formHelp.substring(0, 255);
599                  */
600
601
602                 // String rPublic = nvl(AppUtils.getRequestValue(request, "public"),
603                 // "N");
604                 // String menuID = AppUtils.getRequestNvlValue(request, "menuID");
605
606 //              boolean dashboardOptionsShown = AppUtils.getRequestNvlValue(request,
607 //                        "dashboardOptionsShown").equals("Y");
608
609                 reportUpdated = true;
610
611                 if (rdef.getReportID().equals("-1"))
612                         // Always need to persist new report - in case it is a copy
613                         reportUpdated = true;
614
615                 return reportUpdated;
616         } // processDefinition
617
618         private boolean processTableAdd(HttpServletRequest request) throws Exception {
619                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
620                                 AppConstants.SI_REPORT_DEFINITION);
621
622                 String tableName = AppUtils.getRequestNvlValue(request, "tableName").toUpperCase();
623                 String tableId = rdef.getUniqueTableId(tableName);
624
625                 String joinTableExpr = null;
626                 String joinTableId = null;
627
628                 DataSourceType joinTable =
629                         rdef.getTableById(AppUtils.getRequestValue(request, "joinTableName"));
630                 if (joinTable != null) {
631                         String joinTableName = joinTable.getTableName();
632                         joinTableId = joinTable.getTableId();
633
634                         String joinExpr = AppUtils.getRequestNvlValue(request, "joinExpr").toUpperCase();
635
636                         joinTableExpr = joinExpr.replaceAll("\\["+tableName+"\\]", tableId);
637                         joinTableExpr = joinTableExpr.replaceAll("\\["+joinTableName+"\\]", joinTableId);
638 //                      debugLogger.debug("joinExpr : "+joinExpr+"\njoinTableExpr : "+ joinTableExpr);
639                 }
640
641                 rdef.addDataSourceType(new ObjectFactory(), tableId, tableName, AppUtils
642                                 .getRequestNvlValue(request, "tablePK"), AppUtils.getRequestNvlValue(request,
643                                 "displayName"), joinTableId, joinTableExpr, null);
644
645                 rdef.setOuterJoin(rdef.getTableById(tableId), AppUtils.getRequestNvlValue(request,
646                                 "outerJoin"));
647                 rdef.resetCache(true);
648
649                 return true;
650         } // processTableAdd
651
652         private boolean processTableEdit(HttpServletRequest request) throws Exception {
653                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
654                                 AppConstants.SI_REPORT_DEFINITION);
655
656                 DataSourceType dst = rdef.getTableById(AppUtils.getRequestNvlValue(request,
657                                 AppConstants.RI_DETAIL_ID));
658
659                 String displayName = XSSFilter.filterRequest(AppUtils.getRequestNvlValue(request, "displayName"));
660                 String outerJoin = AppUtils.getRequestNvlValue(request, "outerJoin");
661
662                 String tableName = AppUtils.getRequestNvlValue(request, "tableName").toUpperCase();
663                 String joinTableId = AppUtils.getRequestNvlValue(request, "joinTableName");
664
665                 String joinExpr = AppUtils.getRequestNvlValue(request, "joinExpr").toUpperCase();
666
667                 String joinTableExpr = null;
668                 if(joinExpr.length()!=0){
669                         joinTableExpr = joinExpr.replaceAll("\\["+tableName+"\\]", rdef.getTableByDBName(tableName).getTableId());
670                         joinTableExpr = joinTableExpr.replaceAll("\\["+rdef.getTableById(joinTableId).getTableName().toUpperCase()+"\\]", joinTableId);
671                         dst.setRefDefinition(joinTableExpr);
672                 }
673                 boolean reportUpdated = (!displayName.equals(nvl(dst.getDisplayName())) ||
674                                                                  !outerJoin.equals(rdef.getOuterJoinType(dst))  ||
675                                                                  !(joinExpr.length()==0));
676
677                 dst.setDisplayName(displayName);
678                 rdef.setOuterJoin(dst, outerJoin);
679                 if (reportUpdated)
680                 rdef.resetCache(true);
681
682                 return true; // reportUpdated;
683         } // processTableEdit
684
685
686         private boolean processTableDelete(HttpServletRequest request) throws Exception {
687                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
688                                 AppConstants.SI_REPORT_DEFINITION);
689                 rdef.deleteDataSourceType(AppUtils.getRequestNvlValue(request,
690                                 AppConstants.RI_DETAIL_ID));
691                 return true;
692         } // processTableDelete
693
694         private boolean processColumnAddEdit(HttpServletRequest request, boolean isEdit)
695                         throws Exception {
696                 if(!isEdit) {
697                         return true;
698                 }
699                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
700                                 AppConstants.SI_REPORT_DEFINITION);
701                 DataColumnType currColumn = null;
702
703                 String tableId = null;
704                 String colName = null;
705                 String dataType = null;
706                 if (isEdit) {
707                         currColumn = rdef.getColumnById(AppUtils.getRequestNvlValue(request,
708                                         AppConstants.RI_DETAIL_ID));
709
710                         if(currColumn!=null) {
711                                 tableId = currColumn.getTableId();
712                                 colName = currColumn.getDbColName(); // currColumn.getColName();
713                                 dataType = currColumn.getDbColType();
714                         }
715                 } else {
716                         String colData = AppUtils.getRequestNvlValue(request, "columnDetails");
717                         if(nvl(colData).length()>0) {
718                                 tableId = colData.substring(0, colData.indexOf('|'));
719                                 colName = colData.substring(tableId.length() + 1,
720                                                 colData.indexOf('|', tableId.length() + 1)).toUpperCase();
721                                 dataType = colData.substring(tableId.length() + colName.length() + 2);
722                         }
723                 } // else
724
725                 String exprFormula = AppUtils.getRequestNvlValue(request, "exprFormula");
726
727                 String colNameValue = null;
728                 if (exprFormula.length() > 0)
729                         if (exprFormula.equals("_exprText_"))
730                                 colNameValue = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestValue(request, "exprText"));
731                         else if (exprFormula.equals("COUNT(*)"))
732                                 colNameValue = exprFormula;
733                         else
734                                 colNameValue = exprFormula + " " + colName + ")";
735                 else
736                         colNameValue = colName;
737
738                 int displayWidth = -1;
739                 try {
740                         displayWidth = Integer.parseInt(AppUtils.getRequestValue(request, "displayWidth"));
741                 } catch (NumberFormatException e) {
742                 }
743
744                 String sColId = isEdit ? currColumn.getColId() : (nvl(colName).length()>0?rdef.getUniqueColumnId(colName):null);
745                 String drillDownParams = AppUtils.getRequestValue(request, "drillDownParams");
746                 if (drillDownParams != null) {
747                         // Replacing references to [this] with [col_id]
748                         while (drillDownParams.indexOf("[this]") >= 0) {
749                                 int startIdx = drillDownParams.indexOf("[this]");
750                                 StringBuffer sb = new StringBuffer();
751
752                                 if (startIdx > 0)
753                                         sb.append(drillDownParams.substring(0, startIdx));
754                                 sb.append("[" + sColId + "]");
755                                 if (startIdx + 6 < drillDownParams.length() - 1)
756                                         sb.append(drillDownParams.substring(startIdx + 5));
757                                 drillDownParams = sb.toString();
758                         } // while
759                 } // if
760
761                 String crossTabValue = null;
762                 boolean isVisible = AppUtils.getRequestFlag(request, "visible");
763                 boolean isSortable = AppUtils.getRequestFlag(request, "sortable");
764                 String nowrap = AppUtils.getRequestNvlValue(request, "nowrap");
765                 int indentation = 0;
766                 try {
767                         indentation = Integer.parseInt(AppUtils.getRequestNvlValue(request, "indentation"));
768                 }catch (NumberFormatException e) {
769                 }
770                 String dependsOnFormField = AppUtils.getRequestNvlValue(request, "dependsOnFormField");
771                 boolean isGroupBreak = AppUtils.getRequestFlag(request, "groupBreak");
772                 String groupByPosStr = AppUtils.nvls(AppUtils.getRequestValue(request, "groupByPos"), "0");
773                 int groupByPos = Integer.parseInt(groupByPosStr);
774                 currColumn.setGroupByPos(groupByPos);
775
776                 if(groupByPos > 0) {
777                         String subTotalCustomText = AppUtils.nvls(AppUtils.getRequestValue(request, "subTotalCustomText"), "Sub Total");
778                         currColumn.setSubTotalCustomText(subTotalCustomText);
779
780                         boolean hideRepeatedKey = AppUtils.getRequestFlag(request, "hideRepeatedKeys");
781                         currColumn.setHideRepeatedKey(hideRepeatedKey);
782                 }
783
784                 String displayTotal = AppUtils.getRequestNvlValue(request, "displayTotal");
785                 String widthInPxls = AppUtils.getRequestNvlValue(request, "widthInPxls");
786
787                 if (rdef.getReportType().equals(AppConstants.RT_CROSSTAB)) {
788
789
790
791                         crossTabValue = AppUtils.getRequestValue(request, "crossTabValue");
792                         isVisible = nvl(crossTabValue).equals(AppConstants.CV_ROW)
793                                         || nvl(crossTabValue).equals(AppConstants.CV_COLUMN)
794                                         || nvl(crossTabValue).equals(AppConstants.CV_VALUE);
795                         isGroupBreak = nvl(crossTabValue).equals(AppConstants.CV_ROW)
796                                         || nvl(crossTabValue).equals(AppConstants.CV_COLUMN);
797
798                         if (nvl(crossTabValue).equals(AppConstants.CV_VALUE))
799                                 displayTotal += "|"
800                                                 + AppUtils.getRequestNvlValue(request, "displayTotalPerRow");
801                         else
802                                 displayTotal = "";
803                 } // if
804
805                 String displayName = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "displayName"));
806                 String colType = AppUtils.getRequestNvlValue(request, "colType");
807                 String displayFormat = AppUtils.getRequestNvlValue(request, "displayFormat");
808
809                 //HYPERLINK
810                 if(colType.equals(AppConstants.CT_HYPERLINK)) {
811                         String hyperlinkURL = AppUtils.getRequestValue(request, "hyperlinkURL");
812                         currColumn.setHyperlinkURL(hyperlinkURL);
813                         String anchor  = AppUtils.getRequestValue(request, "anchor");
814                         currColumn.setHyperlinkType(anchor);
815                         if(anchor.equals("IMAGE")) {
816                                 String actionImg = AppUtils.getRequestValue(request, "actionImg");
817                                 currColumn.setActionImg(actionImg);
818                         }
819                 }
820
821
822
823                 String displayAlign = AppUtils.getRequestValue(request, "displayAlign");
824                 String displayHeaderAlign = AppUtils.getRequestValue(request, "displayHeaderAlign");
825                 String drillDownURL = AppUtils.getRequestValue(request, "drillDownURL");
826                 String drillDownSuppress = AppUtils.getRequestValue(request, "drillDownSuppress");
827                 boolean drillDownPopUp = AppUtils.getRequestFlag (request, "drillDownPopUp");
828                 String semaphoreId = AppUtils.getRequestNvlValue(request, "semaphore");
829                 String semaphoreType = AppUtils.getRequestNvlValue(request, "semaphoreTypeHidden");
830
831                 String levelStr = AppUtils.getRequestNvlValue(request, "multiGroupColLevel");
832                 String startColGroup = AppUtils.getRequestNvlValue(request, "startMultiGroup");
833                 String colGroupColSpan = AppUtils.getRequestNvlValue(request, "colspan");
834                 int level = 0;
835                 try {
836                         level = Integer.parseInt(levelStr);
837                 }catch (NumberFormatException ex) {
838                         level = 0;
839                 }
840                 int startColGroupInt = 0;
841                 int colGroupColSpanInt = 0;
842         if(level > 0) {
843                 try {
844                         //startColGroupInt = Integer.parseInt(startColGroup);
845                         colGroupColSpanInt = Integer.parseInt(colGroupColSpan);
846                 } catch (NumberFormatException ex) {
847
848                 }
849         }
850         currColumn.setLevel(level);
851         if(level > 0) {
852                 currColumn.setStart(startColGroupInt);
853                 currColumn.setColspan(colGroupColSpanInt);
854         }
855
856                 String targetColumnId = (semaphoreType.indexOf("|")!= -1 ? semaphoreType.substring(semaphoreType.indexOf("|")+1):"");
857                 DataColumnType targetColumn = rdef.getColumnById(targetColumnId);
858
859                 SemaphoreType semaphore = rdef.getSemaphoreById(semaphoreId);
860                 rdef.deleteSemaphore(semaphore);
861                 if(nvl(semaphoreType).length() > 0 && semaphoreType.indexOf("|")!=-1)
862                         semaphore.setSemaphoreType(semaphoreType.substring(0,semaphoreType.indexOf("|")));
863                 if(semaphore!=null) {
864                         semaphore.setComment(currColumn.getColId());
865                         if(nvl(semaphoreType).length() > 0)
866                                 semaphore.setTarget(targetColumnId.length()>0? targetColumnId: "");
867                         rdef.setSemaphore(semaphore);
868                 }
869
870
871                 if (isEdit) {
872                         if(nvl(widthInPxls).length()>0) {
873                                 if(nvl(widthInPxls).endsWith("px"))
874                                         currColumn.setDisplayWidthInPxls(widthInPxls);
875                                 else
876                                         currColumn.setDisplayWidthInPxls(widthInPxls+"px");
877                         } else {
878                                 currColumn.setDisplayWidthInPxls("");
879                         }
880
881                         currColumn.setCrossTabValue(crossTabValue);
882                         currColumn.setDependsOnFormField(dependsOnFormField);
883                         currColumn.setDisplayName(displayName);
884                         //currColumn.setOriginalDisplayName(displayName);
885
886                         if (displayWidth > 0)
887                                 currColumn.setDisplayWidth(displayWidth);
888                         currColumn.setDisplayAlignment(displayAlign);
889                         currColumn.setDisplayHeaderAlignment(displayHeaderAlign);
890                         currColumn.setDrillDownURL(drillDownURL);
891                         currColumn.setDrillDownParams(drillDownParams);
892                         currColumn.setDrillDownType(drillDownSuppress);
893                         currColumn.setDrillinPoPUp(drillDownPopUp);
894                         //indentation
895                         currColumn.setIndentation(indentation);
896                         if(drillDownPopUp) {
897                                 rdef.setDrillDownURLInPopupPresent(true);
898                         }
899                         /*if(targetColumn!=null) {
900                                 currColumn.setSemaphoreId(null);
901                                 targetColumn.setSemaphoreId(semaphoreId);
902                         } else */
903                         currColumn.setSemaphoreId(semaphoreId);
904                         currColumn.setGroupBreak(isGroupBreak);
905             logger.debug(EELFLoggerDelegate.debugLogger, (" ------------ Display Total ---------- "+ displayTotal));
906                         currColumn.setDisplayTotal(displayTotal);
907             //if (currColumn.getDrillDownURL() == null || currColumn.getDrillDownURL().length() == 0)
908               currColumn.setVisible(isVisible);
909               currColumn.setIsSortable(isSortable);
910               currColumn.setNowrap(nowrap);
911             //else
912             //    currColumn.setVisible(true);
913               if (rdef.getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
914                 if(colType!=null)
915                         currColumn.setColType(colType);
916                                 displayFormat = AppUtils.getRequestValue(request, "colDataFormat");
917                                 if (displayFormat != null){
918                                         currColumn.setColFormat(displayFormat);
919                                 }
920                                 if(colType!=null && colType.equals(AppConstants.CT_DATE)) {
921                                         boolean enhancedPagination = AppUtils.getRequestFlag(request, "enhancedPagination");
922                                         currColumn.setEnhancedPagination(enhancedPagination);
923                                 }
924               }
925                         if (!rdef.getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
926                                 currColumn.setColName(colNameValue);
927                                 if (displayFormat != null)
928                                         currColumn.setColFormat(displayFormat);
929                                 //currColumn.setVisible(isVisible);
930                                 currColumn.setCalculated(exprFormula.length() > 0);
931
932                                 rdef.adjustColumnType(currColumn);
933                         } // if
934
935                         rdef.resetCache(true);
936                 } else
937                         currColumn = rdef.addDataColumnType(new ObjectFactory(), sColId, tableId, colName,
938                                         crossTabValue, colNameValue, displayName, displayWidth, displayAlign, rdef
939                                                         .getAllColumns().size() + 1, isVisible,
940                                         (exprFormula.length() > 0), adjustDataType(dataType), displayFormat,
941                                         isGroupBreak, -1, null, displayTotal, null, -1, drillDownSuppress,
942                                         drillDownURL, drillDownParams, semaphoreId, null);
943
944                 if (rdef.getReportDefType().equals(AppConstants.RD_SQL_BASED))
945                         rdef.setColumnNoParseDateFlag(currColumn, AppUtils.getRequestFlag(request,
946                                         "no_parse_date"));
947         if(nvl(displayName).length()>0)
948                         return true;
949         else
950                 return false;
951         } // processColumnAddEdit
952
953         private boolean processColumnAddMulti(HttpServletRequest request) throws Exception {
954                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
955                                 AppConstants.SI_REPORT_DEFINITION);
956
957                 List reportCols = rdef.getAllColumns();
958                 int nCol = reportCols.size() + 1;
959
960                 String[] addColumn = request.getParameterValues("addColumn");
961                 String[] tableId = request.getParameterValues("tableId");
962                 String[] columnName = request.getParameterValues("columnName");
963                 String[] columnType = request.getParameterValues("columnType");
964                 String[] displayName = request.getParameterValues("displayName");
965
966                 for (int i = 0; i < addColumn.length; i++)
967                         if (addColumn[i].equals("Y")) {
968                                 int j = 2;
969                                 String uniqueDisplayName = displayName[i];
970                                 boolean isUnique = true;
971                                 do {
972                                         isUnique = true;
973                                         for (Iterator iter = reportCols.iterator(); iter.hasNext();)
974                                                 if (uniqueDisplayName.equals(((DataColumnType) iter.next())
975                                                                 .getDisplayName())) {
976                                                         isUnique = false;
977                                                         uniqueDisplayName = displayName[i] + (j++);
978                                                         break;
979                                                 } // if
980                                 } while (!isUnique);
981
982                                 rdef
983                                                 .addDataColumnType(
984                                                                 new ObjectFactory(),
985                                                                 rdef.getUniqueColumnId(columnName[i]),
986                                                                 tableId[i],
987                                                                 columnName[i],
988                                                                 null,
989                                                                 columnName[i],
990                                                                 uniqueDisplayName,
991                                                                 10,
992                                                                 "Left",
993                                                                 nCol++,
994                                                                 true,
995                                                                 false,
996                                                                 adjustDataType(columnType[i]),
997                                                                 (columnType[i].equals(AppConstants.CT_DATE) ? AppConstants.DEFAULT_DATE_FORMAT
998                                                                                 : null), false, -1, null, null, null, -1, null, null,
999                                                                 null, null, null);
1000                         } // if
1001
1002                 return true;
1003         } // processColumnAddMulti
1004
1005         private boolean processColumnOrderAll(HttpServletRequest request) throws Exception {
1006                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1007                                 AppConstants.SI_REPORT_DEFINITION);
1008
1009                 String[] colId = request.getParameterValues("colId");
1010                 String[] colOrder = request.getParameterValues("colOrder");
1011
1012                 boolean reportUpdated = false;
1013                 for (int i = 0; i < colId.length; i++) {
1014                         DataColumnType dct = rdef.getColumnById(nvl(colId[i]));
1015                         if (dct == null)
1016                                 continue;
1017
1018                         int iColOrder = 0;
1019                         try {
1020                                 iColOrder = Integer.parseInt(colOrder[i]);
1021                         } catch (NumberFormatException e) {
1022                         }
1023
1024                         if (iColOrder > 0) {
1025                                 dct.setOrderSeq(iColOrder);
1026                                 reportUpdated = true;
1027                         } // if
1028                 } // for
1029
1030                 if (reportUpdated) {
1031                         List reportCols = rdef.getAllColumns();
1032                         Collections.sort(reportCols, new OrderSeqComparator());
1033
1034                         int iOrder = 1;
1035                         for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
1036                                 DataColumnType dct = (DataColumnType) iter.next();
1037                                 dct.setOrderSeq(iOrder++);
1038                         } // for
1039
1040                         rdef.resetCache(false);
1041                 } // if
1042
1043                 return reportUpdated;
1044         } // processColumnOrderAll
1045
1046         private boolean processColumnDelete(HttpServletRequest request) throws Exception {
1047                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1048                                 AppConstants.SI_REPORT_DEFINITION);
1049                 rdef.deleteDataColumnType(AppUtils.getRequestNvlValue(request,
1050                                 AppConstants.RI_DETAIL_ID));
1051                 return true;
1052         } // processColumnDelete
1053
1054         private boolean processColumnMoveUp(HttpServletRequest request) throws Exception {
1055                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1056                                 AppConstants.SI_REPORT_DEFINITION);
1057                 rdef.shiftColumnOrderUp(AppUtils
1058                                 .getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
1059                 return true;
1060         } // processColumnMoveUp
1061
1062         private boolean processColumnMoveDown(HttpServletRequest request) throws Exception {
1063                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1064                                 AppConstants.SI_REPORT_DEFINITION);
1065                 rdef.shiftColumnOrderDown(AppUtils.getRequestNvlValue(request,
1066                                 AppConstants.RI_DETAIL_ID));
1067                 return true;
1068         } // processColumnMoveDown
1069
1070         private boolean processFormFieldAddEdit(HttpServletRequest request, boolean isEdit,
1071                         String action) throws Exception {
1072                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1073                                 AppConstants.SI_REPORT_DEFINITION);
1074
1075                 String fieldName = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "fieldName"));
1076                 String multiSelectSize  =  "0";
1077                 String colId = AppUtils.getRequestNvlValue(request, "fieldColId");
1078                 if (rdef.getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
1079                         String displayFormat = AppUtils.getRequestNvlValue(request, "displayFormat");
1080                         if (displayFormat.length() > 0)
1081                                 colId += "|" + displayFormat;
1082                 } // if
1083                 String fieldType = AppUtils.getRequestNvlValue(request, "fieldType");
1084                 String validation = AppUtils.getRequestNvlValue(request, "validation");
1085                 String mandatory = nvl(AppUtils.getRequestValue(request, "mandatory"), "N");
1086                 String defaultValue = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "defaultValue"));
1087                 String fieldHelp = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "fieldHelp"));
1088                 String fieldSQL = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "fieldSQL"));
1089                 String fieldDefaultSQL = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "fieldDefaultSQL"));
1090         String visible = nvl(AppUtils.getRequestValue(request, "visible"),"Y");
1091         String dependsOn = nvl(AppUtils.getRequestValue(request, "dependsOn"),"");
1092         String rangeStartDate = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "rangeStartDate"));
1093         String rangeEndDate = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "rangeEndDate"));
1094         String rangeStartDateSQL = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "rangeStartDateSQL"));
1095         String rangeEndDateSQL = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "rangeEndDateSQL"));
1096         boolean isGroupFormField = AppUtils.getRequestFlag(request,"isGroupFormField");
1097
1098         Calendar start = null;
1099         Calendar end = null;
1100         if (AppUtils.nvl(rangeStartDate).length()>0){
1101                 SimpleDateFormat dtf = new SimpleDateFormat("MM/dd/yyyy");
1102             start = Calendar.getInstance();
1103             start.setTime(dtf.parse(rangeStartDate));
1104         }
1105         if (AppUtils.nvl(rangeEndDate).length()>0){
1106                 SimpleDateFormat dtf = new SimpleDateFormat("MM/dd/yyyy");
1107             end = Calendar.getInstance();
1108             end.setTime(dtf.parse(rangeEndDate));
1109         }/*
1110                  * if(fieldHelp.length()>255) fieldHelp = fieldHelp.substring(0, 255);
1111                  */
1112
1113                 boolean reportUpdated = false;
1114
1115                 FormFieldType currField = null;
1116                 if (isEdit) {
1117                         String fieldId = AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID);
1118
1119                         currField = rdef.getFormFieldById(fieldId);
1120                         if (currField != null && nvl(fieldName).length()>0) {
1121                                 reportUpdated = (!(fieldName.equals(nvl(currField.getFieldName()))
1122                                                 && colId.equals(nvl(currField.getColId()))
1123                                                 && fieldType.equals(nvl(currField.getFieldType()))
1124                                                 && validation.equals(nvl(currField.getValidationType()))
1125                                                 && mandatory.equals(nvl(currField.getMandatory(), "N"))
1126                                                 && defaultValue.equals(nvl(currField.getDefaultValue()))
1127                                                 && fieldSQL.equals(nvl(currField.getFieldSQL()))
1128                         && fieldDefaultSQL.equals(nvl(currField.getFieldDefaultSQL()))
1129                         && dependsOn.equals(nvl(currField.getDependsOn(), "N"))
1130                         && (start == null || (start != null && currField.getRangeStartDate() == null) || (start.compareTo(getCalendar(currField.getRangeStartDate())) )==0)
1131                         && (end == null || (end != null && currField.getRangeEndDate() == null) || (end.equals(currField.getRangeEndDate())))
1132                         && rangeStartDateSQL.equals(nvl(currField.getRangeStartDateSQL()))
1133                         && rangeEndDateSQL.equals(nvl(currField.getRangeEndDateSQL()))
1134                         && visible.equals(nvl(currField.getVisible(), "Y"))
1135                         && isGroupFormField == currField.isGroupFormField()
1136                         && fieldHelp.equals(nvl(currField.getComment()))));
1137
1138                                 rdef.replaceFormFieldReferences("[" + currField.getFieldName() + "]", "["
1139                                                 + fieldName + "]");
1140
1141                                 currField.setFieldName(fieldName);
1142                                 currField.setColId(colId);
1143                                 currField.setFieldType(fieldType);
1144                                 currField.setValidationType(validation);
1145                                 currField.setMandatory(mandatory);
1146                                 currField.setDefaultValue(defaultValue);
1147                                 currField.setFieldSQL(fieldSQL);
1148                                 currField.setFieldDefaultSQL(fieldDefaultSQL);
1149                                 currField.setComment(fieldHelp);
1150                 currField.setVisible(visible);
1151                 currField.setDependsOn(dependsOn);
1152                 try {
1153                         if(start!=null) {
1154                                 currField.setRangeStartDate(DatatypeFactory.newInstance()
1155                                 .newXMLGregorianCalendar(start.YEAR, start.MONTH, start.DAY_OF_WEEK, start.HOUR, start.MINUTE, start.SECOND, start.MILLISECOND, start.ZONE_OFFSET));
1156                         } else {
1157                                 currField.setRangeStartDate(null);
1158                         }
1159                         if(end!=null) {
1160                                 currField.setRangeEndDate(DatatypeFactory.newInstance()
1161                                 .newXMLGregorianCalendar(end.YEAR, end.MONTH, end.DAY_OF_WEEK, end.HOUR, end.MINUTE, end.SECOND, end.MILLISECOND, end.ZONE_OFFSET));
1162                         } else {
1163                                 currField.setRangeEndDate(null);
1164                         }
1165                         /*currField.setRangeEndDate(DatatypeFactory.newInstance()
1166                                 .newXMLGregorianCalendar(end));*/
1167                 } catch (DatatypeConfigurationException ex) {
1168
1169                 }
1170
1171                 currField.setRangeStartDateSQL(rangeStartDateSQL);
1172                 currField.setRangeEndDateSQL(rangeEndDateSQL);
1173                 currField.setGroupFormField(isGroupFormField);
1174                         if(fieldType.equals(FormField.FFT_LIST_MULTI)) {
1175                                 multiSelectSize  = AppUtils.getRequestNvlValue(request, "multiSelectListSize");
1176                                 currField.setMultiSelectListSize(multiSelectSize);
1177                         }
1178
1179
1180                         } // if
1181                 } else {
1182                         reportUpdated = true;
1183
1184                         currField = rdef.addFormFieldType(new ObjectFactory(), fieldName, colId,
1185                                         fieldType, validation, mandatory, defaultValue, fieldSQL, fieldHelp, start, end, rangeStartDateSQL, rangeEndDateSQL);
1186
1187                         request.setAttribute(AppConstants.RI_DETAIL_ID, currField.getFieldId());
1188                 } // else
1189
1190                 if (action.equals(AppConstants.WA_ADD_USER)) {
1191                         reportUpdated = true;
1192                         rdef.addFormFieldPredefinedValue(new ObjectFactory(), currField, XSSFilter.filterRequestOnlyScript(AppUtils
1193                                         .getRequestNvlValue(request, "newPredefinedValue")));
1194                 } else if (action.equals(AppConstants.WA_DELETE_USER)) {
1195                         reportUpdated = true;
1196                         rdef.deleteFormFieldPredefinedValue(currField, AppUtils.getRequestNvlValue(
1197                                         request, "delPredefinedValue"));
1198                 }
1199
1200                 return reportUpdated;
1201         } // processFormFieldAddEdit
1202
1203         private boolean processFormFieldDelete(HttpServletRequest request) throws Exception {
1204                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1205                                 AppConstants.SI_REPORT_DEFINITION);
1206
1207                 String fieldId = AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID);
1208                 rdef.deleteFormField(fieldId);
1209
1210                 return true;
1211         } // processFormFieldDelete
1212
1213         private boolean processFormFieldMoveUp(HttpServletRequest request) throws Exception {
1214                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1215                                 AppConstants.SI_REPORT_DEFINITION);
1216                 rdef.shiftFormFieldUp(AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
1217                 return true;
1218         } // processFormFieldMoveUp
1219
1220         private boolean processFormFieldMoveDown(HttpServletRequest request) throws Exception {
1221                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1222                                 AppConstants.SI_REPORT_DEFINITION);
1223                 rdef.shiftFormFieldDown(AppUtils
1224                                 .getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
1225                 return true;
1226         } // processFormFieldMoveDown
1227
1228         private boolean processFormFieldBlank(HttpServletRequest request) throws Exception {
1229                 boolean reportUpdated = false;
1230                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1231                                 AppConstants.SI_REPORT_DEFINITION);
1232                 reportUpdated = true;
1233                 rdef.addFormFieldBlank(new ObjectFactory());
1234                 return true;
1235         } // processFormFieldMoveDown
1236
1237         //processFormFieldInfoBar
1238         private boolean processFormFieldInfoBar(HttpServletRequest request) throws Exception {
1239                 boolean reportUpdated = false;
1240                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1241                                 AppConstants.SI_REPORT_DEFINITION);
1242                 reportUpdated = true;
1243                 rdef.addCustomizedTextForParameters(XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "blueBarField")));
1244                 return true;
1245         } // processFormFieldMoveDown
1246
1247
1248         private boolean processForecasting(HttpServletRequest request,  String action) throws Exception {
1249                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1250                                 AppConstants.SI_REPORT_DEFINITION);
1251
1252                 if(rdef.getDataminingOptions()==null)
1253             rdef.addDataminingOptions(new ObjectFactory());
1254
1255                 String classifiers = AppUtils.getRequestNvlValue(request, "classifiers");
1256                 rdef.setClassifier(classifiers);
1257                 String dateAttrColId = AppUtils.getRequestNvlValue(request, "timeAttribute");
1258                 String timeFormat = AppUtils.getRequestNvlValue(request, "timeFormat");
1259                 if(timeFormat.equals("Default")) timeFormat = "yyyy-MM-dd HH:mm:ss";
1260                 String forecastingPeriod = AppUtils.getRequestNvlValue(request, "forecastingPeriod");
1261
1262                 String[] forecastCols = request.getParameterValues("forecastCol");
1263                 List reportCols     = rdef.getAllColumns();
1264                 DataColumnType dct = null;
1265                 Iterator iter = null;
1266
1267
1268
1269                 if(dateAttrColId != null) {
1270                         for(iter=reportCols.iterator(); iter.hasNext(); ) {
1271                                 dct = (DataColumnType) iter.next();
1272                                 if(dct.getColId().equals(dateAttrColId)) {
1273                                         dct.setDataMiningCol(AppConstants.DM_DATE_ATTR);
1274                                         if(timeFormat!=null) rdef.setForecastingTimeFormat(timeFormat);
1275                                         break;
1276                                 }
1277                         }
1278                 }
1279
1280                 if(forecastCols != null) {
1281                         for (int i = 0; i < forecastCols.length; i++) {
1282                                 for(iter=reportCols.iterator(); iter.hasNext(); ) {
1283                                         dct = (DataColumnType) iter.next();
1284                                         if(dct.getColId().equals(forecastCols[i])) {
1285                                                 dct.setDataMiningCol(AppConstants.DM_FORECASTING_ATTR);
1286                                         }
1287                                 }
1288                         }
1289                         rdef.setForecastingPeriod(forecastingPeriod);
1290                 }
1291                 boolean reportUpdated = true;
1292
1293                 return reportUpdated;
1294         } // processForecasting
1295
1296
1297         private boolean processFilterAddEdit(HttpServletRequest request, boolean isEdit)
1298                         throws Exception {
1299                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1300                                 AppConstants.SI_REPORT_DEFINITION);
1301
1302                 String colId = AppUtils.getRequestNvlValue(request, "filterColId");
1303                 String filterExpr = AppUtils.getRequestNvlValue(request, "filterExpr");
1304                 String argType = (filterExpr.equals("IS NULL") || filterExpr.equals("IS NOT NULL")) ? null
1305                                 : AppUtils.getRequestNvlValue(request, "argType");
1306                 String argValue = (filterExpr.equals("IS NULL") || filterExpr.equals("IS NOT NULL")) ? null
1307                                 : AppUtils.getRequestNvlValue(request, "argValue");
1308
1309                 if (nvl(argType).equals(AppConstants.AT_COLUMN)) {
1310                         List reportCols = rdef.getAllColumns();
1311                         for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
1312                                 DataColumnType dct = (DataColumnType) iter.next();
1313                                 if (argValue != null && argValue.equals("[" + dct.getDisplayName() + "]")) {
1314                                         argValue = dct.getColId();
1315                                         break;
1316                                 }
1317                         } // for
1318                 } // if
1319
1320                 if (nvl(argType).equals(AppConstants.AT_VALUE)
1321                                 && (!nvl(argValue).equals(AppConstants.FILTER_MAX_VALUE))
1322                                 && (!nvl(argValue).equals(AppConstants.FILTER_MIN_VALUE))) {
1323                         // Validating the value by type
1324                         DataColumnType currColumn = rdef.getColumnById(colId);
1325                         String currColType = currColumn.getColType();
1326
1327                         try {
1328                                 String s_sql = Globals.getProcessFilterAddEdit();
1329                                 s_sql = s_sql.replace("[argValue]", argValue);
1330                                 /*DataSet ds = DbUtils.executeQuery("SELECT "
1331                                                 + (currColType.equals(AppConstants.CT_NUMBER) ? ("TO_NUMBER('"
1332                                                                 + argValue + "')")
1333                                                                 : (currColType.equals(AppConstants.CT_DATE) ? ("TO_DATE('"
1334                                                                                 + argValue
1335                                                                                 + "', '"
1336                                                                                 + nvl(currColumn.getColFormat(),
1337                                                                                                 AppConstants.DEFAULT_DATE_FORMAT) + "')")
1338                                                                                 : ("'" + argValue + "'"))) + " FROM dual");*/
1339
1340                                 DataSet ds = DbUtils.executeQuery("SELECT "
1341                                                 + (currColType.equals(AppConstants.CT_NUMBER) ? ("TO_NUMBER('"
1342                                                                 + argValue + "')")
1343                                                                 : (currColType.equals(AppConstants.CT_DATE) ? ("TO_DATE('"
1344                                                                                 + argValue
1345                                                                                 + "', '"
1346                                                                                 + nvl(currColumn.getColFormat(),
1347                                                                                                 AppConstants.DEFAULT_DATE_FORMAT) + "')")
1348                                                                                 : s_sql)));
1349                         } catch (Exception e) {
1350                                 throw new ValidationException(
1351                                                 ""
1352                                                                 + (currColType.equals(AppConstants.CT_NUMBER) ? "Invalid number"
1353                                                                                 : (currColType.equals(AppConstants.CT_DATE) ? ("Invalid date<br>Expected date format " + nvl(
1354                                                                                                 currColumn.getColFormat(),
1355                                                                                                 AppConstants.DEFAULT_DATE_FORMAT))
1356                                                                                                 : "Invalid value<br>Possible reason: use of single quotes"))
1357                                                                 + "<!--" + e.getMessage() + "--><br>Value: " + argValue);
1358                         }
1359                 } // if
1360
1361                 if (isEdit) {
1362                         int filterPos = -1;
1363                         try {
1364                                 filterPos = Integer.parseInt(AppUtils.getRequestValue(request, "filterPos"));
1365                         } catch (NumberFormatException e) {
1366                         }
1367
1368                         ColFilterType currFilter = rdef.getFilterById(colId, filterPos);
1369                         if (currFilter != null) {
1370                                 currFilter.setJoinCondition(AppUtils.getRequestValue(request, "filterJoin"));
1371                                 currFilter.setOpenBrackets(AppUtils.getRequestValue(request, "openBrackets"));
1372                                 currFilter.setExpression(filterExpr);
1373                                 // if(argType!=null)
1374                                 currFilter.setArgType(argType);
1375                                 // if(argValue!=null)
1376                                 currFilter.setArgValue(argValue);
1377                                 currFilter
1378                                                 .setCloseBrackets(AppUtils.getRequestValue(request, "closeBrackets"));
1379                         } // if
1380
1381                         rdef.resetCache(true);
1382                 } else {
1383                         rdef.addColFilterType(new ObjectFactory(), colId, AppUtils.getRequestValue(
1384                                         request, "filterJoin"), AppUtils.getRequestValue(request, "openBrackets"),
1385                                         filterExpr, argType, argValue, AppUtils.getRequestValue(request,
1386                                                         "closeBrackets"), null);
1387                 } // else
1388
1389                 return true;
1390         } // processFilterAddEdit
1391
1392         private boolean processFilterDelete(HttpServletRequest request) throws Exception {
1393                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1394                                 AppConstants.SI_REPORT_DEFINITION);
1395
1396                 String filterId = AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID);
1397                 String colId = filterId.substring(0, filterId.indexOf('|'));
1398                 int filterPos = -1;
1399                 try {
1400                         filterPos = Integer.parseInt(filterId.substring(colId.length() + 1));
1401                 } catch (NumberFormatException e) {
1402                 }
1403
1404                 rdef.removeColumnFilter(colId, filterPos);
1405
1406                 return true;
1407         } // processFilterDelete
1408
1409         private boolean processSortAddEdit(HttpServletRequest request, boolean isEdit)
1410                         throws Exception {
1411                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1412                                 AppConstants.SI_REPORT_DEFINITION);
1413
1414                 String sortAscDesc = AppUtils.getRequestNvlValue(request, "sortAscDesc");
1415                 if (isEdit) {
1416                         DataColumnType currColumn = rdef.getColumnById(AppUtils.getRequestNvlValue(
1417                                         request, AppConstants.RI_DETAIL_ID));
1418                         if (currColumn != null)
1419                                 currColumn.setOrderByAscDesc(sortAscDesc);
1420                         rdef.resetCache(true);
1421                 } else
1422                         rdef.addColumnSort(AppUtils.getRequestNvlValue(request, "sortColId"), sortAscDesc,
1423                                         rdef.getNumSortColumns() + 1);
1424
1425                 return true;
1426         } // processSortAddEdit
1427
1428         private boolean processSortOrderAll(HttpServletRequest request) throws Exception {
1429                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1430                                 AppConstants.SI_REPORT_DEFINITION);
1431
1432                 String[] colId = request.getParameterValues("colId");
1433                 String[] sortOrder = request.getParameterValues("sortOrder");
1434                 String[] sortAscDesc = request.getParameterValues("sortAscDesc");
1435
1436                 boolean reportUpdated = false;
1437                 for (int i = 0; i < colId.length; i++) {
1438                         DataColumnType dct = rdef.getColumnById(nvl(colId[i]));
1439                         if (dct == null)
1440                                 continue;
1441
1442                         int iSortOrder = 0;
1443                         try {
1444                                 iSortOrder = Integer.parseInt(sortOrder[i]);
1445                         } catch (NumberFormatException e) {
1446                         }
1447
1448                         if (iSortOrder > 0) {
1449                                 if (dct.getOrderBySeq() > 0) {
1450                                         // Update sort
1451                                         if (dct.getOrderBySeq() != iSortOrder) {
1452                                                 dct.setOrderBySeq(iSortOrder);
1453                                                 reportUpdated = true;
1454                                         } // if
1455                                         if (!nvl(dct.getOrderByAscDesc()).equals(nvl(sortAscDesc[i]))) {
1456                                                 dct.setOrderByAscDesc(sortAscDesc[i]);
1457                                                 reportUpdated = true;
1458                                         } // if
1459                                 } else {
1460                                         // Add sort
1461                                         dct.setOrderBySeq(iSortOrder);
1462                                         dct.setOrderByAscDesc(sortAscDesc[i]);
1463                                         reportUpdated = true;
1464                                 } // else
1465                         } else {
1466                                 if (dct.getOrderBySeq() > 0) {
1467                                         // Remove sort
1468                                         dct.setOrderBySeq(0);
1469                                         dct.setOrderByAscDesc(null);
1470                                         reportUpdated = true;
1471                                 } // if
1472                         } // else
1473                 } // for
1474
1475                 if (reportUpdated) {
1476                         List reportCols = rdef.getAllColumns();
1477                         Collections.sort(reportCols, new OrderBySeqComparator());
1478                         int iOrder = 1;
1479                         for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
1480                                 DataColumnType dct = (DataColumnType) iter.next();
1481                                 if (dct.getOrderBySeq() > 0)
1482                                         dct.setOrderBySeq(iOrder++);
1483                         } // for
1484                         Collections.sort(reportCols, new OrderSeqComparator());
1485
1486                         rdef.resetCache(true);
1487                 } // if
1488
1489                 return reportUpdated;
1490         } // processSortOrderAll
1491
1492         private boolean processSortDelete(HttpServletRequest request) throws Exception {
1493                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1494                                 AppConstants.SI_REPORT_DEFINITION);
1495                 rdef.removeColumnSort(AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
1496                 return true;
1497         } // processSortDelete
1498
1499         private boolean processSortMoveUp(HttpServletRequest request) throws Exception {
1500                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1501                                 AppConstants.SI_REPORT_DEFINITION);
1502                 rdef
1503                                 .shiftColumnSortUp(AppUtils.getRequestNvlValue(request,
1504                                                 AppConstants.RI_DETAIL_ID));
1505                 return true;
1506         } // processSortMoveUp
1507
1508         private boolean processSortMoveDown(HttpServletRequest request) throws Exception {
1509                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1510                                 AppConstants.SI_REPORT_DEFINITION);
1511                 rdef.shiftColumnSortDown(AppUtils.getRequestNvlValue(request,
1512                                 AppConstants.RI_DETAIL_ID));
1513                 return true;
1514         } // processSortMoveDown
1515
1516         private boolean processJavascript (HttpServletRequest request) throws Exception {
1517         processSaveJavascriptElement(request);
1518                 return true;
1519         }
1520
1521         private boolean processSaveJavascriptElement (HttpServletRequest request) throws Exception {
1522                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1523                                 AppConstants.SI_REPORT_DEFINITION);
1524                 rdef.setJavascriptElement(AppUtils.getRequestNvlValue(request, AppConstants.RI_JAVASCRIPT));
1525                 String id = AppUtils.getRequestNvlValue(request, AppConstants.RI_JAVASCRIPT_ITEM_ID);
1526                 String fieldId = AppUtils.getRequestNvlValue(request, "javascriptFormField-"+id);
1527                 if( nvl(fieldId).length()>0 && !(fieldId.startsWith("-1"))) {
1528
1529                         String callableJavascriptText = AppUtils.getRequestNvlValue(request, "callText-"+id);
1530
1531                         logger.debug(EELFLoggerDelegate.debugLogger, ("FieldId " + fieldId + " Call Text " + callableJavascriptText+ " id  " + id));
1532                         JavascriptItemType javaScriptType = null;
1533                         if(id.length()>0 && id.startsWith("-1")) {
1534                                 javaScriptType = rdef.addJavascriptType(new ObjectFactory(), id);
1535                                 javaScriptType.setFieldId(fieldId);
1536                                 if(!fieldId.equals("os1") || !fieldId.equals("ol1"))
1537                                         javaScriptType.setId(rdef.getNextIdForJavaScriptElement(new ObjectFactory(), fieldId));
1538                                 else {
1539                                         if(fieldId.equals("os1"))
1540                                                 javaScriptType.setId("os1|1");
1541                                         else
1542                                                 javaScriptType.setId("ol1|1");
1543                                 }
1544                                 javaScriptType.setCallText(callableJavascriptText);
1545                         } else {
1546                                 javaScriptType = rdef.addJavascriptType(new ObjectFactory(), id);
1547                                 javaScriptType.setCallText(callableJavascriptText);
1548                         }
1549                 }
1550                 return true;
1551         }
1552         private boolean processAddJavascriptElement (HttpServletRequest request) throws Exception {
1553                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1554                                 AppConstants.SI_REPORT_DEFINITION);
1555
1556                 JavascriptItemType javaScriptType = rdef.addJavascriptType(new ObjectFactory(), "");
1557                 javaScriptType.setId("");
1558                 javaScriptType.setFieldId("");
1559                 javaScriptType.setCallText("");
1560
1561                 return true;
1562         }
1563
1564         private boolean processDeleteJavascriptElement (HttpServletRequest request) throws Exception {
1565                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1566                                 AppConstants.SI_REPORT_DEFINITION);
1567                 String id = AppUtils.getRequestNvlValue(request, AppConstants.RI_JAVASCRIPT_ITEM_ID);
1568                 if(rdef.deleteJavascriptType(id))
1569                         return true;
1570                 else
1571                         return false;
1572         }
1573
1574         private boolean processChart(HttpServletRequest request, String action) throws Exception {
1575                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
1576                                 AppConstants.SI_REPORT_DEFINITION);
1577
1578                 int valueColsCount = rdef.getChartValueColumnsList(AppConstants.CHART_ALL_COLUMNS, null).size();
1579
1580                 String chartType = AppUtils.getRequestNvlValue(request, "chartType");
1581                 String chartTypeFixed = AppUtils.getRequestValue(request, "chartTypeFixed");
1582                 String legendColId = AppUtils.getRequestNvlValue(request, "legendCol");
1583                 // String valueColId = AppUtils.getRequestNvlValue(request, "valueCol");
1584                 String leftAxisLabel = AppUtils.getRequestValue(request, "leftAxisLabel");
1585                 String rightAxisLabel = AppUtils.getRequestValue(request, "rightAxisLabel");
1586                 String chartWidth = XSSFilter.filterRequest(AppUtils.getRequestNvlValue(request, "chartWidth"));
1587                 String chartHeight = XSSFilter.filterRequest(AppUtils.getRequestNvlValue(request, "chartHeight"));
1588                 String chartMultiseries = AppUtils.getRequestNvlValue(request, "multiSeries");
1589                 String lastSeriesALineChart = AppUtils.getRequestNvlValue(request, "lastSeriesALineChart");
1590                 String lastSeriesABarChart = AppUtils.getRequestNvlValue(request, "lastSeriesABarChart");
1591                 String overLayItemLabel = "N";
1592                 String chartDisplay = null;
1593
1594                 String multiplePieOrder = null;
1595                 String multiplePieLabelDisplay = null;
1596
1597                 String chartOrientation = null;
1598                 String secondaryChartRenderer = null;
1599
1600                 String linearRegression = null;
1601
1602                 boolean multiplePieOrderInRunPage = false;
1603                 boolean multiplePieLabelDisplayInRunPage = false;
1604
1605                 boolean chartOrientationInRunPage = false;
1606                 boolean secondaryChartRendererInRunPage = false;
1607
1608                 boolean chartDisplayInRunPage = false;
1609
1610                 String intervalFromdate = null;
1611                 String intervalTodate = null;
1612                 String intervalLabel = null;
1613         boolean displayIntervalInputInRunPage = false;
1614                 boolean animate = false;
1615
1616                 animate = AppUtils.getRequestNvlValue(request, "animatedOption").equals("animate");
1617                 if(Globals.showAnimatedChartOption())
1618                         rdef.setChartAnimate(animate);
1619
1620
1621                 String removeColId = "";
1622                 if (action.equals(AppConstants.WA_DELETE_USER)) {
1623                         removeColId = AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID);
1624                         if(valueColsCount == 2 && !rdef.hasSeriesColumn()) {
1625                                 rdef.setChartLeftAxisLabel(null);
1626                                 rdef.setChartRightAxisLabel(null);
1627
1628                         if(chartType.equals(AppConstants.GT_TIME_SERIES) || chartType.equals(AppConstants.GT_PIE_MULTIPLE)) {
1629                                 chartMultiseries = "N";
1630                         }
1631                 }
1632                 }
1633
1634                 if(rdef.getChartAdditionalOptions()==null)
1635             rdef.addChartAdditionalOptions(new ObjectFactory());
1636
1637                 if(rdef.getChartDrillOptions()==null)
1638             rdef.addChartDrillOptions(new ObjectFactory());
1639
1640                 //clearing already added
1641                 if(rdef.getChartDrillOptions().getTargetFormfield()!=null)
1642                         rdef.getChartDrillOptions().getTargetFormfield().removeAll(rdef.getChartDrillOptions().getTargetFormfield());
1643
1644
1645                 if(chartType.equals(AppConstants.GT_PIE_MULTIPLE)) {
1646                         multiplePieOrder = AppUtils.getRequestNvlValue(request, "multiplePieOrder");
1647                         multiplePieLabelDisplay = AppUtils.getRequestNvlValue(request, "multiplePieLabelDisplay");
1648                         chartDisplay = AppUtils.getRequestNvlValue(request, "chartDisplay");
1649                         //if(AppUtils.getRequestNvlValue(request, "multiplePieOrderInRunPage").length()>0)
1650                                 multiplePieOrderInRunPage = AppUtils.getRequestNvlValue(request,"multiplePieOrderInRunPage").equals("Y");
1651                         //if(AppUtils.getRequestNvlValue(request, "multiplePieLabelDisplayInRunPage").length()>0)
1652                                 multiplePieLabelDisplayInRunPage = AppUtils.getRequestNvlValue(request,"multiplePieLabelDisplayInRunPage").equals("Y");
1653                         //if(AppUtils.getRequestNvlValue(request, "chartDisplayInRunPage").length()>0)
1654                                 chartDisplayInRunPage = AppUtils.getRequestNvlValue(request,"chartDisplayInRunPage").equals("Y");
1655                         if(rdef.getChartAdditionalOptions()!=null) {
1656                                 rdef.setChartMultiplePieOrder(multiplePieOrder+(multiplePieOrderInRunPage?"|Y":""));
1657                                 rdef.setChartMultiplePieLabelDisplay(multiplePieLabelDisplay+(multiplePieLabelDisplayInRunPage?"|Y":""));
1658                                 rdef.setChartDisplay(chartDisplay+(chartDisplayInRunPage?"|Y":""));
1659                         }
1660
1661                 }
1662
1663                 if(chartType.equals(AppConstants.GT_REGRESSION)) {
1664                         linearRegression = AppUtils.getRequestNvlValue(request, "regressionType");
1665                         rdef.setLinearRegressionColor(AppUtils.getRequestNvlValue(request, "valueLinearRegressionColor"));
1666                         rdef.setExponentialRegressionColor(AppUtils.getRequestNvlValue(request, "valueExponentialRegressionColor"));
1667                         rdef.setCustomizedRegressionPoint(AppUtils.getRequestNvlValue(request, "regressionPointCustomization"));
1668
1669                         if(nvl(linearRegression).length()>0)
1670                                 rdef.setLinearRegression(linearRegression);
1671                         else
1672                                 rdef.setLinearRegression("Y");
1673                 }
1674
1675                 if(chartType.equals(AppConstants.GT_BAR_3D)) {
1676                         chartOrientation = AppUtils.getRequestNvlValue(request, "chartOrientation");
1677                         secondaryChartRenderer = AppUtils.getRequestNvlValue(request, "secondaryChartRenderer");
1678                         chartDisplay = AppUtils.getRequestNvlValue(request, "chartDisplay");
1679                         //if(AppUtils.getRequestNvlValue(request, "chartOrientationInRunPage").length()>0)
1680                                 chartOrientationInRunPage = AppUtils.getRequestNvlValue(request,"chartOrientationInRunPage").equals("Y");
1681                         //if(AppUtils.getRequestNvlValue(request, "secondaryChartRendererInRunPage").length()>0)
1682                                 secondaryChartRendererInRunPage = AppUtils.getRequestNvlValue(request,"secondaryChartRendererInRunPage").equals("Y");
1683                         //if(AppUtils.getRequestNvlValue(request, "chartDisplayInRunPage").length()>0)
1684                                 chartDisplayInRunPage = AppUtils.getRequestNvlValue(request,"chartDisplayInRunPage").equals("Y");
1685                         rdef.setChartOrientation(chartOrientation+(chartOrientationInRunPage?"|Y":""));
1686                         rdef.setSecondaryChartRenderer(secondaryChartRenderer+(secondaryChartRendererInRunPage?"|Y":""));
1687                         rdef.setChartDisplay(chartDisplay+(chartDisplayInRunPage?"|Y":""));
1688                         rdef.setLastSeriesALineChart(nvl(lastSeriesALineChart, "N"));
1689                 }
1690
1691                 if(chartType.equals(AppConstants.GT_LINE)) {
1692                         chartOrientation = AppUtils.getRequestNvlValue(request, "chartOrientation");
1693                         secondaryChartRenderer = AppUtils.getRequestNvlValue(request, "secondaryChartRenderer");
1694                         chartDisplay = AppUtils.getRequestNvlValue(request, "chartDisplay");
1695                         //if(AppUtils.getRequestNvlValue(request, "chartOrientationInRunPage").length()>0)
1696                                 chartOrientationInRunPage = AppUtils.getRequestNvlValue(request,"chartOrientationInRunPage").equals("Y");
1697                         //if(AppUtils.getRequestNvlValue(request, "secondaryChartRendererInRunPage").length()>0)
1698                                 secondaryChartRendererInRunPage = AppUtils.getRequestNvlValue(request,"secondaryChartRendererInRunPage").equals("Y");
1699                         //if(AppUtils.getRequestNvlValue(request, "chartDisplayInRunPage").length()>0)
1700                                 chartDisplayInRunPage = AppUtils.getRequestNvlValue(request,"chartDisplayInRunPage").equals("Y");
1701                         rdef.setChartOrientation(chartOrientation+(chartOrientationInRunPage?"|Y":""));
1702                         rdef.setSecondaryChartRenderer(secondaryChartRenderer+(secondaryChartRendererInRunPage?"|Y":""));
1703                         rdef.setChartDisplay(chartDisplay+(chartDisplayInRunPage?"|Y":""));
1704                         rdef.setLastSeriesABarChart(nvl(lastSeriesABarChart, "N"));
1705                 }
1706                 if(chartType.equals(AppConstants.GT_TIME_DIFFERENCE_CHART)) {
1707                         intervalFromdate = AppUtils.getRequestNvlValue(request, "intervalFromDate");
1708                         intervalTodate   = AppUtils.getRequestNvlValue(request, "intervalToDate");
1709                         intervalLabel    = AppUtils.getRequestNvlValue(request, "intervalLabel");
1710                         displayIntervalInputInRunPage = AppUtils.getRequestNvlValue(request,"intervalInputInRunPage").equals("Y");
1711                         rdef.setIntervalFromdate(intervalFromdate+(displayIntervalInputInRunPage?"|Y":""));
1712                         rdef.setIntervalTodate(intervalTodate+(displayIntervalInputInRunPage?"|Y":""));
1713                         rdef.setIntervalLabel(intervalLabel);
1714                 }
1715                 if(chartType.equals(AppConstants.GT_STACKED_VERT_BAR) || chartType.equals(AppConstants.GT_STACKED_HORIZ_BAR) || chartType.equals(AppConstants.GT_STACKED_VERT_BAR_LINES)
1716                     || chartType.equals(AppConstants.GT_STACKED_HORIZ_BAR_LINES)) {
1717                          overLayItemLabel = AppUtils.getRequestNvlValue(request, "overlayItemValue");
1718                          rdef.setOverlayItemValueOnStackBar(nvl(overLayItemLabel, "N"));
1719                          animate = AppUtils.getRequestNvlValue(request, "animatedOption").equals("animate");
1720                          rdef.setChartAnimate(animate);
1721                 }
1722
1723                 rdef.setRangeAxisLowerLimit(AppUtils.getRequestNvlValue(request, "yAxisLowerLimit"));
1724                 rdef.setRangeAxisUpperLimit(AppUtils.getRequestNvlValue(request, "yAxisUpperLimit"));
1725                 rdef.setLegendLabelAngle(AppUtils.getRequestNvlValue(request,"labelAngle"));
1726         rdef.setLegendPosition(AppUtils.getRequestNvlValue(request,"legendPosition"));
1727         rdef.setMaxLabelsInDomainAxis(AppUtils.getRequestNvlValue(request,"maxLabelsInDomainAxis"));
1728         String chartLegendDisplay = AppUtils.getRequestNvlValue(request,"hideLegend");
1729         boolean showLegendDisplayOptionsInRunPage = false;
1730                 showLegendDisplayOptionsInRunPage = AppUtils.getRequestNvlValue(request,"showLegendDisplayOptionsInRunPage").equals("Y");
1731         rdef.setChartLegendDisplay(chartLegendDisplay+(showLegendDisplayOptionsInRunPage?"|Y":""));
1732         rdef.setChartToolTips(AppUtils.getRequestNvlValue(request,"hideTooltips"));
1733         rdef.setDomainAxisValuesAsString(AppUtils.getRequestNvlValue(request,"keepAsString"));
1734
1735         //System.out.println("KeepAsString " + AppUtils.getRequestNvlValue(request,"keepAsString"));
1736         //System.out.println("From ReportDef " + rdef.keepDomainAxisValueInChartAsString());
1737         // boolean reportUpdated = (!
1738                 // chartType.equals(nvl(rdef.getChartType())));
1739                 rdef.setChartType(chartType);
1740                 rdef.setChartTypeFixed(nvl(chartTypeFixed, "N"));
1741                 if (nvl(leftAxisLabel).length()>0)
1742                         rdef.setChartLeftAxisLabel(leftAxisLabel);
1743                 else
1744                         rdef.setChartLeftAxisLabel(null);
1745                 if (nvl(rightAxisLabel).length()>0)
1746                         rdef.setChartRightAxisLabel(rightAxisLabel);
1747                 else
1748                         rdef.setChartRightAxisLabel(null);
1749                 rdef.setChartWidth(nvl(chartWidth, "" + Globals.getDefaultChartWidth()));
1750                 rdef.setChartHeight(nvl(chartHeight, "" + Globals.getDefaultChartHeight()));
1751                 if(chartType.equals(AppConstants.GT_TIME_SERIES) || chartType.equals(AppConstants.GT_PIE_MULTIPLE)) {
1752                         rdef.setChartMultiSeries(chartMultiseries);
1753                 }  else {
1754                         rdef.setChartMultiSeries("N");
1755                 }
1756
1757                 List reportCols = rdef.getAllColumns();
1758                 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
1759                         DataColumnType dct = (DataColumnType) iter.next();
1760
1761                         if (dct.getColId().equals(legendColId)) {
1762                                 // reportUpdated = reportUpdated||(!
1763                                 // nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND));
1764                                 dct.setColOnChart(AppConstants.GC_LEGEND);
1765                         } else {
1766                                 // reportUpdated =
1767                                 // reportUpdated||nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND);
1768                                 dct.setColOnChart(null);
1769                         }
1770
1771                         /*
1772                          * if(dct.getColId().equals(valueColId)) { reportUpdated =
1773                          * reportUpdated||(dct.getChartSeq()<=0); dct.setChartSeq(1); }
1774                          * else { reportUpdated = reportUpdated||(dct.getChartSeq()>0);
1775                          */
1776                         dct.setChartSeq(-1);
1777                         /* } */
1778                 } // for
1779
1780                 int idx = 1;
1781                 List columns = rdef.getAllColumns();
1782                 if(chartType.equals(AppConstants.GT_TIME_SERIES)) {
1783                         String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
1784                         String chartGroup = AppUtils.getRequestNvlValue(request, "chartGroup");
1785                         String yAxis = AppUtils.getRequestNvlValue(request, "yAxis");
1786                 for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
1787                                 DataColumnType alldct = (DataColumnType) iterator.next();
1788                                 //debugLogger.debug("**********In  " +  chartSeries + " " + alldct.getColId());
1789                                 alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
1790                         }
1791
1792                 String drillDownReportId = AppUtils.getRequestNvlValue(request, "drillDownReport");
1793                 if(!drillDownReportId.equals("-1")) {
1794                         ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, drillDownReportId,
1795                                         false);
1796                         if (ddRr != null)
1797                                 request.setAttribute("CHART_FORMFIELDS", ddRr.getReportFormFields());
1798
1799                         for(ddRr.getReportFormFields().resetNext(); ddRr.getReportFormFields().hasNext(); ) {
1800                                         FormField ff = ddRr.getReportFormFields().getNext();
1801                                         if(!ff.getFieldType().equals(FormField.FFT_BLANK)) {
1802                                                 String value = AppUtils.getRequestNvlValue(request, "drillDown_"+ff.getFieldName());
1803                                                 ChartDrillFormfield cdf = new ObjectFactory().createChartDrillFormfield();
1804                                                 cdf.setFormfield(value);
1805                                                 rdef.getChartDrillOptions().getTargetFormfield().add(cdf);
1806                                         }
1807                         }
1808                 }
1809
1810                 } else {
1811                         if(chartType.equals(AppConstants.GT_BAR_3D)) {
1812                                 String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
1813                                 String chartGroup = AppUtils.getRequestNvlValue(request, "chartGroup");
1814                                 String yAxis = AppUtils.getRequestNvlValue(request, "yAxis");
1815                         for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
1816                                         DataColumnType alldct = (DataColumnType) iterator.next();
1817                                         //debugLogger.debug("**********In  " +  chartSeries + " " + alldct.getColId());
1818                                         alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
1819                                 }
1820                         String drillDownReportId = AppUtils.getRequestNvlValue(request, "drillDownReport");
1821                         rdef.setDrillReportIdForChart(drillDownReportId);
1822                         if(drillDownReportId.equals("-1")){
1823                                 rdef.setDrillReportIdForChart("");
1824                         }
1825
1826                         if(!drillDownReportId.equals("-1")) {
1827                                 ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, drillDownReportId,
1828                                                 false);
1829                                 if (ddRr != null)
1830                                         request.setAttribute("CHART_FORMFIELDS", ddRr.getReportFormFields());
1831
1832                                 for(ddRr.getReportFormFields().resetNext(); ddRr.getReportFormFields().hasNext(); ) {
1833                                                 FormField ff = ddRr.getReportFormFields().getNext();
1834                                                 if(!ff.getFieldType().equals(FormField.FFT_BLANK)) {
1835                                                         String value = AppUtils.getRequestNvlValue(request, "drillDown_"+ff.getFieldName());
1836                                                         ChartDrillFormfield cdf = new ObjectFactory().createChartDrillFormfield();
1837                                                         cdf.setFormfield(value);
1838                                                         rdef.getChartDrillOptions().getTargetFormfield().add(cdf);
1839                                                 }
1840                                 }
1841
1842                                 String xAxisFormField           = AppUtils.getRequestNvlValue(request, "drillDownXAxisFormfield");
1843                                 String yAxisFormField           = AppUtils.getRequestNvlValue(request, "drillDownYAxisFormfield");
1844                                 String seriesAxisFormField      = AppUtils.getRequestNvlValue(request, "drillDownSeriesAxisFormfield");
1845
1846                                 if(!xAxisFormField.equals("-1")){
1847                                         rdef.setDrillXAxisFormField(xAxisFormField);
1848
1849                                 if(!yAxisFormField.equals("-1"))
1850                                         rdef.setDrillYAxisFormField(yAxisFormField);
1851                                 if(!seriesAxisFormField.equals("-1"))
1852                                         rdef.setDrillSeriesFormField(seriesAxisFormField);
1853                                 } else {
1854                                         rdef.setDrillXAxisFormField("");
1855                                         rdef.setDrillYAxisFormField("");
1856                                         rdef.setDrillSeriesFormField("");
1857                                 }
1858                         }
1859
1860                         } else if(chartType.equals(AppConstants.GT_SCATTER)) {
1861                                 String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
1862                         for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
1863                                         DataColumnType alldct = (DataColumnType) iterator.next();
1864                                         //debugLogger.debug("**********In  " +  chartSeries + " " + alldct.getColId());
1865                                         alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
1866                                 }
1867
1868                         }else if(chartType.equals(AppConstants.GT_REGRESSION)) {
1869                                 String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
1870                         for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
1871                                         DataColumnType alldct = (DataColumnType) iterator.next();
1872                                         //debugLogger.debug("**********In  " +  chartSeries + " " + alldct.getColId());
1873                                         alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
1874                                 }
1875                         }else if(chartType.equals(AppConstants.GT_STACKED_HORIZ_BAR) || chartType.equals(AppConstants.GT_STACKED_VERT_BAR)
1876                     || chartType.equals(AppConstants.GT_STACKED_VERT_BAR_LINES) || chartType.equals(AppConstants.GT_STACKED_HORIZ_BAR_LINES)) {
1877                                 String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
1878                         for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
1879                                         DataColumnType alldct = (DataColumnType) iterator.next();
1880                                         //debugLogger.debug("**********In  " +  chartSeries + " " + alldct.getColId());
1881                                         alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
1882                                 }
1883                         }else if(chartType.equals(AppConstants.GT_LINE)) {
1884                                         String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
1885                                 for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
1886                                                 DataColumnType alldct = (DataColumnType) iterator.next();
1887                                                 //debugLogger.debug("**********In  " +  chartSeries + " " + alldct.getColId());
1888                                                 alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
1889                                         }
1890                         } else if (chartType.equals(AppConstants.GT_TIME_DIFFERENCE_CHART)) {
1891                                 String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
1892                         for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
1893                                         DataColumnType alldct = (DataColumnType) iterator.next();
1894                                         //debugLogger.debug("**********In  " +  chartSeries + " " + alldct.getColId());
1895                                         alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
1896                                 }
1897                         } else if (chartType.equals(AppConstants.GT_COMPARE_PREVYEAR_CHART)) {
1898                                 String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
1899                         for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
1900                                         DataColumnType alldct = (DataColumnType) iterator.next();
1901                                         //debugLogger.debug("**********In  " +  chartSeries + " " + alldct.getColId());
1902                                         alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
1903                                 }
1904
1905                         } else {
1906                                 if (rdef.hasSeriesColumn()) {
1907                                 for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
1908                                                 DataColumnType alldct = (DataColumnType) iterator.next();
1909                                                 alldct.setChartSeries(false);
1910                                         }
1911                                 }
1912
1913                         String drillDownReportId = AppUtils.getRequestNvlValue(request, "drillDownReport");
1914                         rdef.setDrillReportIdForChart(drillDownReportId);
1915                         if(drillDownReportId.equals("-1")){
1916                                 rdef.setDrillReportIdForChart("");
1917                         }
1918
1919                         if(!drillDownReportId.equals("-1")) {
1920                                 ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, drillDownReportId,
1921                                                 false);
1922                                 if (ddRr != null)
1923                                         request.setAttribute("CHART_FORMFIELDS", ddRr.getReportFormFields());
1924                                 for(ddRr.getReportFormFields().resetNext(); ddRr.getReportFormFields().hasNext(); ) {
1925                                                 FormField ff = ddRr.getReportFormFields().getNext();
1926                                                 if(!ff.getFieldType().equals(FormField.FFT_BLANK)) {
1927                                                         String value = AppUtils.getRequestNvlValue(request, "drillDown_"+ff.getFieldName());
1928                                                         ChartDrillFormfield cdf = new ObjectFactory().createChartDrillFormfield();
1929                                                         cdf.setFormfield(value);
1930                                                         rdef.getChartDrillOptions().getTargetFormfield().add(cdf);
1931                                                 }
1932                                 }
1933
1934                                 String xAxisFormField           = AppUtils.getRequestNvlValue(request, "drillDownXAxisFormfield");
1935                                 String yAxisFormField           = AppUtils.getRequestNvlValue(request, "drillDownYAxisFormfield");
1936                                 String seriesAxisFormField      = AppUtils.getRequestNvlValue(request, "drillDownSeriesAxisFormfield");
1937
1938                                 if(!xAxisFormField.equals("-1")){
1939                                         rdef.setDrillXAxisFormField(xAxisFormField);
1940
1941                                 if(!yAxisFormField.equals("-1"))
1942                                         rdef.setDrillYAxisFormField(yAxisFormField);
1943                                 if(!seriesAxisFormField.equals("-1"))
1944                                         rdef.setDrillSeriesFormField(seriesAxisFormField);
1945                                 } else {
1946                                         rdef.setDrillXAxisFormField("");
1947                                         rdef.setDrillYAxisFormField("");
1948                                         rdef.setDrillSeriesFormField("");
1949                                 }
1950                         }
1951
1952                         }
1953                 }
1954
1955                 for (int i = 1; i < Math.max(valueColsCount, 1) + 1; i++) {
1956                          //debugLogger.debug("********** " +  chartSeries);
1957                         if(i==1) {
1958                             /* Range Axis is resetted before adding */
1959                         for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
1960                                         DataColumnType dct = (DataColumnType) iterator.next();
1961                                         if(!nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND)) {
1962                                                 dct.setChartSeq(-1);
1963                                                 dct.setChartColor(null);
1964                                                 dct.setColOnChart(null);
1965                                                 dct.setCreateInNewChart(false);
1966                                                 dct.setChartGroup(null);
1967                                                 dct.setYAxis(null);
1968                                         }
1969                         }
1970
1971                         }
1972                         String newChartColAxis = AppUtils.getRequestNvlValue(request, "newChart" + i+"Axis");
1973                         String valueColId = AppUtils.getRequestNvlValue(request, "valueCol" + i);
1974                         String valueColColor = AppUtils.getRequestNvlValue(request, "valueCol" + i
1975                                         + "Color");
1976                         String valueColAxis = AppUtils
1977                                         .getRequestNvlValue(request, "valueCol" + valueColId + "Axis");
1978                         String chartGroup = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "chartGroup" + valueColId + "Axis"));
1979                         String yAxisGroup = "";
1980                         yAxisGroup = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "YAxisLabel" + valueColId));
1981                         //debugLogger.debug("^^^^^^^^^^^^^^^^^Chart Group  "  + chartGroup);
1982                         //if(chartType.equals(AppConstants.GT_TIME_SERIES)) {
1983                         //       debugLogger.debug("**********Outer If " +  chartSeries);
1984                         //}
1985
1986                         if (valueColId.length() > 0 && (!valueColId.equals(removeColId))) {
1987                                 DataColumnType dct = rdef.getColumnById(valueColId);
1988                                 dct.setChartSeq(idx++);
1989                                 dct.setChartColor(valueColColor);
1990                                 dct.setColOnChart(valueColAxis.equals("Y") ? "1" : "0");
1991                                 if(chartType.equals(AppConstants.GT_TIME_SERIES)) {
1992                                  dct.setCreateInNewChart(newChartColAxis.equals("Y") ? true : false);
1993                                 } else
1994                                  dct.setCreateInNewChart(false);
1995
1996                                  if(chartGroup!=null && chartGroup.length()>0)
1997                                          dct.setChartGroup(chartGroup+"|"+valueColId);
1998                                  else dct.setChartGroup("");
1999                                  if(chartType.equals(AppConstants.GT_TIME_SERIES))
2000                                          dct.setYAxis(nvl(yAxisGroup)+"|"+valueColId);
2001                                  else if (chartType.equals(AppConstants.GT_BAR_3D))
2002                                          dct.setYAxis(nvl(yAxisGroup)+"|"+valueColId);
2003                                  else dct.setYAxis("");
2004                                 //}
2005                                 //else
2006                                  //dct.setCreateInNewChart(false);
2007                         } else if (valueColId.length() > 0 && (valueColId.equals(removeColId))) {// if
2008                                 DataColumnType dct = rdef.getColumnById(valueColId);
2009                                 dct.setChartSeq(-1);
2010                                 dct.setChartColor(null);
2011                                 dct.setColOnChart(null);
2012                                 dct.setCreateInNewChart(false);
2013                                 dct.setChartGroup(null);
2014                                 dct.setYAxis(null);
2015                         } else { // else
2016                                 DataColumnType dct = rdef.getColumnById(valueColId);
2017                                 dct.setChartSeq(-1);
2018                                 dct.setChartColor(null);
2019                                 dct.setColOnChart(null);
2020                                 dct.setCreateInNewChart(false);
2021                                 dct.setChartGroup(null);
2022                                 dct.setYAxis(null);
2023                         }
2024                 } // for
2025
2026                 if (action.equals(AppConstants.WA_ADD_USER)) {
2027                         String valueColId = AppUtils.getRequestNvlValue(request, "valueColNew");
2028                         String valueColColor = AppUtils.getRequestNvlValue(request, "valueColNewColor");
2029                         String valueColAxis = AppUtils.getRequestNvlValue(request, "valueColNewAxis");
2030
2031                         if (valueColId.length() > 0) {
2032                                 DataColumnType dct = rdef.getColumnById(valueColId);
2033                                 dct.setChartSeq(idx++);
2034                                 dct.setChartColor(valueColColor);
2035                                 dct.setColOnChart(valueColAxis.equals("Y") ? "1" : "0");
2036                         } // if
2037                 } // for
2038
2039                 return true; // reportUpdated;
2040         } // processChart
2041
2042         public boolean processAdhocSchedule(HttpServletRequest request, String action)
2043         throws Exception {
2044                 ReportSchedule reportSchedule = (ReportSchedule) request.getSession().getAttribute(AppConstants.SI_REPORT_SCHEDULE);
2045                 reportSchedule.setScheduleUserID(AppUtils.getUserID(request));
2046                 reportSchedule.setSchedEnabled(
2047                                 nvl(AppUtils.getRequestValue(request, "schedEnabled"), "N"));
2048                 reportSchedule.setStartDate(
2049                                 AppUtils.getRequestNvlValue(request, "schedStartDate"));
2050                 reportSchedule.setEndDate(
2051                                 AppUtils.getRequestNvlValue(request, "schedEndDate"));
2052                 reportSchedule.setEndHour(AppUtils.getRequestNvlValue(request, "schedEndHour"));
2053                 reportSchedule.setEndMin(AppUtils.getRequestNvlValue(request, "schedEndMin"));
2054                 reportSchedule.setEndAMPM(AppUtils.getRequestNvlValue(request, "schedEndAMPM"));
2055                 //schedRunDate
2056                 reportSchedule.setRunDate(
2057                                 AppUtils.getRequestNvlValue(request, "schedRunDate").length()>0?AppUtils.getRequestNvlValue(request, "schedRunDate"):AppUtils.getRequestNvlValue(request, "schedStartDate"));
2058                 reportSchedule.setRunHour(AppUtils.getRequestNvlValue(request, "schedHour"));
2059                 reportSchedule.setRunMin(AppUtils.getRequestNvlValue(request, "schedMin"));
2060                 reportSchedule.setRunAMPM(AppUtils.getRequestNvlValue(request, "schedAMPM"));
2061                 reportSchedule.setRecurrence(
2062                                 AppUtils.getRequestNvlValue(request, "schedRecurrence"));
2063                 reportSchedule.setConditional(
2064                                 nvl(AppUtils.getRequestValue(request, "conditional"), "N"));
2065                 reportSchedule.setConditionSQL(
2066                                 AppUtils.getRequestNvlValue(request, "conditionSQL"));
2067                 reportSchedule.setNotify_type(
2068                                 AppUtils.getRequestNvlValue(request, "notify_type"));
2069                 reportSchedule.setDownloadLimit(
2070                                 AppUtils.getRequestNvlValue(request, "downloadLimit"));
2071                 reportSchedule.setFormFields(
2072                                 AppUtils.getRequestNvlValue(request, "formFields"));
2073                  reportSchedule.setAttachmentMode(
2074                                 AppUtils.getRequestNvlValue(request, "sendAttachment"));
2075
2076                 String userId = AppUtils.getRequestNvlValue(request, "schedEmailAdd");
2077                 String roleId = AppUtils.getRequestNvlValue(request, "schedEmailAddRole");
2078                 int flag = 0;
2079                 if ((!(userId.length()>0 || roleId.length()>0) && (reportSchedule.getEmailToUsers().isEmpty() && reportSchedule.getEmailToRoles().isEmpty())) ) {
2080                         flag = 1;
2081                 }
2082
2083                 if (flag == 1 || (action.equals(AppConstants.WA_ADD_USER) || action.equals(AppConstants.WA_ADD_ROLE)) ) {
2084                         String loggedInUserId = AppUtils.getUserID(request);
2085                         if (Globals.getUseLoginIdInSchedYN().equals("Y")){
2086                                 reportSchedule.addEmailToUser(loggedInUserId, AppUtils.getUserLoginId(request));
2087                         } else
2088                         reportSchedule.addEmailToUser(loggedInUserId, (AppUtils.getUserName(loggedInUserId).length()>0?AppUtils.getUserName(loggedInUserId):(AppUtils.getUserLoginId(loggedInUserId).length()>0?AppUtils.getUserLoginId(loggedInUserId):loggedInUserId) ));
2089                 }
2090                 if (action.equals(AppConstants.WA_ADD_USER)) {
2091                         //String userId = AppUtils.getRequestNvlValue(request, "schedEmailAdd");
2092                         String userName = AppUtils.getUserName(userId);
2093                         if (Globals.getUseLoginIdInSchedYN().equals("Y")){
2094                                 String userLoginId = AppUtils.getUserLoginId(userId);
2095                                 if (userId.length() > 0 && (userLoginId != null && userLoginId.length() > 0))
2096                                         reportSchedule.addEmailToUser(userId, userLoginId);
2097                                 else {
2098                                         if (userId.length() > 0 && (userName != null && userName.length() > 0) )
2099                                                 reportSchedule.addEmailToUser(userId, userName);
2100                                         else {
2101                                                 reportSchedule.addEmailToUser(userId, userId);
2102                                         }
2103                                 }
2104                         }else{
2105                                 if (userId.length() > 0 &&  (userName != null && userName.length() > 0) )
2106                                         reportSchedule.addEmailToUser(userId, userName);
2107                                 else {
2108                                         reportSchedule.addEmailToUser(userId, userId);
2109                                 }
2110                         }
2111
2112                 } else if (action.equals(AppConstants.WA_DELETE_USER))
2113                         reportSchedule.removeEmailToUser(
2114                                         AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
2115                 else if (action.equals(AppConstants.WA_ADD_ROLE)) {
2116                         //String roleId = AppUtils.getRequestNvlValue(request, "schedEmailAddRole");
2117                         String roleName = AppUtils.getRoleName(roleId);
2118                         if (roleId.length() > 0 && roleName != null)
2119                                 reportSchedule.addEmailToRole(roleId, roleName);
2120                 } else if (action.equals(AppConstants.WA_DELETE_ROLE))
2121                         reportSchedule.removeEmailToRole(
2122                                         AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
2123                 request.getSession().setAttribute(AppConstants.SI_REPORT_SCHEDULE, reportSchedule);
2124                 return true;
2125         } // processAdhocSchedule
2126
2127         private boolean processSchedule(HttpServletRequest request, String action)
2128                         throws Exception {
2129                 // Added for form field chaining in schedule tab so that setParamValues() is called
2130                 request.setAttribute(AppConstants.SCHEDULE_ACTION, "Y");
2131                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
2132                                 AppConstants.SI_REPORT_DEFINITION);
2133                 ReportSchedule reportSchedule = rdef.getReportSchedule();
2134                 reportSchedule.setScheduleUserID(AppUtils.getUserID(request));
2135                 reportSchedule.setSchedEnabled(
2136                                 nvl(AppUtils.getRequestValue(request, "schedEnabled"), "N"));
2137                 reportSchedule.setStartDate(
2138                                 AppUtils.getRequestNvlValue(request, "schedStartDate"));
2139                 reportSchedule.setEndDate(
2140                                 AppUtils.getRequestNvlValue(request, "schedEndDate"));
2141                 reportSchedule.setEndHour(AppUtils.getRequestNvlValue(request, "schedEndHour"));
2142                 reportSchedule.setEndMin(AppUtils.getRequestNvlValue(request, "schedEndMin"));
2143                 reportSchedule.setEndAMPM(AppUtils.getRequestNvlValue(request, "schedEndAMPM"));
2144                 //schedRunDate
2145                 reportSchedule.setRunDate(
2146                                 AppUtils.getRequestNvlValue(request, "schedRunDate").length()>0?AppUtils.getRequestNvlValue(request, "schedRunDate"):AppUtils.getRequestNvlValue(request, "schedStartDate"));
2147                 reportSchedule.setRunHour(AppUtils.getRequestNvlValue(request, "schedHour"));
2148                 reportSchedule.setRunMin(AppUtils.getRequestNvlValue(request, "schedMin"));
2149                 reportSchedule.setRunAMPM(AppUtils.getRequestNvlValue(request, "schedAMPM"));
2150                 reportSchedule.setRecurrence(
2151                                 AppUtils.getRequestNvlValue(request, "schedRecurrence"));
2152                 reportSchedule.setConditional(
2153                                 nvl(AppUtils.getRequestValue(request, "conditional"), "N"));
2154                 reportSchedule.setConditionSQL(
2155                                 AppUtils.getRequestNvlValue(request, "conditionSQL"));
2156                 reportSchedule.setNotify_type(
2157                                 AppUtils.getRequestNvlValue(request, "notify_type"));
2158                 reportSchedule.setDownloadLimit(
2159                                 AppUtils.getRequestNvlValue(request, "downloadLimit"));
2160                 reportSchedule.setFormFields(
2161                                 AppUtils.getRequestNvlValue(request, "formFields"));
2162                 reportSchedule.setAttachmentMode(
2163                                 AppUtils.getRequestNvlValue(request, "sendAttachment"));
2164
2165                 reportSchedule.setEncryptMode(
2166                                 AppUtils.getRequestNvlValue(request, "encryptMode"));
2167                 if (action.equals(AppConstants.WA_ADD_USER)) {
2168                         String userId = AppUtils.getRequestNvlValue(request, "schedEmailAdd");
2169                         String userName = AppUtils.getUserName(userId);
2170                         if (Globals.getUseLoginIdInSchedYN().equals("Y")){
2171                                 String userLoginId = AppUtils.getUserLoginId(userId);
2172                                 if (userId.length() > 0 && (userLoginId != null && userLoginId.length() > 0))
2173                                         reportSchedule.addEmailToUser(userId, userLoginId);
2174                                 else {
2175                                         if (userId.length() > 0 && (userName != null && userName.length() > 0) )
2176                                                 reportSchedule.addEmailToUser(userId, userName);
2177                                         else {
2178                                                 reportSchedule.addEmailToUser(userId, userId);
2179                                         }
2180                                 }
2181                         }else{
2182                                 if (userId.length() > 0 &&  (userName != null && userName.length() > 0) )
2183                                         reportSchedule.addEmailToUser(userId, userName);
2184                                 else {
2185                                         reportSchedule.addEmailToUser(userId, userId);
2186                                 }
2187                         }
2188                 } else if (action.equals(AppConstants.WA_DELETE_USER))
2189                         reportSchedule.removeEmailToUser(
2190                                         AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
2191                 else if (action.equals(AppConstants.WA_ADD_ROLE)) {
2192                         String roleId = AppUtils.getRequestNvlValue(request, "schedEmailAddRole");
2193                         String roleName = AppUtils.getRoleName(roleId);
2194                         if (roleId.length() > 0 && roleName != null)
2195                                 reportSchedule.addEmailToRole(roleId, roleName);
2196                 } else if (action.equals(AppConstants.WA_DELETE_ROLE))
2197                         reportSchedule.removeEmailToRole(
2198                                         AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
2199
2200                 return true;
2201         } // processSchedule
2202
2203         private boolean processUserAccess(HttpServletRequest request, String action)
2204                         throws Exception {
2205                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
2206                                 AppConstants.SI_REPORT_DEFINITION);
2207
2208                 String ownerID = AppUtils.getRequestNvlValue(request, "reportOwner");
2209                 String rPublic = nvl(AppUtils.getRequestValue(request, "public"), "N");
2210
2211                 boolean reportUpdated = (!(ownerID.equals(nvl(rdef.getOwnerID())) && rPublic
2212                                 .equals(rdef.isPublic() ? "Y" : "N")));
2213
2214                 rdef.getReportSecurity().setOwnerID(ownerID);
2215                 rdef.setPublic(rPublic.equals("Y"));
2216
2217                 if (action.equals(AppConstants.WA_ADD_USER))
2218                         rdef.getReportSecurity().addUserAccess(
2219                                         AppUtils.getRequestNvlValue(request, "newUserId"), "Y");
2220                 else if (action.equals(AppConstants.WA_DELETE_USER))
2221                         rdef.getReportSecurity().removeUserAccess(
2222                                         AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
2223                 else if (action.equals(AppConstants.WA_GRANT_USER))
2224                         rdef.getReportSecurity().updateUserAccess(
2225                                         AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID), "N");
2226                 else if (action.equals(AppConstants.WA_REVOKE_USER))
2227                         rdef.getReportSecurity().updateUserAccess(
2228                                         AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID), "Y");
2229                 else if (action.equals(AppConstants.WA_ADD_ROLE))
2230                         rdef.getReportSecurity().addRoleAccess(
2231                                         AppUtils.getRequestNvlValue(request, "newRoleId"), "Y");
2232                 else if (action.equals(AppConstants.WA_DELETE_ROLE))
2233                         rdef.getReportSecurity().removeRoleAccess(
2234                                         AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
2235                 else if (action.equals(AppConstants.WA_GRANT_ROLE))
2236                         rdef.getReportSecurity().updateRoleAccess(
2237                                         AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID), "N");
2238                 else if (action.equals(AppConstants.WA_REVOKE_ROLE))
2239                         rdef.getReportSecurity().updateRoleAccess(
2240                                         AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID), "Y");
2241
2242                 return reportUpdated;
2243         } // processUserAccess
2244
2245         private boolean processClearLog(HttpServletRequest request) throws Exception {
2246                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
2247                                 AppConstants.SI_REPORT_DEFINITION);
2248                 String user_id = AppUtils.getUserID(request);
2249                 // Modified so that only the logged in user entries are erased. - Sundar
2250                 ReportLoader.clearReportLogEntries(rdef.getReportID(), user_id);
2251                 return false;
2252         } // processClearLog
2253
2254         private boolean processValidateSQL(HttpServletRequest request) throws Exception {
2255                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
2256                                 AppConstants.SI_REPORT_DEFINITION);
2257
2258                 String sql = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportSQL"));
2259                 request.setAttribute("sqlValidated", "N");
2260                 rdef.parseReportSQL(sql);
2261                 request.setAttribute("sqlValidated", "Y");
2262
2263                 return true;
2264         } // processValidateSQL
2265
2266
2267         /*****For Report Maps - Start******/
2268         private boolean processMap(HttpServletRequest request, String action) throws Exception {
2269                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
2270                                 AppConstants.SI_REPORT_DEFINITION);
2271
2272                 org.onap.portalsdk.analytics.xmlobj.ReportMap repMap = rdef.getReportMap();
2273                 //clearing already added
2274                 if (repMap != null){
2275                         repMap.getMarkers().removeAll(repMap.getMarkers());
2276                 }
2277                 String addressColumn = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "addressColumn0"));
2278                 System.out.println(" #$%#$%#$% -- address col = " + addressColumn);
2279                 String dataColumn = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "dataColumn0"));
2280                 String legendColumn = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "legendColumn"));
2281                 //String legendDisplayName = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "dataHeaderL"));
2282                 //if(nvl(legendDisplayName).length()<=0) legendDisplayName = legendColumn;
2283                 String color = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "markerColor0"));
2284                 String isMapAllowed = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "isMapAllowed"));
2285                 String useDefaultSize = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "useDefaultSize"));
2286                 String height = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "height"));
2287                 String width = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "width"));
2288                 System.out.println(" #$%#$%#$% -- useDefaultSize="+ useDefaultSize+"  height = " + height+" width="+width);
2289
2290                 String addAddress = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "addAddress"));
2291                 String latCol = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "latColumn"));
2292                 String longCol = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "longColumn"));
2293                 String colorCol = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "colorColumn"));
2294                 if (isMapAllowed.equals(""))
2295                         isMapAllowed = "N";
2296                 if (useDefaultSize.equals(""))
2297                         useDefaultSize = "N";
2298                 if (repMap == null)
2299                                 rdef.setReportMap(new ObjectFactory().createReportMap());
2300                 if(repMap!=null){
2301                         repMap.setAddressColumn(addressColumn);
2302                         repMap.setDataColumn(dataColumn);
2303                         repMap.setIsMapAllowedYN(isMapAllowed);
2304                         repMap.setUseDefaultSize(useDefaultSize);
2305                         repMap.setMarkerColor(color);
2306                         repMap.setAddAddressInDataYN(addAddress);
2307                         repMap.setLatColumn(latCol);
2308                         repMap.setLongColumn(longCol);
2309                         repMap.setColorColumn(colorCol);
2310                         repMap.setHeight(height.trim());
2311                         repMap.setWidth(width.trim());
2312                         repMap.setLegendColumn(legendColumn);
2313                         //repMap.setLegendDisplayName(legendDisplayName);
2314
2315                         Marker m = new ObjectFactory().createMarker();
2316                         m.setAddressColumn(addressColumn);
2317                         m.setDataColumn(dataColumn);
2318                         repMap.getMarkers().add(m);
2319                         String markerCountString = AppUtils.getRequestNvlValue(request, "markerCount");
2320                         int markerCount = 0;
2321                         if (markerCountString != null && markerCountString.equals("") == false){
2322                                 markerCount = new Integer(markerCountString).intValue();
2323                         }
2324                         for (int i = 1; i < markerCount; i ++){
2325                                 String additionalAddressColumn = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "addressColumn" + i));
2326                                 String additionalDataHeader = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "dataHeader" + i));
2327                                 String additionalData = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "dataColumn" + i));
2328                                 String additionalColor = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "markerColor" + i));
2329                                 if (additionalAddressColumn.equals("1") == false){
2330                                         m = new ObjectFactory().createMarker();
2331                                         m.setAddressColumn(additionalAddressColumn);
2332                                         m.setDataHeader(additionalDataHeader);
2333                                         m.setDataColumn(additionalData);
2334                                         m.setMarkerColor(additionalColor);
2335                                         repMap.getMarkers().add(m);
2336                                 }
2337                         }
2338                 }
2339
2340                 return true;
2341         } // processMap
2342         /*****For Report Maps - End******/
2343
2344
2345 } // WizardProcessor