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