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