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