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