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