5912929b79389ed67e90983e643f4410430161e2
[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.system.fusion.web;
39
40 import java.io.IOException;
41 import java.io.OutputStreamWriter;
42 import java.io.PrintWriter;
43 import java.io.StringWriter;
44 import java.io.Writer;
45 import java.lang.reflect.InvocationTargetException;
46 import java.lang.reflect.Method;
47 import java.util.ArrayList;
48 import java.util.Enumeration;
49 import java.util.HashMap;
50 import java.util.HashSet;
51 import java.util.Iterator;
52 import java.util.List;
53 import java.util.Map;
54 import java.util.Vector;
55
56 import javax.servlet.ServletContext;
57 import javax.servlet.http.HttpServletRequest;
58 import javax.servlet.http.HttpServletResponse;
59 import javax.servlet.http.HttpSession;
60
61 import org.onap.portalsdk.analytics.controller.Action;
62 import org.onap.portalsdk.analytics.controller.ErrorHandler;
63 import org.onap.portalsdk.analytics.controller.WizardSequence;
64 import org.onap.portalsdk.analytics.error.RaptorException;
65 import org.onap.portalsdk.analytics.error.RaptorRuntimeException;
66 import org.onap.portalsdk.analytics.error.ReportSQLException;
67 import org.onap.portalsdk.analytics.model.DataCache;
68 import org.onap.portalsdk.analytics.model.ReportHandler;
69 import org.onap.portalsdk.analytics.model.ReportLoader;
70 import org.onap.portalsdk.analytics.model.base.IdNameList;
71 import org.onap.portalsdk.analytics.model.base.IdNameValue;
72 import org.onap.portalsdk.analytics.model.base.ReportUserRole;
73 import org.onap.portalsdk.analytics.model.definition.DrillDownParamDef;
74 import org.onap.portalsdk.analytics.model.definition.ReportDefinition;
75 import org.onap.portalsdk.analytics.model.definition.ReportLogEntry;
76 import org.onap.portalsdk.analytics.model.definition.SecurityEntry;
77 import org.onap.portalsdk.analytics.model.definition.wizard.ColumnEditJSON;
78 import org.onap.portalsdk.analytics.model.definition.wizard.ColumnJSON;
79 import org.onap.portalsdk.analytics.model.definition.wizard.DefinitionJSON;
80 import org.onap.portalsdk.analytics.model.definition.wizard.FormEditJSON;
81 import org.onap.portalsdk.analytics.model.definition.wizard.FormFieldGroupsJSON;
82 import org.onap.portalsdk.analytics.model.definition.wizard.IdNameBooleanJSON;
83 import org.onap.portalsdk.analytics.model.definition.wizard.ImportJSON;
84 import org.onap.portalsdk.analytics.model.definition.wizard.MessageJSON;
85 import org.onap.portalsdk.analytics.model.definition.wizard.NameBooleanJSON;
86 import org.onap.portalsdk.analytics.model.definition.wizard.QueryJSON;
87 import org.onap.portalsdk.analytics.model.definition.wizard.QueryResultJSON;
88 import org.onap.portalsdk.analytics.model.definition.wizard.RaptorResponse;
89 import org.onap.portalsdk.analytics.model.definition.wizard.SearchFieldJSON;
90 import org.onap.portalsdk.analytics.model.pdf.PdfReportHandler;
91 import org.onap.portalsdk.analytics.model.runtime.CategoryAxisJSON;
92 import org.onap.portalsdk.analytics.model.runtime.ChartJSON;
93 import org.onap.portalsdk.analytics.model.runtime.ErrorJSONRuntime;
94 import org.onap.portalsdk.analytics.model.runtime.FormField;
95 import org.onap.portalsdk.analytics.model.runtime.RangeAxisJSON;
96 import org.onap.portalsdk.analytics.model.runtime.ReportFormFields;
97 import org.onap.portalsdk.analytics.model.runtime.ReportRuntime;
98 import org.onap.portalsdk.analytics.system.AppUtils;
99 import org.onap.portalsdk.analytics.system.ConnectionUtils;
100 import org.onap.portalsdk.analytics.system.DbUtils;
101 import org.onap.portalsdk.analytics.system.Globals;
102 import org.onap.portalsdk.analytics.util.AppConstants;
103 import org.onap.portalsdk.analytics.util.DataSet;
104 import org.onap.portalsdk.analytics.util.Utils;
105 import org.onap.portalsdk.analytics.util.XSSFilter;
106 import org.onap.portalsdk.analytics.view.ReportData;
107 import org.onap.portalsdk.analytics.xmlobj.DataColumnType;
108 import org.onap.portalsdk.analytics.xmlobj.FormFieldType;
109 import org.onap.portalsdk.analytics.xmlobj.ObjectFactory;
110 import org.onap.portalsdk.analytics.xmlobj.PredefinedValueList;
111 import org.onap.portalsdk.analytics.xmlobj.SemaphoreList;
112 import org.onap.portalsdk.core.controller.RestrictedBaseController;
113 import org.onap.portalsdk.core.domain.User;
114 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
115 import org.onap.portalsdk.core.util.SecurityCodecUtil;
116 import org.onap.portalsdk.core.web.support.UserUtils;
117 import org.owasp.esapi.ESAPI;
118 import org.springframework.stereotype.Controller;
119 import org.springframework.web.bind.annotation.CrossOrigin;
120 import org.springframework.web.bind.annotation.PathVariable;
121 import org.springframework.web.bind.annotation.RequestBody;
122 import org.springframework.web.bind.annotation.RequestMapping;
123 import org.springframework.web.bind.annotation.GetMapping;
124 import org.springframework.web.bind.annotation.PostMapping;
125 import org.springframework.web.bind.annotation.PutMapping;
126 import org.springframework.web.bind.annotation.RequestMethod;
127 import org.springframework.web.bind.annotation.ResponseBody;
128
129 import com.fasterxml.jackson.databind.DeserializationFeature;
130 import com.fasterxml.jackson.databind.ObjectMapper;
131 import com.fasterxml.jackson.databind.SerializationFeature;
132
133 @Controller
134 @RequestMapping("/")
135 public class RaptorControllerAsync extends RestrictedBaseController {
136
137         private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RaptorControllerAsync.class);
138         private static final String INVALID_ACTION = "[Controller.processRequest]Invalid raptor action [";
139         private static final String UNABLE_INSTANTIATE = "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: ";
140
141         private String viewName;
142
143         @GetMapping(value = { "/raptor.htm" })
144         public void RaptorSearch(HttpServletRequest request, HttpServletResponse response)
145                         throws IOException, RaptorException {
146
147                 viewName = "";
148                 String actionKey = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));
149                 actionKey = nvl(actionKey, "report.run");
150
151                 HttpSession session = request.getSession();
152                 User user = UserUtils.getUserSession(request);
153         boolean isPageDownload = Boolean.valueOf(request.getParameter(AppConstants.PAGE_DOWNLOAD));
154                 if ("report.download.excel2007.session".equals(actionKey) || "report.download.csv.session".equals(actionKey)
155                                 || "report.download.excel.session".equals(actionKey)
156                                 || "report.download.pdf.session".equals(actionKey)) {
157                         if (session != null && user != null) {
158                                 ServletContext servletContext = request.getSession().getServletContext();
159                                 if (!Globals.isSystemInitialized()) {
160                                         Globals.initializeSystem(servletContext);
161                                 }
162                                 ReportRuntime rr = null;
163                                 ReportData rd = null;
164                                 String parent = "";
165                                 int parentFlag = 0;
166                                 if (!"N".equals(nvl(request.getParameter("parent"), "")))
167                                         parent = nvl(request.getParameter("parent"), "");
168                                 if (parent.startsWith("parent_"))
169                                         parentFlag = 1;
170                                 if (parentFlag == 1) {
171                                         rr = (ReportRuntime) request.getSession().getAttribute(parent + "_rr");
172                                         rd = (ReportData) request.getSession().getAttribute(parent + "_rd");
173                                 }
174
175                                 boolean isEmbedded = false;
176                                 Object temp = request.getSession().getAttribute("isEmbedded");
177                                 if (temp != null) {
178                                         isEmbedded = (boolean) temp;
179                                 }
180                                 if (isEmbedded) {
181                                         String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
182                                         if (rr == null)
183                                                 rr = (ReportRuntime) ((HashMap) request.getSession()
184                                                                 .getAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP)).get(reportID);
185                                         if (rd == null)
186                                                 rd = (ReportData) ((HashMap) request.getSession()
187                                                                 .getAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP)).get(reportID);
188                                 } else {
189                                         if (rr == null)
190                                                 rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
191                                         if (rd == null)
192                                                 rd = (ReportData) request.getSession().getAttribute(AppConstants.RI_REPORT_DATA);
193                                 }
194                                 String userId = AppUtils.getUserID(request);
195                                 int downloadLimit = 0;
196                                 if (rr != null)
197                                         downloadLimit = (rr.getMaxRowsInExcelDownload() > 0) ? rr.getMaxRowsInExcelDownload()
198                                                         : Globals.getDownloadLimit();
199                                 if ("report.csv.download".equals(actionKey))
200                                         downloadLimit = Globals.getCSVDownloadLimit();
201                                 
202                                final boolean isDashboard = (session.getAttribute(AppConstants.SI_DASHBOARD_REP_ID) != null) &&
203                                         (((String) session.getAttribute(AppConstants.SI_DASHBOARD_REP_ID)).equals(rr.getReportID()));
204                                
205                                if(!isDashboard)
206                                {
207                                                 String sql_whole = rr.getReportDataSQL(userId, downloadLimit, request);
208                                                 request.setAttribute(AppConstants.RI_REPORT_SQL_WHOLE, sql_whole);
209                                }
210
211                                 try {
212                                         OutputStreamWriter out = new OutputStreamWriter(response.getOutputStream());
213                     if(rr != null)
214                         rr.setSinglePageDownload(isPageDownload);
215                                         if ("report.download.pdf.session".equals(actionKey)) {
216                                                 new PdfReportHandler().createPdfFileContent(request, response, 3);
217                                         } else if ("report.download.csv.session".equals(actionKey)) {
218                                                 (new ReportHandler()).createCSVFileContent(out, rd, rr, request, response);
219                                         } else if ("report.download.excel.session".equals(actionKey)) {
220                                                 new ReportHandler().createExcelFileContent(out, rd, rr, request, response, userId, 3);                                  
221                                         } else {
222                                                 new ReportHandler().createExcel2007FileContent(out, rd, rr, request, response, userId, 3);                                                                                                                                                                                                                              
223                                         }
224                                 } catch (Exception e) {
225                                         logger.error(EELFLoggerDelegate.errorLogger,
226                                                         INVALID_ACTION + actionKey + "].", e);
227                                 }
228                         } else {
229                                 response.sendRedirect("login.htm");
230                         }
231                 } else {
232                         if (session != null && user != null) {
233                                 Action action = null;
234                                 ServletContext servletContext = request.getSession().getServletContext();
235                                 if (!Globals.isSystemInitialized()) {
236                                         Globals.initializeSystem(servletContext);
237                                 }
238                                 try {
239                                         action = Globals.getRaptorActionMapping().getAction(actionKey);
240                                         if (action == null)
241                                                 throw new RaptorRuntimeException("Action not found");
242                                 } catch (RaptorException e) {
243                                         logger.error(EELFLoggerDelegate.errorLogger,
244                                                         INVALID_ACTION + actionKey + "].", e);
245
246                                         viewName = (new ErrorHandler()).processFatalErrorJSON(request,
247                                                         new RaptorRuntimeException(INVALID_ACTION + actionKey
248                                                                         + "]. Exception: " + e.getMessage()));
249                                 }
250
251                                 try {
252                                         Class[] paramTypes = new Class[2];
253                                         paramTypes[0] = Class.forName("javax.servlet.http.HttpServletRequest");
254                                         paramTypes[1] = Class.forName("java.lang.String");
255
256                                         Class handlerClass = Class.forName(action.getControllerClass());
257                                         Object handler = handlerClass.newInstance();
258                                         Method handlerMethod = handlerClass.getMethod(action.getControllerMethod(), paramTypes);
259
260                                         Object[] paramValues = new Object[2];
261                                         paramValues[0] = request;
262                                         paramValues[1] = action.getJspName();
263                                         ;
264
265                                         viewName = (String) handlerMethod.invoke(handler, paramValues);
266                                         if (!"chart.run".equals(actionKey))
267                                                 response.setContentType("application/json");
268                                         else
269                                                 response.setContentType("text/html");
270
271                                 } catch (ClassNotFoundException e) {
272                                         logger.debug(EELFLoggerDelegate.debugLogger, (INVALID_ACTION
273                                                         + actionKey + "]. ClassNotFoundException: " + e.getMessage()));
274                                         viewName = (new ErrorHandler()).processFatalErrorJSON(request,
275                                                         new RaptorRuntimeException(UNABLE_INSTANTIATE + e.getMessage()));
276                                 } catch (IllegalAccessException e) {
277                                         logger.debug(EELFLoggerDelegate.debugLogger, (INVALID_ACTION
278                                                         + actionKey + "]. IllegalAccessException: " + e.getMessage()));
279                                         viewName = (new ErrorHandler()).processFatalErrorJSON(request,
280                                                         new RaptorRuntimeException(UNABLE_INSTANTIATE + e.getMessage()));
281                                 } catch (InstantiationException e) {
282                                         logger.debug(EELFLoggerDelegate.debugLogger, (INVALID_ACTION
283                                                         + actionKey + "]. InstantiationException: " + e.getMessage()));
284                                         viewName = (new ErrorHandler()).processFatalErrorJSON(request,
285                                                         new RaptorRuntimeException(UNABLE_INSTANTIATE + e.getMessage()));
286                                 } catch (NoSuchMethodException e) {
287                                         logger.debug(EELFLoggerDelegate.debugLogger, (INVALID_ACTION
288                                                         + actionKey + "]. NoSuchMethodException: " + e.getMessage()));
289                                         viewName = (new ErrorHandler()).processFatalErrorJSON(request,
290                                                         new RaptorRuntimeException(UNABLE_INSTANTIATE + e.getMessage()));
291                                 } catch (InvocationTargetException e) {
292                                         logger.debug(EELFLoggerDelegate.debugLogger, (INVALID_ACTION
293                                                         + actionKey + "]. InvocationTargetException: " + e.getMessage()));
294                                         viewName = (new ErrorHandler()).processFatalErrorJSON(request,
295                                                         new RaptorRuntimeException(UNABLE_INSTANTIATE + e.getMessage()));
296                                 } finally {
297                                         PrintWriter out = response.getWriter();
298                                         out.write(viewName);
299                                 }
300                         } else {
301                                 PrintWriter out = response.getWriter();
302                                 out.write("session has timed out for user");
303                         }
304
305                 }
306         }
307
308         @GetMapping(value = "/report/wizard/drill_down_param/{parameter}", produces = "application/json")
309         public @ResponseBody List<DrillDownParamDef> getDrillDownParamDef (@PathVariable("parameter") String parameter, HttpServletRequest request, HttpServletResponse response)
310         {
311                 List<DrillDownParamDef> list = new ArrayList<>();
312                 String[] tmepArray = null;
313                 if(parameter!=null){
314                         tmepArray = parameter.split("&");
315                 }
316                 for(String str:tmepArray){
317                         list.add(new DrillDownParamDef(str));
318                 }
319                 return list;
320         }
321         
322         @GetMapping(value = "/report/wizard/list_columns", produces = "application/json")
323         public @ResponseBody ArrayList<ColumnJSON> listColumns(HttpServletRequest request, HttpServletResponse response)
324         {
325                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
326                 List<DataColumnType> reportColumnList = rdef.getAllColumns();
327                 ArrayList<ColumnJSON> listJSON = new ArrayList<>();
328                 ColumnJSON columnJSON;
329
330                 for (DataColumnType reportColumnType : reportColumnList) {
331                         columnJSON = new ColumnJSON();
332                         columnJSON.setId(reportColumnType.getColId());
333                         columnJSON.setName(reportColumnType.getDisplayName());
334                         listJSON.add(columnJSON);
335                 }
336                 return listJSON;
337         }
338
339         @GetMapping(value = "/report/wizard/list_drilldown_reports", produces = "application/json")
340         public @ResponseBody ArrayList<ColumnJSON> list_drilldown_reports(HttpServletRequest request,
341                         HttpServletResponse response) throws RaptorException {
342                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
343                 Vector<IdNameValue> publicReportIdNames = DataCache.getPublicReportIdNames();
344                 Vector groupReportIdNames = DataCache.getGroupAccessibleReportIdNames(AppUtils.getUserID(request),
345                                 AppUtils.getUserRoles(request));
346                 Vector privateReportIdNames = DataCache.getPrivateAccessibleReportIdNames(AppUtils.getUserID(request),
347                                 AppUtils.getUserRoles(request));
348
349                 ArrayList<ColumnJSON> listJSON = new ArrayList<>();
350                 ColumnJSON columnJSON;
351
352                 ServletContext servletContext = request.getSession().getServletContext();
353                 if (!Globals.isSystemInitialized()) {
354                         Globals.initializeSystem(servletContext);
355                 }
356
357                 for (int i = 0; i < publicReportIdNames.size(); i++) {
358                         IdNameValue reportIdName = publicReportIdNames.get(i);
359                         columnJSON = new ColumnJSON();
360                         columnJSON.setId(reportIdName.getId());
361                         columnJSON.setName("Public Report: " + reportIdName.getName());
362                         if (!rdef.getReportID().equals(reportIdName.getId()))
363                                 listJSON.add(columnJSON);
364                 }
365
366                 for (int i = 0; i < groupReportIdNames.size(); i++) {
367                         IdNameValue reportIdName = (IdNameValue) groupReportIdNames.get(i);
368                         columnJSON = new ColumnJSON();
369                         columnJSON.setId(reportIdName.getId());
370                         columnJSON.setName("Group Report: " + reportIdName.getName());
371                         if (!rdef.getReportID().equals(reportIdName.getId()))
372                                 listJSON.add(columnJSON);
373                 }
374
375                 for (int i = 0; i < privateReportIdNames.size(); i++) {
376                         IdNameValue reportIdName = (IdNameValue) privateReportIdNames.get(i);
377                         columnJSON = new ColumnJSON();
378                         columnJSON.setId(reportIdName.getId());
379                         columnJSON.setName("Private Report: " + reportIdName.getName());
380                         if (!rdef.getReportID().equals(reportIdName.getId()))
381                                 listJSON.add(columnJSON);
382                 }
383
384                 return listJSON;
385         }
386
387         @GetMapping(value = "/report/wizard/list_formfields", produces = "application/json")
388         public @ResponseBody ArrayList<SearchFieldJSON> listFormFields(HttpServletRequest request,
389                         HttpServletResponse response) {
390                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
391                 ArrayList<SearchFieldJSON> listJSON = new ArrayList<>();
392                 SearchFieldJSON fieldJSON;
393                 if (rdef.getFormFieldList() != null) {
394                         for (Iterator iter = rdef.getFormFieldList().getFormField().iterator(); iter.hasNext();) {
395                                 fieldJSON = new SearchFieldJSON();
396                                 FormFieldType fft = (FormFieldType) iter.next();
397                                 String fieldId = fft.getFieldId();
398                                 String fieldDisplay = fft.getFieldName();
399                                 fieldJSON.setId(fieldId);
400                                 fieldJSON.setName(fieldDisplay);
401                                 fieldJSON.setOrderSeq(fft.getOrderBySeq());
402                                 listJSON.add(fieldJSON);
403                         }
404                 }
405
406                 return listJSON;
407         }
408
409         @GetMapping(value = "/report/wizard/list_child_report_col/{reportID}", produces = "application/json")
410         public @ResponseBody ArrayList<ColumnJSON> listChildReportCols(@PathVariable("reportID") String reportID,
411                         HttpServletRequest request, HttpServletResponse response) throws RaptorException {
412                 ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, reportID, false);
413
414                 List<DataColumnType> reportColumnList = ddRr.getAllColumns();
415                 ArrayList<ColumnJSON> listJSON = new ArrayList<>();
416                 ColumnJSON columnJSON;
417
418                 for (DataColumnType reportColumnType : reportColumnList) {
419                         columnJSON = new ColumnJSON();
420                         columnJSON.setId(reportColumnType.getColId());
421                         columnJSON.setName(reportColumnType.getColName());
422                         listJSON.add(columnJSON);
423                 }
424                 return listJSON;
425         }
426
427         @GetMapping(value = "/report/wizard/list_child_report_ff/{reportID}", produces = "application/json")
428         public @ResponseBody ArrayList<SearchFieldJSON> listChildReportFormFields(@PathVariable("reportID") String reportID,
429                         HttpServletRequest request, HttpServletResponse response) throws RaptorException {
430                 ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, reportID, false);
431                 ArrayList<SearchFieldJSON> listJSON = new ArrayList<>();
432                 SearchFieldJSON fieldJSON;
433
434                 ReportFormFields ddReportFormFields = ddRr.getReportFormFields();
435                 if (ddReportFormFields != null) {
436                         for (ddReportFormFields.resetNext(); ddReportFormFields.hasNext();) {
437                                 FormField ff = ddReportFormFields.getNext();
438                                 if (!ff.getFieldType().equals(FormField.FFT_BLANK)) {
439                                         fieldJSON = new SearchFieldJSON();
440                                         fieldJSON.setId(ff.getFieldName());
441                                         fieldJSON.setName(ff.getFieldDisplayName());
442                                         listJSON.add(fieldJSON);
443                                 }
444                         }
445                 }
446                 return listJSON;
447         }
448
449         @GetMapping(value = "report/wizard/copy_report/{reportID}", produces = "application/json")
450         public @ResponseBody MessageJSON copyReport(@PathVariable("reportID") String reportID, HttpServletRequest request,
451                         HttpServletResponse response){
452                 MessageJSON messageJSON = new MessageJSON();
453                 try {
454
455                         ReportHandler rh = new ReportHandler();
456                         ReportDefinition rdef = rh.loadReportDefinition(request, reportID);
457                         rdef.setAsCopy(request);
458                         request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
459                         request.getSession().setAttribute("COPY_REPORT_EVENT", "true");
460                         messageJSON.setMessage("Success- Report Copied.");
461                         messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
462
463                 } catch (RaptorException e) {
464                         request.setAttribute("error_extra_msg", "While copying report " + reportID);
465                         messageJSON.setMessage("Failed - While copying report " + reportID);
466                         messageJSON.setAnyStacktrace(getStackTrace(e));
467                         logger.debug(EELFLoggerDelegate.debugLogger,
468                                         ("[Controller.processRequest]Invalid raptor action [copyReport]. RaptorException: "
469                                                         + e.getMessage()));
470                         return messageJSON;
471                 }
472
473                 return messageJSON;
474         }
475
476         @PostMapping(value = "report/wizard/import_report", consumes = "application/json")
477         public @ResponseBody MessageJSON importReport(@RequestBody ImportJSON importJSON, HttpServletRequest request,
478                         HttpServletResponse response) {
479                 MessageJSON messageJSON = new MessageJSON();
480                 try {
481                         String reportXML = importJSON.getReportXML();
482
483                         ReportHandler rh = new ReportHandler();
484                         ReportDefinition rdef = rh.createReportDefinition(request, "-1", reportXML);
485                         rdef.updateReportDefType();
486                         rdef.generateWizardSequence(request);
487                         rdef.setReportName("Import: " + rdef.getReportName());
488                         rdef.clearAllDrillDowns();
489
490                         request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
491
492                         messageJSON.setMessage("Success- Report imported.");
493                         messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
494
495                 } catch (RaptorException e) {
496                         request.setAttribute("error_extra_msg", "Unable to parse XML. Nested error: ");
497                         messageJSON.setMessage("Unable to parse XML. Nested error: ");
498                         messageJSON.setAnyStacktrace(getStackTrace(e));
499
500                         return messageJSON;
501                 }
502
503                 return messageJSON;
504
505         }
506
507         @GetMapping(value = "report/wizard/get_formfield_groups_data/{id}")
508         public @ResponseBody FormFieldGroupsJSON getFFGroupsData(@PathVariable Map<String, String> pathVariables,
509                         HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
510
511                 FormFieldGroupsJSON formFieldGroupsJSON = new FormFieldGroupsJSON();
512                 if (pathVariables.containsKey("id")) {
513                         formFieldGroupsJSON.setReportId(pathVariables.get("id"));
514                         ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
515                         ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
516         
517                         if (rdef != null && !rdef.getReportID().equals(formFieldGroupsJSON.getReportId())) {
518                                 removeVariablesFromSession(request);
519                                 rdef = (new ReportHandler()).loadReportDefinition(request, formFieldGroupsJSON.getReportId());
520                         } else if (rr != null && !rr.getReportID().equals(formFieldGroupsJSON.getReportId())) {
521                                 removeVariablesFromSession(request);
522                                 rdef = (new ReportHandler()).loadReportDefinition(request, formFieldGroupsJSON.getReportId());
523                         } else if (rdef == null) {
524                                 rdef = (new ReportHandler()).loadReportDefinition(request, formFieldGroupsJSON.getReportId());
525                         }
526                         if(rdef != null) {
527                                 formFieldGroupsJSON.setFormFieldGroupsJSON(rdef.getCustomReport().getFormFieldGroupsJSON());
528                                 formFieldGroupsJSON.setMessage("Success");
529                         } else {
530                                 formFieldGroupsJSON.setErrorMessage("Unable to load report definition for Report ID:"+formFieldGroupsJSON.getReportId());
531                         }
532                 } else {
533                         formFieldGroupsJSON.setErrorMessage("Report ID missing in the URL");
534                 }
535                 return formFieldGroupsJSON;
536         }
537         
538         @GetMapping(value = "report/wizard/clearSession")
539         public @ResponseBody MessageJSON clearSession(HttpServletRequest request, HttpServletResponse response) {               
540                 MessageJSON messageJSON = new MessageJSON();
541                 removeVariablesFromSession(request);
542                 request.getSession().setAttribute("COPY_REPORT_EVENT", "");
543                 messageJSON.setMessage("CopyReport Cancelled");
544                 return messageJSON;
545                 
546         }
547         
548         
549         @PostMapping(value = "report/wizard/save_formfield_groups_data")
550         public @ResponseBody MessageJSON saveFFGroupsData(@RequestBody FormFieldGroupsJSON formFieldGroupsJSON,
551                         HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
552
553                 MessageJSON messageJSON = new MessageJSON();
554                 if(formFieldGroupsJSON != null && formFieldGroupsJSON.getReportId() != null) {
555                         ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
556                         ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
557                         if (rdef != null && !rdef.getReportID().equals(formFieldGroupsJSON.getReportId())) {
558                                 removeVariablesFromSession(request);
559                                 rdef = (new ReportHandler()).loadReportDefinition(request, formFieldGroupsJSON.getReportId());
560                         } else if (rr != null && !rr.getReportID().equals(formFieldGroupsJSON.getReportId())) {
561                                 removeVariablesFromSession(request);
562                                 rdef = (new ReportHandler()).loadReportDefinition(request, formFieldGroupsJSON.getReportId());
563                         } else if (rdef == null) {
564                                 rdef = (new ReportHandler()).loadReportDefinition(request, formFieldGroupsJSON.getReportId());
565                         }
566                         if (rdef != null) {
567                                 rdef.getCustomReport().setFormFieldGroupsJSON(formFieldGroupsJSON.getFormFieldGroupsJSON());
568                                 try {
569                                         persistReportDefinition(request, rdef);
570                                         messageJSON.setMessage("Success: formfield groups have been updated for report ID:"+rdef.getReportID() +" and added to session and DB.");
571                                 } catch (Exception ex) {
572                                         messageJSON.setMessage("Error occured while saving formfield groups data");
573                                         messageJSON.setAnyStacktrace(getStackTrace(ex));
574                                 }
575                         } else {
576                                 messageJSON.setMessage("Unable to load report definition for Report ID:"+formFieldGroupsJSON.getReportId());
577                         }
578                 } else {
579                         messageJSON.setMessage("Report ID missing in the request body.");
580                 }
581                 return messageJSON;
582         }
583
584         @PostMapping(value = "report/wizard/save_formfield_tab_data")
585         public @ResponseBody MessageJSON saveFFTabWiseData(@RequestBody FormEditJSON formEditJSON,
586                         HttpServletRequest request, HttpServletResponse response) {
587                 ReportDefinition rdef = null;
588                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
589
590                 MessageJSON messageJSON = new MessageJSON();
591                 try {
592                         if (rdef != null) {
593
594                                 String fieldId = formEditJSON.getFieldId();
595
596                                 boolean lastUpdateIdFlag = false;
597
598                                 if (rdef.getFormFieldList() != null) {
599                                         
600
601 //                                      fft.getlastUpdatedFieldId()
602                                         
603                                         for (FormFieldType fft : rdef.getFormFieldList().getFormField()) {
604                                                 
605                                                 System.out.println(fft.getFieldId() + " " + fft.getFieldName() + " " + fft.getlastUpdatedFieldId() + " " + formEditJSON.getLastUpdatedFieldId() );
606                                                 if (fft.getFieldId().equals(fieldId) && !lastUpdateIdFlag) {                                                    
607                                                         fft.setFieldId(formEditJSON.getLastUpdatedFieldId() != null ? formEditJSON.getLastUpdatedFieldId() : fft.getFieldId());
608                                                         fft.setFieldName(formEditJSON.getFieldName());
609                                                         fft.setFieldType(formEditJSON.getFieldType());
610                                                         fft.setVisible(formEditJSON.isVisible() ? "Y" : "N");
611                                                         fft.setDefaultValue(formEditJSON.getDefaultValue());
612                                                         fft.setFieldDefaultSQL(formEditJSON.getFieldDefaultSQL());
613                                                         fft.setFieldSQL(formEditJSON.getFieldSQL());
614                                                         fft.setValidationType(formEditJSON.getValidationType());
615                                                         fft.setGroupFormField(formEditJSON.isGroupFormField());
616                                                         fft.setOrderBySeq(formEditJSON.getOrderSeq());
617                                                         // clear predefined value
618                                                         PredefinedValueList predefinedValueList = new ObjectFactory().createPredefinedValueList();
619                                                         fft.setPredefinedValueList(predefinedValueList);
620                                                 
621                                                         fft.setlastUpdatedFieldId("Y");
622                                                         lastUpdateIdFlag = true;
623                                                 
624                                                         List<IdNameBooleanJSON> predefList = formEditJSON.getPredefinedValueList();
625                                                         if (predefList != null && predefList.size() > 0) {
626                                                                 for (IdNameBooleanJSON item : predefList) {
627                                                                         fft.getPredefinedValueList().getPredefinedValue().add(item.getId());
628                                                                 }
629                                                         }
630                                                         int cnt=0;
631                                                         for (FormFieldType fft1 : rdef.getFormFieldList().getFormField()) {
632                                                                 
633                                                                 if(fft1.getlastUpdatedFieldId().equals("Y"))
634                                                                 {
635                                                                         cnt++;
636                                                                 }
637                                                                 
638                                                                 if(cnt >= 2)
639                                                                 {
640                                                                         for (FormFieldType fft2 : rdef.getFormFieldList().getFormField()) {
641                                                                                 fft2.setlastUpdatedFieldId("N");
642                                                                         }
643                                                                         cnt = 0;
644                                                                 }
645
646                                                 }
647                                         }
648                                                 System.out.println(fft.getFieldId() + " " + fft.getFieldName() + " " + fft.getlastUpdatedFieldId() + " " + formEditJSON.getLastUpdatedFieldId() );
649                                         }
650                                 }
651
652                                 persistReportDefinition(request, rdef);
653                                 messageJSON.setMessage("Success formfield Details of given report is saved in session.");
654                                 messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
655
656                         } else {
657                                 messageJSON.setMessage("Report Definition is not in session");
658                                 messageJSON.setAnyStacktrace("Report Definition is not in session");
659
660                         }
661                 } catch (Exception ex) {
662                         messageJSON.setMessage("Error occured while formfield details Tab");
663                         messageJSON.setAnyStacktrace(getStackTrace(ex));
664                         return messageJSON;
665                 }
666
667                 return messageJSON;
668         }
669         
670         @PostMapping(value = "report/wizard/add_formfield_tab_data")
671         public @ResponseBody MessageJSON addFFTabWiseData(@RequestBody FormEditJSON formEditJSON,
672                         HttpServletRequest request, HttpServletResponse response) {
673                 ReportDefinition rdef;
674                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
675
676                 MessageJSON messageJSON = new MessageJSON();
677                 try {
678                         if (rdef != null) {
679                                 FormEditJSON wizardJSON = new FormEditJSON();
680                                 wizardJSON.setTabId("FormEdit");
681                                 wizardJSON.setTabName("Form Edit");
682                                 String fieldId  ="";
683                                 if(rdef.getFormFieldList()==null || rdef.getFormFieldList().getFormField()==null || rdef.getFormFieldList().getFormField().size()==0)
684                                         fieldId = "ff1";
685                                 else
686                                 {
687                                         int maxFormFieldSeq = 0;
688                                         for(FormFieldType ffType : rdef.getFormFieldList().getFormField())
689                                         {
690                                                 if(Integer.parseInt(ffType.getFieldId().substring(2)) > maxFormFieldSeq)
691                                                 {
692                                                         maxFormFieldSeq = Integer.parseInt(ffType.getFieldId().substring(2));
693                                                 }
694                                         }
695                                         maxFormFieldSeq++;
696                                         fieldId = "ff"+ maxFormFieldSeq;
697                                 }
698                                 FormFieldType currField = rdef.addFormFieldType(new ObjectFactory(), "", "", "", "", "", "", "", "", null, null, "","");
699                                 currField.setFieldId(fieldId);
700                                 currField.setFieldName(formEditJSON.getFieldName());
701                                 currField.setFieldType(formEditJSON.getFieldType()==null?null:formEditJSON.getFieldType());
702                                 currField.setVisible(formEditJSON.isVisible()?"Y":"N");
703                                 currField.setDefaultValue(formEditJSON.getDefaultValue());
704                                 currField.setFieldDefaultSQL(formEditJSON.getFieldDefaultSQL());
705                                 currField.setFieldSQL(formEditJSON.getFieldSQL());
706                                 currField.setValidationType(formEditJSON.getValidationType());
707                                 currField.setGroupFormField(formEditJSON.isGroupFormField());
708                                 persistReportDefinition(request, rdef);
709                 
710                                 messageJSON.setMessage("Success formfield Details of given report is saved in session.");
711                                 messageJSON.setAnyStacktrace(rdef.getReportID() + " is added to session and DB.");
712
713                         } else {
714                                 messageJSON.setMessage("Report Definition is not in session");
715                                 messageJSON.setAnyStacktrace("Report Definition is not in session");
716
717                         }
718                 } catch (Exception ex) {
719                         messageJSON.setMessage("Error occured while formfield details Tab");
720                         messageJSON.setAnyStacktrace(getStackTrace(ex));
721                         return messageJSON;
722                 }
723
724                 return messageJSON;
725         }
726
727         @PostMapping(value = "report/wizard/save_col_tab_data")
728         public @ResponseBody MessageJSON saveColTabWiseData(@RequestBody ColumnEditJSON columnEditJSON,
729                         HttpServletRequest request, HttpServletResponse response) {
730                 ReportDefinition rdef;
731                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
732
733                 MessageJSON messageJSON = new MessageJSON();
734
735                 try {
736                         if (rdef != null) {
737                                 String colId = columnEditJSON.getColId();
738                                 List<DataColumnType> reportColumnList = rdef.getAllColumns();
739                                 rdef.setSemaphoreList(columnEditJSON.getSemaphoreList());
740
741
742                                 for (DataColumnType reportColumnType : reportColumnList) {
743
744                                         if (reportColumnType.getColId().equals(colId)) {
745                                                 reportColumnType.setColName(columnEditJSON.getColName());
746                                                 reportColumnType.setDependsOnFormField(columnEditJSON.getDepeondsOnForField()==null?"":columnEditJSON.getDepeondsOnForField());
747                                                 reportColumnType.setColType(columnEditJSON.getDataType()==null?"":columnEditJSON.getDataType());
748                                                 reportColumnType.setDbColName(columnEditJSON.getDataType()==null?"":columnEditJSON.getDataType());
749                                                 reportColumnType.setGroupByPos(columnEditJSON.getGroupByPos());
750                                                 reportColumnType.setSubTotalCustomText(columnEditJSON.getSubTotalCustomText());
751                                                 reportColumnType.setHideRepeatedKey(columnEditJSON.isHideRepeatedKey());
752                                                 reportColumnType.setLevel(columnEditJSON.getLevel());
753                                                 reportColumnType.setColspan(columnEditJSON.getColspan());
754                                                 reportColumnType.setDisplayName(columnEditJSON.getDisplayName());
755                                                 reportColumnType.setDisplayWidthInPxls(columnEditJSON.getDisplayWidthInPixel()==null?null:String.valueOf(columnEditJSON.getDisplayWidthInPixel()));
756                                                 reportColumnType.setNowrap(columnEditJSON.getNoWrap());
757                                                 reportColumnType.setIndentation(columnEditJSON.getIndentation());
758                                                 reportColumnType.setDisplayAlignment(columnEditJSON.getDisplayAlignment());
759                                                 reportColumnType.setDisplayHeaderAlignment(columnEditJSON.getDisplayHeaderAlignment());
760                                                 reportColumnType.setIsSortable(columnEditJSON.isSortable());
761                                                 reportColumnType.setVisible(columnEditJSON.isVisible());
762                                                 reportColumnType.setDrillDownURL(columnEditJSON.getDrilldownURL());
763                                                 reportColumnType.setDrillDownParams(columnEditJSON.getDrilldownParams());
764                                                 reportColumnType.setDrillDownType(columnEditJSON.getDrilldownType());
765                                                 if(columnEditJSON.getDisplayTotal()!=null)
766                                                         reportColumnType.setDisplayTotal(columnEditJSON.getDisplayTotal());
767                                                 reportColumnType.setSemaphoreId(columnEditJSON.getSemaphoreId());
768
769                                                 
770                                         }
771
772                                 }
773                                 persistReportDefinition(request, rdef);
774                                 messageJSON.setMessage("Success Column Details of given report is saved in session.");
775                                 messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
776
777                         } else {
778                                 messageJSON.setMessage("Report Definition is not in session");
779                                 messageJSON.setAnyStacktrace("");
780
781                         }
782                 } catch (Exception ex) {
783                         messageJSON.setMessage("Error occured while saving column details Tab");
784                         messageJSON.setAnyStacktrace(getStackTrace(ex));
785
786                         return messageJSON;
787                 }
788
789                 return messageJSON;
790         }
791
792         @PostMapping(value = "report/wizard/save_def_tab_data/{id}")
793         public @ResponseBody MessageJSON saveDefTabWiseData(@PathVariable("id") String id,
794                         @RequestBody DefinitionJSON definitionJSON, HttpServletRequest request, HttpServletResponse response)
795         {
796                 ReportDefinition rdef;
797                 ReportRuntime rr;
798                 boolean newReport;
799                 MessageJSON messageJSON = new MessageJSON();
800                 try {
801                         String copyReportEvent = (String)request.getSession().getAttribute("COPY_REPORT_EVENT");
802                         if (id.equals("InSession") || "true".equals(copyReportEvent)) {
803                             rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
804                                 newReport = false;
805
806                         } else if (id.equals("Create")) {
807                                 removeVariablesFromSession(request);
808                                 rdef = (new ReportHandler()).loadReportDefinition(request, "-1");
809                                 newReport = true;
810                                 System.out.println("&&&&&&&&&&&&&&&&&&&&&& CHECK Report Type "
811                                                 + (AppUtils.nvl(rdef.getReportType()).length() <= 0));
812                                 
813                                 rdef.setReportType(definitionJSON.getReportType());
814                         
815                                 if (AppUtils.nvl(rdef.getReportType()).length() <= 0) {
816                                         rdef.setReportType(AppConstants.RT_LINEAR);
817                                         System.out.println("&&&&&&&&&&&&&&&&&&&&&& ADDED Report Type in session ");
818                                 }
819
820                         } else if (AppUtils.nvl(id).length() > 0) {
821                                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
822                                 rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
823
824                                 if (rdef != null && !rdef.getReportID().equals(id)) {
825                                         request.getSession().removeAttribute(AppConstants.SI_REPORT_DEFINITION);
826                                         removeVariablesFromSession(request);
827                                         rdef = (new ReportHandler()).loadReportDefinition(request, id);
828                                 } else if (rr != null && !rr.getReportID().equals(id)) {
829                                         request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
830                                         removeVariablesFromSession(request);
831                                         rdef = (new ReportHandler()).loadReportDefinition(request, id);
832                                 } else if (rdef == null) {
833                                         rdef = (new ReportHandler()).loadReportDefinition(request, id);
834                                 }
835                                 newReport = false;
836
837                         } else {
838                                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
839                                 newReport = true;
840                         }
841                         // }
842
843                         if (rdef != null) {
844                                 String reportName = definitionJSON.getReportName();
845                                 String errorString = "";
846                                 if (AppUtils.nvl(reportName).length() <= 0)
847                                         errorString = "ReportName cannot be null;";
848                                 rdef.setReportName(reportName);
849                                 rdef.setReportDescr(definitionJSON.getReportDescr());
850                                 rdef.setReportType(definitionJSON.getReportType());
851                                 rdef.setDataContainerHeight(definitionJSON.getDataContainerHeight());
852                                 rdef.setDataContainerWidth(definitionJSON.getDataContainerWidth());
853                                 if(definitionJSON.getAllowScheduler()!=null)
854                                         rdef.setAllowSchedule(definitionJSON.getAllowScheduler().equals("Y")?"Y":"N");
855
856                                 
857                                 if(rdef.getReportType().equals(AppConstants.RT_DASHBOARD)){
858                                         rdef.setDashboardLayoutHTML(definitionJSON.getDashboardLayoutHTML());
859                                         rdef.getCustomReport().setDashboardLayoutJSON(definitionJSON.getDashboardLayoutJSON());
860                                         rdef.getCustomReport().setDashBoardReports(definitionJSON.getDashboardReports());
861                                 } else {
862                                         String dbInfo = definitionJSON.getDbInfo();
863                                         rdef.setDBInfo(dbInfo);
864                                         //save dbType
865                                         String schemaSql = Globals.getRemoteDbSchemaSqlWithWhereClause();
866                                         schemaSql = schemaSql.replace("[schema_id]", dbInfo);
867                                         String dbType = null;
868                                         DataSet ds = null;
869                                          try {
870                                                 ds = DbUtils.executeQuery(schemaSql);
871                         
872                                                 String prefix = "", desc = "";
873                                                 
874                                                 for (int i = 0; i < ds.getRowCount(); i++) {
875                                                         dbType = ds.getItem(i, 2);
876                                                 }
877                                 }
878                                 catch (Exception e) {}
879                                         rdef.setDBType(dbType);
880
881                                         String formHelpText = definitionJSON.getFormHelpText();
882                                         rdef.setFormHelpText(formHelpText);
883         
884                                         Integer pageSize = definitionJSON.getPageSize();
885                                         if(pageSize!=null)
886                                                 rdef.setPageSize(pageSize);
887         
888                                         List<IdNameBooleanJSON> menuIds = definitionJSON.getDisplayArea();
889                                         if(menuIds!=null){
890                                                 for (IdNameBooleanJSON menuId : menuIds) {
891                                                         if (menuId.isSelected()) {
892                                                                 rdef.setMenuID(menuId.getName());
893                                                         }
894         
895                                                 }
896                                         }
897                                         
898         
899                                         Boolean hideFormFieldsAfterRun = definitionJSON.getHideFormFieldsAfterRun();
900                                         rdef.setHideFormFieldAfterRun(hideFormFieldsAfterRun==null?false:hideFormFieldsAfterRun);
901                                         Integer maxRowsInExcelCSVDownload = definitionJSON.getMaxRowsInExcelCSVDownload();
902                                         if(maxRowsInExcelCSVDownload!=null)
903                                                 rdef.setMaxRowsInExcelDownload(maxRowsInExcelCSVDownload);
904                                         Integer frozenColumns = definitionJSON.getFrozenColumns();
905                                         if(frozenColumns!=null)
906                                                 rdef.setFrozenColumns(frozenColumns);
907                                         String dataGridAlign = definitionJSON.getDataGridAlign();
908                                         rdef.setDataGridAlign(dataGridAlign);
909                                         String emptyMessage = definitionJSON.getEmptyMessage();
910                                         rdef.setEmptyMessage(emptyMessage);
911                                         Boolean runtimeColSortDisabled = definitionJSON.getRuntimeColSortDisabled();
912                                         rdef.setRuntimeColSortDisabled(runtimeColSortDisabled==null?false:runtimeColSortDisabled);
913                                         Integer numFormCols = definitionJSON.getNumFormCols();
914                                         if(numFormCols!=null)
915                                                 rdef.setNumFormCols(Integer.toString(numFormCols));
916                                         String reportTitle = definitionJSON.getReportTitle();
917                                         rdef.setReportTitle(reportTitle);
918                                         String reportSubTitle = definitionJSON.getReportSubTitle();
919                                         rdef.setReportSubTitle(reportSubTitle);
920         
921                                         List<NameBooleanJSON> displayOptions = definitionJSON.getDisplayOptions();
922                                         StringBuffer displayOptionStr = new StringBuffer("NNNNNNN");
923                                         if(displayOptions!=null){
924                                                 for (NameBooleanJSON displayOption : displayOptions) {
925                                                         if (displayOption.isSelected()) {
926                                                                 if (displayOption.getName().equals("HideFormFields")) {
927                                                                         displayOptionStr.setCharAt(0, 'Y');
928                                                                 } else if (displayOption.getName().equals("HideChart")) {
929                                                                         displayOptionStr.setCharAt(1, 'Y');
930                                                                 } else if (displayOption.getName().equals("HideReportData")) {
931                                                                         displayOptionStr.setCharAt(2, 'Y');
932                                                                 } else if (displayOption.getName().equals("HideExcel")) {
933                                                                         displayOptionStr.setCharAt(5, 'Y');
934                                                                 } else if (displayOption.getName().equals("HidePdf")) {
935                                                                         displayOptionStr.setCharAt(6, 'Y');
936                                                                 }
937                                                         }
938         
939                                                 }
940                                         }
941                                         
942                                         if(displayOptionStr!=null)
943                                                 rdef.setDisplayOptions(displayOptionStr.toString());
944                                         
945                                         if(definitionJSON.getSizedByContent()!=null)
946                                                 rdef.setSizedByContent(definitionJSON.getSizedByContent().equals("Y")?"Y":"N");
947                                         if(definitionJSON.getOneTimeRec()!=null)
948                                                 rdef.setIsOneTimeScheduleAllowed(definitionJSON.getOneTimeRec().equals("true")?"Y":"N");
949                                         if(definitionJSON.getHourlyRec()!=null)
950                                                 rdef.setIsHourlyScheduleAllowed(definitionJSON.getHourlyRec().equals("true")?"Y":"N");
951                                         if(definitionJSON.getDailyRec()!=null)
952                                                 rdef.setIsDailyScheduleAllowed(definitionJSON.getDailyRec().equals("true")?"Y":"N");
953                                         if(definitionJSON.getDailyMFRec()!=null)
954                                                 rdef.setIsDailyMFScheduleAllowed(definitionJSON.getDailyMFRec().equals("true")?"Y":"N");
955                                         if(definitionJSON.getWeeklyRec()!=null)
956                                                 rdef.setIsWeeklyScheduleAllowed(definitionJSON.getWeeklyRec().equals("true")?"Y":"N");
957                                         if(definitionJSON.getMonthlyRec()!=null)
958                                                 rdef.setIsMonthlyScheduleAllowed(definitionJSON.getMonthlyRec().equals("true")?"Y":"N");
959                                 }
960                         }
961                         //Start - Added new code 
962                         request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
963                         //End - Added new code 
964                         if (id.equals("Create")) {
965                                 rdef.persistReport(request);
966                         } else
967                                 persistReportDefinition(request, rdef);
968                         messageJSON.setMessage("Success Definition of given report is saved in session.");
969                         messageJSON.setAnyStacktrace((newReport ? " New Report info is added to Session "
970                                         : rdef.getReportID() + "- is Modified and added to session and DB."));
971
972                         if(rdef.getReportType() != null) {
973                         if(rdef.getReportType().equals("Dashboard")  && id.equals("Create")) {
974                                 messageJSON.setAnyStacktrace(rdef.getReportID() + "- is Modified and added to session and DB.");
975                         }
976                         }
977                         if(request.getSession().getAttribute("COPY_REPORT_EVENT") == "true" || (rdef.getReportType().equals("Dashboard") && id.equals("Create")) ) {
978                                 removeVariablesFromSession(request);
979                                 request.getSession().setAttribute("COPY_REPORT_EVENT", "");
980                         }
981
982                 } catch (Exception ex) {
983                         messageJSON.setMessage("Error occured while saving definition Tab");
984                         messageJSON.setAnyStacktrace(getStackTrace(ex));
985                         logger.error(EELFLoggerDelegate.errorLogger,
986                                         "[Controller.processRequest]Invalid raptor action [retrieveTabWiseData].", ex);
987                         return messageJSON;
988                 }
989
990                 return messageJSON;
991         }
992
993         @GetMapping(value = { "/report/wizard/retrieve_form_tab_wise_data/{id}",
994                         "/report/wizard/retrieve_form_tab_wise_data/{id}/{action}" })
995         public @ResponseBody FormEditJSON retrieveFormTabWiseData(@PathVariable Map<String, String> pathVariables,
996                         HttpServletRequest request, HttpServletResponse response) {
997                 ReportDefinition rdef;
998                 String id = "";
999                 String action = "";
1000                 String detailId = "";
1001                 FormEditJSON wizardJSON = new FormEditJSON();
1002                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1003
1004                 if (pathVariables.containsKey("id")) {
1005                         id = pathVariables.get("id");
1006                 }
1007                 if (pathVariables.containsKey("action")) {
1008                         action = pathVariables.get("action");
1009                 }
1010
1011                 ServletContext servletContext = request.getSession().getServletContext();
1012                 if (!Globals.isSystemInitialized()) {
1013                         Globals.initializeSystem(servletContext);
1014                 }
1015                 wizardJSON.setTabId("FormEdit");
1016                 wizardJSON.setTabName("Form Edit");
1017                 FormFieldType currField = null;
1018                 try {
1019                         if (id.equals("add")) {
1020
1021                                 currField = rdef.addFormFieldType(new ObjectFactory(), "", "", "", "", "", "", "", "", null, null, "",
1022                                                 "");
1023                                 wizardJSON.setFieldId(currField.getFieldId());
1024                                 wizardJSON.setFieldName(currField.getFieldName());
1025                                 wizardJSON.setFieldType(currField.getFieldType());
1026                                 wizardJSON.setVisible(AppUtils.nvls(currField.getVisible(), "Y").toUpperCase().startsWith("Y"));
1027                                 wizardJSON.setDefaultValue(currField.getDefaultValue());
1028                                 wizardJSON.setFieldDefaultSQL(currField.getFieldDefaultSQL());
1029                                 wizardJSON.setFieldSQL(currField.getFieldSQL());
1030                                 wizardJSON.setValidationType(currField.getValidationType());
1031                                 persistReportDefinition(request, rdef);
1032
1033                         } else if (action.equals("delete")) {
1034                                 rdef.deleteFormField(id);
1035                                 persistReportDefinition(request, rdef);
1036                                 wizardJSON.setMessage("Formfield " + detailId + " Deleted");
1037                         }
1038                         if (rdef.getFormFieldList() != null) {
1039                                 for (FormFieldType fft : rdef.getFormFieldList().getFormField()) {
1040                                         if (fft.getFieldId().equals(id)) {
1041                                                 wizardJSON.setFieldId(fft.getFieldId());
1042                                                 wizardJSON.setFieldName(fft.getFieldName());
1043                                                 wizardJSON.setFieldType(fft.getFieldType());
1044                                                 wizardJSON.setVisible(fft.getVisible().toUpperCase().startsWith("Y"));
1045                                                 wizardJSON.setDefaultValue(fft.getDefaultValue());
1046                                                 wizardJSON.setFieldDefaultSQL(fft.getFieldDefaultSQL());
1047                                                 wizardJSON.setFieldSQL(fft.getFieldSQL());
1048                                                 wizardJSON.setValidationType(fft.getValidationType());
1049                                                 wizardJSON.setGroupFormField(fft.isGroupFormField());
1050                                                 wizardJSON.setOrderSeq(fft.getOrderBySeq());
1051                                                 PredefinedValueList preDefined = fft.getPredefinedValueList();
1052
1053                                                 if (preDefined != null) {
1054                                                         List<IdNameBooleanJSON> preDefinedList = new ArrayList<>();
1055                                                         IdNameBooleanJSON idNameBooleanJSON;
1056
1057                                                         for (String v : preDefined.getPredefinedValue()) {
1058                                                                 idNameBooleanJSON = new IdNameBooleanJSON();
1059                                                                 idNameBooleanJSON.setId(v);
1060                                                                 idNameBooleanJSON.setName(v);
1061                                                                 preDefinedList.add(idNameBooleanJSON);
1062                                                         }
1063                                                         wizardJSON.setPredefinedValueList(preDefinedList);
1064                                                 }
1065                                         }
1066                                 }
1067                         }
1068                 } catch (Exception ex) {
1069                         logger.error(EELFLoggerDelegate.errorLogger,
1070                                         "[Controller.processRequest]Invalid raptor action [retrieveFormTabWiseData].", ex);
1071                         ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
1072                         errorJSONRuntime.setErrormessage("Error occured while retreiving formedit definition Tab");
1073                         errorJSONRuntime.setStacktrace(getStackTrace(ex));
1074                         wizardJSON.setErrorMessage("Error occured while retreiving formedit definition Tab");
1075                         wizardJSON.setErrorStackTrace(getStackTrace(ex));
1076
1077                 }
1078
1079                 return wizardJSON;
1080         }
1081
1082         @GetMapping(value = { "/report/wizard/retrieve_col_tab_wise_data/{id}" })
1083         public @ResponseBody ColumnEditJSON retrieveColTabWiseData(@PathVariable Map<String, String> pathVariables,
1084                         HttpServletRequest request, HttpServletResponse response) {
1085                 ReportDefinition rdef;
1086                 String id = "";
1087                 ColumnEditJSON wizardJSON = new ColumnEditJSON();
1088                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1089
1090                 if (pathVariables.containsKey("id")) {
1091                         id = pathVariables.get("id");
1092                 }
1093                 ServletContext servletContext = request.getSession().getServletContext();
1094                 if (!Globals.isSystemInitialized()) {
1095                         Globals.initializeSystem(servletContext);
1096                 }
1097                 if (rdef != null) {
1098                         if(rdef.getSemaphoreList() != null) {
1099                                 wizardJSON.setSemaphoreList(rdef.getSemaphoreList());
1100                         }else { wizardJSON.setSemaphoreList(new SemaphoreList()); }
1101                         
1102                         wizardJSON.setTabId("ColEdit");
1103                         wizardJSON.setTabName("Column Edit");
1104
1105                         List<DataColumnType> reportColumnList = rdef.getAllColumns();
1106
1107                         for (DataColumnType reportColumnType : reportColumnList) {
1108                                 if (reportColumnType.getColId().equals(id)) {
1109                                         wizardJSON.setColId(reportColumnType.getColId());
1110                                         wizardJSON.setColName(reportColumnType.getColName());
1111                                         wizardJSON.setDisplayAlignment(reportColumnType.getDisplayAlignment());
1112                                         wizardJSON.setDisplayHeaderAlignment(reportColumnType.getDisplayHeaderAlignment());
1113                                         wizardJSON.setSortable(
1114                                                         reportColumnType.isIsSortable() == null ? false : reportColumnType.isIsSortable());
1115                                         wizardJSON.setVisible(reportColumnType.isVisible());
1116                                         wizardJSON.setDrilldownURL(
1117                                                         reportColumnType.getDrillDownURL() == null ? "" : reportColumnType.getDrillDownURL());
1118                                         wizardJSON.setDrilldownParams(
1119                                                         reportColumnType.getDrillDownParams() == null ? "" : reportColumnType.getDrillDownParams());
1120                                         wizardJSON.setDrilldownType(
1121                                                         reportColumnType.getDrillDownType() == null ? "" : reportColumnType.getDrillDownType());
1122                                         wizardJSON.setDataType(reportColumnType.getDbColType() == null ? "" :reportColumnType.getDbColType());
1123                                         wizardJSON.setGroupByPos(reportColumnType.getGroupByPos());
1124                                         wizardJSON.setLevel(reportColumnType.getLevel());
1125                                         wizardJSON.setDisplayWidth(reportColumnType.getDisplayWidth());
1126                                         wizardJSON.setNoWrap(reportColumnType.getNowrap() == null ? "" : reportColumnType.getNowrap());
1127                                         wizardJSON.setIndentation(reportColumnType.getIndentation());           
1128                                                         
1129                                         wizardJSON.setDepeondsOnForField(reportColumnType.getDependsOnFormField() ==null?"":reportColumnType.getDependsOnFormField());
1130                                         wizardJSON.setSubTotalCustomText(reportColumnType.getSubTotalCustomText()==null?"":reportColumnType.getSubTotalCustomText());
1131                                         
1132                                         wizardJSON.setHideRepeatedKey(reportColumnType.isHideRepeatedKey()==null?false:reportColumnType.isHideRepeatedKey());
1133                                         wizardJSON.setColspan(reportColumnType.getColspan()==null?null:reportColumnType.getColspan());
1134                                         wizardJSON.setDisplayName(reportColumnType.getDisplayName());
1135                                         wizardJSON.setDisplayTotal(reportColumnType.getDisplayTotal());
1136                                         wizardJSON.setSemaphoreId(reportColumnType.getSemaphoreId());
1137
1138                                 }
1139                         }
1140                 } else {
1141                         wizardJSON.setErrorMessage("Report is not in session");
1142                 }
1143
1144                 return wizardJSON;
1145         }
1146
1147         @GetMapping(value = { "/report/wizard/retrieve_sql_tab_wise_data/{id}",
1148                         "/report/wizard/retrieve_sql_tab_wise_data/" })
1149         public @ResponseBody QueryJSON retrieveSqlTabWiseData(@PathVariable Map<String, String> pathVariables,
1150                         HttpServletRequest request, HttpServletResponse response) throws RaptorException {
1151                 ReportDefinition rdef = null;
1152                 ReportRuntime rr;
1153                 String id = "";
1154                 QueryJSON wizardJSON = new QueryJSON();
1155
1156                 if (pathVariables.containsKey("id")) {
1157                         id = pathVariables.get("id");
1158                 }
1159                 ServletContext servletContext = request.getSession().getServletContext();
1160                 if (!Globals.isSystemInitialized()) {
1161                         Globals.initializeSystem(servletContext);
1162                 }
1163                 if (id.equals("InSession") || AppUtils.nvl(id).length() <= 0) {
1164                         rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1165                 } else if (AppUtils.nvl(id).length() > 0) {
1166                         rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1167                         rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
1168
1169                         if (rdef != null && !rdef.getReportID().equals(id)) {
1170                                 request.getSession().removeAttribute(AppConstants.SI_REPORT_DEFINITION);
1171                                 removeVariablesFromSession(request);
1172                                 rdef = (new ReportHandler()).loadReportDefinition(request, id);
1173                         } else if (rr != null && !rr.getReportID().equals(id)) {
1174                                 request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
1175                                 removeVariablesFromSession(request);
1176                                 rdef = (new ReportHandler()).loadReportDefinition(request, id);
1177                         } else if (rdef == null) {
1178                                 rdef = (new ReportHandler()).loadReportDefinition(request, id);
1179                         }
1180                 }
1181
1182                 if (rdef != null) {
1183
1184                         wizardJSON.setTabId("Sql");
1185                         wizardJSON.setTabName("Sql");
1186                         wizardJSON.setQuery(rdef.getReportSQL());
1187                 }
1188                 return wizardJSON;
1189         }
1190
1191         @GetMapping(value = { "/report/wizard/retrieveTotalForTheColList" })
1192         public @ResponseBody List<IdNameValue> getTotalForTheCol(HttpServletRequest request)
1193         {
1194             IdNameList idNameList = AppConstants.TOTAL_FUNCTIONS;
1195             List<IdNameValue> list = new ArrayList<>();
1196             for(int i=0; i<idNameList.getCount(); i++) 
1197                 list.add(idNameList.getValue(i));
1198
1199                 return list;
1200         }
1201         
1202         @GetMapping(value = { "/report/wizard/security/retrieveReportUserList" })
1203         public @ResponseBody List<SecurityEntry> getReportUserList(HttpServletRequest request)
1204                         throws RaptorException {
1205                         List<SecurityEntry> reportUserList = new ArrayList<>();
1206                         ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1207                         Vector reportUsers = rdef.getReportUsers(request);
1208                         for(Iterator iter=reportUsers.iterator(); iter.hasNext();) { 
1209                                 SecurityEntry rUser = (SecurityEntry) iter.next(); 
1210                                 reportUserList.add(rUser);
1211                         }
1212                         return reportUserList;
1213         };
1214         
1215         @GetMapping(value = { "/report/wizard/security/retrieveReportRoleList" })
1216         public @ResponseBody List<IdNameValue> getReportRoleList(HttpServletRequest request)
1217                         throws RaptorException {
1218                         List<IdNameValue> reportRoleList = new ArrayList<>();
1219                         ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1220                         Vector reportRoles = rdef.getReportRoles(request);
1221                         Vector remainingRoles = Utils.getRolesNotInList(reportRoles,request); 
1222                         for(int i=0; i<remainingRoles.size(); i++) {
1223                                 IdNameValue role = (IdNameValue) remainingRoles.get(i);
1224                                 reportRoleList.add(role);
1225                         }
1226                         return reportRoleList;
1227                 };
1228                 
1229                 @GetMapping(value = { "/report/wizard/security/retrieveReportUserList_query" })
1230                 public @ResponseBody List<Map<String, String>> getReportUserListQuery(HttpServletRequest request)
1231                 {
1232                                 List<Map<String, String>> reportUserList = new ArrayList();
1233                                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1234                                 String reportId = rdef.getReportID();
1235                                 Map<String, Object> params = new HashMap<>();
1236                         params.put("report_id", new Long(reportId));    
1237                         List<ReportUserRole> queriedUserList = getDataAccessService().executeNamedQuery("getReportSecurityUsers", params, null);
1238                         for (int i=0; i<queriedUserList.size();i++){
1239                                 Map<String, String> reportUser = new HashMap<>();
1240                                 reportUser.put("rep_id", queriedUserList.get(i).toString());
1241                                 reportUser.put("order_no", queriedUserList.get(i).getOrderNo().toString());
1242                                 reportUser.put("user_id", queriedUserList.get(i).getUserId().toString());                               
1243                                 reportUser.put("role_id", queriedUserList.get(i).getRoleId().toString());                                                               
1244                                 reportUser.put("read_only_yn", queriedUserList.get(i).getReadOnlyYn());                                                         
1245                                 reportUserList.add(reportUser);
1246                         }                       
1247                                 return reportUserList;
1248                         };
1249
1250
1251
1252                         @PostMapping(value = "/report/security/addReportUser")
1253                         public @ResponseBody Map<String,String> addSelectedReportUser(
1254                                         @RequestBody String userIdToAdd, HttpServletRequest request, HttpServletResponse response)
1255                         {
1256                                         Map<String, String> JsonResponse = new HashMap<>();
1257                                         ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1258                                         try {
1259                                                 JsonResponse.put("status","success");
1260                                                 JsonResponse.put("userId",userIdToAdd);
1261                                                 String action = "Add User";
1262                                                 rdef.getReportSecurity().addUserAccess(userIdToAdd, "Y");
1263                                                 WizardSequence ws = rdef.getWizardSequence();
1264                                                 ws.performAction(action,rdef);
1265                                                 return JsonResponse;
1266                                         } catch (Exception ex) {
1267                                                 logger.error(EELFLoggerDelegate.errorLogger,
1268                                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1269                                                 return null;
1270                                         }                               
1271                                 }
1272
1273                         @PostMapping(value = "/report/security/removeReportUser")
1274                         public @ResponseBody Map<String,String> removeSelectedReportUser(
1275                                         @RequestBody String userIdToRemove, HttpServletRequest request, HttpServletResponse response)
1276                         {
1277                                                 Map<String, String> JsonResponse = new HashMap<>();
1278                                                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1279                                                 try {
1280                                                         JsonResponse.put("status","success");
1281                                                         JsonResponse.put("userId",userIdToRemove);
1282                                                         String action = "Delete User";                          
1283                                                         rdef.getReportSecurity().removeUserAccess(userIdToRemove);
1284                                                         rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1285                                                         WizardSequence ws = rdef.getWizardSequence();
1286                                                         ws.performAction(action,rdef);
1287                                                         return JsonResponse;                                                    
1288                                                 } catch (Exception ex) {
1289                                                         logger.error(EELFLoggerDelegate.errorLogger,
1290                                                                         "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1291                                                         return null;
1292                                                 }                               
1293                                         }
1294                         
1295                         @PostMapping(value = "/report/security/addReportRole")
1296                         public @ResponseBody Map<String,String> addSelectedReportRole(
1297                                         @RequestBody String roleIdToAdd, HttpServletRequest request, HttpServletResponse response) {
1298                                         Map<String, String> JsonResponse = new HashMap<>();
1299                                         ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1300                                         try {
1301                                                 JsonResponse.put("status","success");
1302                                                 JsonResponse.put("roleId",roleIdToAdd);
1303                                                 String action = "Add Role";
1304                                                 rdef.getReportSecurity().addRoleAccess(roleIdToAdd, "Y");
1305                                                 WizardSequence ws = rdef.getWizardSequence();
1306                                                 ws.performAction(action,rdef);
1307                                                 return JsonResponse;
1308                                         } catch (Exception ex) {
1309                                                 logger.error(EELFLoggerDelegate.errorLogger,
1310                                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1311                                                 return null;
1312                                         }                               
1313                                 }
1314
1315                         @PostMapping(value = "/report/security/removeReportRole")
1316                         public @ResponseBody Map<String,String> removeSelectedReportRole(
1317                                         @RequestBody String roleIdToRemove, HttpServletRequest request, HttpServletResponse response)
1318                         {
1319                                         Map<String, String> JsonResponse = new HashMap<>();
1320                                         ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1321                                         try {
1322                                                 JsonResponse.put("status","success");
1323                                                 JsonResponse.put("roleId",roleIdToRemove);
1324                                                 String action = "Delete Role";
1325                                                 rdef.getReportSecurity().removeRoleAccess(roleIdToRemove);
1326                                                 WizardSequence ws = rdef.getWizardSequence();
1327                                                 ws.performAction(action,rdef);
1328                                                 return JsonResponse;
1329                                         } catch (Exception ex) {
1330                                                 logger.error(EELFLoggerDelegate.errorLogger,
1331                                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1332                                                 return null;
1333                                         }                               
1334                                 }                       
1335
1336                         @PostMapping(value = "/report/security/updateReportSecurityInfo")
1337                         public @ResponseBody Map<String,String> updateReportSecurityInfo(
1338                                         @RequestBody Map<String,String> securityInfo, HttpServletRequest request, HttpServletResponse response)
1339                         {
1340
1341                                         Map<String, String> JsonResponse = new HashMap<>();
1342                                         ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1343                                         try {
1344                                                 JsonResponse.put("status","success");
1345                                                 String OwnerUserId = securityInfo.get("userId");
1346                                                 String isPublic = securityInfo.get("isPublic");
1347                                                 boolean rPublic = isPublic.equals("true"); 
1348                                                 rdef.getReportSecurity().setOwnerID(OwnerUserId);
1349                                                 rdef.setPublic(rPublic);
1350                                                 persistReportDefinition(request, rdef);
1351                                                 return JsonResponse;
1352                                                 
1353                                         } catch (Exception ex) {
1354                                                 logger.error(EELFLoggerDelegate.errorLogger,
1355                                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1356                                                 return null;
1357                                         }                               
1358                                 }
1359
1360                         @PostMapping(value = "/report/security/toggleUserEditAccess/{userID}")
1361                         public @ResponseBody Map<String,String> toggleUserEditAccess(
1362                                         @PathVariable("userID") String userId,
1363                                         @RequestBody String readOnly, HttpServletRequest request, HttpServletResponse response)
1364                         {
1365                                         Map<String, String> JsonResponse = new HashMap<>();
1366                                         ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1367                                         try {
1368                                                 String action ="";
1369                                                 JsonResponse.put("status","success");
1370                                                 if (readOnly.equals("N")) {
1371                                                         action = "Grant User Access";
1372                                                 }  else {
1373                                                         action = "Revoke User Access";                                                  
1374                                                 }                                               
1375                                                 rdef.getReportSecurity().updateUserAccess(userId, readOnly);
1376                                                 WizardSequence ws = rdef.getWizardSequence();
1377                                                 ws.performAction(action,rdef);
1378                                                 
1379                                                 return JsonResponse;
1380                                         } catch (Exception ex) {
1381                                                 logger.error(EELFLoggerDelegate.errorLogger,
1382                                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1383                                                 return null;
1384                                         }                               
1385                                 };                      
1386
1387                                 @PostMapping(value = "/report/security/toggleRoleEditAccess/{roleID}")
1388                                 public @ResponseBody Map<String,String> toggleRoleEditAccess(
1389                                                 @PathVariable("roleID") String roleId,
1390                                                 @RequestBody String readOnly, HttpServletRequest request, HttpServletResponse response)
1391                                 {
1392                                                 Map<String, String> JsonResponse = new HashMap<>();
1393                                                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1394                                                 try {
1395                                                         String action ="";
1396                                                         JsonResponse.put("status","success");
1397                                                         if (readOnly.equals("N")) {
1398                                                                 action = "Grant Role Access";
1399                                                         }  else {
1400                                                                 action = "Revoke Role Access";                                                  
1401                                                         }                                               
1402                                                         rdef.getReportSecurity().updateRoleAccess(roleId, readOnly);
1403                                                         WizardSequence ws = rdef.getWizardSequence();
1404                                                         ws.performAction(action,rdef);
1405                                                         
1406                                                         return JsonResponse;
1407                                                 } catch (Exception ex) {
1408                                                         logger.error(EELFLoggerDelegate.errorLogger,
1409                                                                         "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1410                                                         return null;
1411                                                 }                               
1412                                         };                      
1413                                 
1414         @GetMapping(value = { "/report/wizard/security/retrieveReportOwner" })
1415         public @ResponseBody List<IdNameValue> getReportOwnerInList(HttpServletRequest request)
1416                         throws RaptorException {
1417                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1418
1419                 List<IdNameValue> UserList = new ArrayList<>();
1420                 List excludeValues = new java.util.ArrayList();
1421                 HttpSession session = request.getSession();
1422                 String query = Globals.getCustomizedScheduleQueryForUsers();
1423                 session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
1424                 String userId = AppUtils.getUserID(request);
1425                 session.setAttribute("LOGGED_USERID", userId);
1426                 String[] sessionParameters = Globals.getSessionParams().split(",");
1427                 String param = "";
1428                 for (int i = 0; i < sessionParameters.length; i++) {
1429                         param = (String) session.getAttribute(sessionParameters[0]);
1430                         query = Utils.replaceInString(query, "[" + sessionParameters[i].toUpperCase() + "]",
1431                                         (String) session.getAttribute(sessionParameters[i]));
1432                 }
1433                 boolean isAdmin = AppUtils.isAdminUser(request);
1434                 Vector allUsers = AppUtils.getAllUsers(query, param, isAdmin);
1435
1436                 for (Iterator iter = allUsers.iterator(); iter.hasNext();) {
1437                         IdNameValue value = (IdNameValue) iter.next();
1438
1439                         boolean exclude = false;
1440                         for (Iterator iterE = excludeValues.iterator(); iterE.hasNext();)
1441                                 if (((IdNameValue) iterE.next()).getId().equals(value.getId())) {
1442                                         exclude = true;
1443                                         break;
1444                                 } // if
1445
1446                         if (!exclude)
1447                                 UserList.add(value);
1448                 } // for
1449                 return UserList;
1450         }
1451
1452         
1453         @GetMapping(value = { "/report/wizard/security/getReportSecurityInfo" })
1454         public @ResponseBody Map<String,String> getReportSecurityInfo(HttpServletRequest request)
1455          {
1456                 Map<String, String> securityInfoMap = new HashMap<>();
1457                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1458                 String isPublic = Boolean.toString(rdef.isPublic()); 
1459                 String createUser = AppUtils.getUserName(rdef.getCreateID());
1460                 String createDate = rdef.getCreateDate();
1461                 String updateUser = AppUtils.getUserName(rdef.getUpdateID());
1462                 String updateDate = rdef.getUpdateDate();
1463                 String ownerId = rdef.getOwnerID();
1464                 
1465                 securityInfoMap.put("isPublic",isPublic);
1466                 securityInfoMap.put("createdUser",createUser);          
1467                 securityInfoMap.put("createdDate",createDate);          
1468                 securityInfoMap.put("updateUser",updateUser);
1469                 securityInfoMap.put("updatedDate",updateDate);
1470                 securityInfoMap.put("ownerId",ownerId);
1471                 
1472                 return securityInfoMap;
1473         }       
1474         
1475         @GetMapping(value = { "/report/wizard/security/getReportSecurityUsers" })
1476         public @ResponseBody List<SecurityEntry> getReportSecurityUsers(HttpServletRequest request)
1477                         throws RaptorException {
1478                 
1479                 List<SecurityEntry> reportUserMapList = new ArrayList<>();
1480                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1481                 Vector reportUsers = rdef.getReportUsers(request);
1482                 int iCount = 0;
1483                 
1484                 for(Iterator iter=reportUsers.iterator(); iter.hasNext(); iCount++) { 
1485                         Map<String, String> reportUserMap = new HashMap<>();
1486                         SecurityEntry rUser = (SecurityEntry) iter.next();
1487                         reportUserMapList.add(rUser);
1488                 }
1489                 
1490                 return reportUserMapList;
1491         }               
1492         
1493         
1494         @GetMapping(value = { "/report/wizard/security/getReportSecurityRoles" })
1495         public @ResponseBody List<SecurityEntry> getReportSecurityRoles(HttpServletRequest request)
1496                         throws RaptorException {
1497                 
1498                 List<SecurityEntry> reportRoleList = new ArrayList<>();
1499                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1500                 Vector reportRoles = rdef.getReportRoles(request);
1501                 
1502                 for(Iterator iter=reportRoles.iterator(); iter.hasNext(); ) {
1503                         SecurityEntry rRole = (SecurityEntry) iter.next(); 
1504                         reportRoleList.add(rRole);
1505                 }
1506                 
1507                 return reportRoleList;
1508         }               
1509         
1510         
1511         @GetMapping(value = { "/report/wizard/retrieve_def_tab_wise_data/{id}",
1512                         "/report/wizard/retrieve_def_tab_wise_data/{id}/{detailId}" })
1513         public @ResponseBody DefinitionJSON retrieveDefTabWiseData(@PathVariable Map<String, String> pathVariables,
1514                         HttpServletRequest request, HttpServletResponse response) throws RaptorException {
1515                 ReportDefinition rdef;
1516                 ReportRuntime rr;
1517                 String tabId = "Def";
1518                 String id = "";
1519
1520                 if (pathVariables.containsKey("id")) {
1521                         id = pathVariables.get("id");
1522                 }
1523
1524                 ServletContext servletContext = request.getSession().getServletContext();
1525                 if (!Globals.isSystemInitialized()) {
1526                         Globals.initializeSystem(servletContext);
1527                 }
1528                 String copyReportEvent = (String)request.getSession().getAttribute("COPY_REPORT_EVENT");
1529                 if (tabId.equals("Def") && id.equals("InSession") || "true".equals(copyReportEvent)) {
1530                     rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1531
1532                 } else if (tabId.equals("Def") && id.equals("Create")) {
1533                         removeVariablesFromSession(request);
1534                         rdef = (new ReportHandler()).loadReportDefinition(request, "-1");
1535                         rdef.setReportType(AppConstants.RT_LINEAR);
1536
1537                 } else if (tabId.equals("Def") && AppUtils.nvl(id).length() > 0) {
1538                         rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1539                         rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
1540
1541                         if (rdef != null && !rdef.getReportID().equals(id)) {
1542                                 request.getSession().removeAttribute(AppConstants.SI_REPORT_DEFINITION);
1543                                 removeVariablesFromSession(request);
1544                                 rdef = (new ReportHandler()).loadReportDefinition(request, id);
1545                                 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
1546                         } else if (rr != null && !rr.getReportID().equals(id)) {
1547                                 request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
1548                                 removeVariablesFromSession(request);
1549                                 rdef = (new ReportHandler()).loadReportDefinition(request, id);
1550                                 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
1551                         } else if (rdef == null) {
1552                                 rdef = (new ReportHandler()).loadReportDefinition(request, id);
1553                                 String session_id = request.getSession().getId();
1554                                 Object obj = request.getAttributeNames();
1555                                 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
1556                         }
1557
1558                 } else {
1559                         rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1560                 }
1561                 DefinitionJSON wizardJSON = new DefinitionJSON();
1562                 if (tabId.equals("Def")) {
1563                         wizardJSON.setTabId("Def");
1564                         wizardJSON.setTabName("Definition");
1565             wizardJSON.setChartType(rdef.getChartType());
1566                         wizardJSON.setReportId((rdef != null) ? rdef.getReportID() + "" : "");
1567                         wizardJSON.setReportName((rdef != null) ? rdef.getReportName() : "");
1568                         wizardJSON.setReportDescr((rdef != null) ? rdef.getReportDescr() : "");
1569                         wizardJSON.setReportType((rdef != null) ? rdef.getReportType() : AppConstants.RT_LINEAR);
1570                         wizardJSON.setDataContainerHeight((rdef != null) ? rdef.getDataContainerHeight() : "600");
1571                         wizardJSON.setDataContainerWidth((rdef != null) ? rdef.getDataContainerWidth() : "900");
1572                         wizardJSON.setAllowScheduler((rdef != null) ? rdef.getAllowSchedule() : "false");
1573
1574                         if(wizardJSON.getReportType().equals(AppConstants.RT_LINEAR)) {
1575                                 wizardJSON.setDbInfo((rdef != null) ? rdef.getDBInfo() : "");
1576                                 wizardJSON.setFormHelpText((rdef != null) ? rdef.getFormHelpText() : "");
1577                                 wizardJSON.setPageSize((rdef != null) ? rdef.getPageSize() : 50);
1578                                 List<IdNameBooleanJSON> displayArea = new ArrayList<>();
1579                                 IdNameBooleanJSON idNameJSON = new IdNameBooleanJSON();
1580                                 String qMenu = "";
1581                                 for (int i = 0; i < AppUtils.getQuickLinksMenuIDs().size(); i++) {
1582                                         idNameJSON = new IdNameBooleanJSON();
1583                                         qMenu = (String) AppUtils.getQuickLinksMenuIDs().get(i);
1584                                         idNameJSON.setId(qMenu);
1585                                         idNameJSON.setName(qMenu);
1586                                         if (rdef != null && (rdef.getMenuID().equals(qMenu))) {
1587                                                 idNameJSON.setSelected(true);
1588                                         }
1589                                         displayArea.add(idNameJSON);
1590                                 }
1591                                 wizardJSON.setDisplayArea(displayArea);
1592                                 wizardJSON.setHideFormFieldsAfterRun((rdef != null) ? rdef.isHideFormFieldAfterRun() : false);
1593                                 wizardJSON.setMaxRowsInExcelCSVDownload((rdef != null) ? rdef.getMaxRowsInExcelDownload() : 500);
1594                                 wizardJSON.setFrozenColumns((rdef != null) ? rdef.getFrozenColumns() : 0);
1595                                 wizardJSON.setDataGridAlign((rdef != null) ? rdef.getDataGridAlign() : "left");
1596                                 wizardJSON.setEmptyMessage((rdef != null) ? rdef.getEmptyMessage() : "No records found");
1597                                 List<NameBooleanJSON> displayOptions = new ArrayList<>();
1598                                 NameBooleanJSON nameBooleanJSON = new NameBooleanJSON();
1599                                 nameBooleanJSON.setName("HideFormFields");
1600                                 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideForm() : false);
1601                                 displayOptions.add(nameBooleanJSON);
1602         
1603                                 nameBooleanJSON = new NameBooleanJSON();
1604                                 nameBooleanJSON.setName("HideChart");
1605                                 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideChart() : false);
1606                                 displayOptions.add(nameBooleanJSON);
1607         
1608                                 nameBooleanJSON = new NameBooleanJSON();
1609                                 nameBooleanJSON.setName("HideReportData");
1610                                 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideData() : false);
1611                                 displayOptions.add(nameBooleanJSON);
1612         
1613                                 nameBooleanJSON = new NameBooleanJSON();
1614                                 nameBooleanJSON.setName("HideExcel");
1615                                 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideExcelIcons() : false);
1616                                 displayOptions.add(nameBooleanJSON);
1617         
1618                                 nameBooleanJSON = new NameBooleanJSON();
1619                                 nameBooleanJSON.setName("HidePdf");
1620                                 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHidePDFIcons() : false);
1621                                 displayOptions.add(nameBooleanJSON);
1622         
1623                                 wizardJSON.setDisplayOptions(displayOptions);
1624         
1625                                 wizardJSON.setRuntimeColSortDisabled((rdef != null) ? rdef.isRuntimeColSortDisabled() : false);
1626                                 wizardJSON.setNumFormCols((rdef != null) ? rdef.getNumFormColsAsInt() : 1);
1627                                 wizardJSON.setReportTitle((rdef != null) ? rdef.getReportTitle() : "");
1628                                 wizardJSON.setReportSubTitle((rdef != null) ? rdef.getReportSubTitle() : "");
1629                                 
1630                                 
1631                                 String schemaSql = Globals.getRemoteDbSchemaSql();
1632                                 DataSet ds = null;
1633                                 ArrayList<IdNameBooleanJSON> dbInfoList = new ArrayList<>();
1634                                  try {
1635                                         ds = DbUtils.executeQuery(schemaSql);
1636         
1637                                         String prefix = "", desc = "";
1638                                         
1639                                         for (int i = 0; i < ds.getRowCount(); i++) {
1640                                                 IdNameBooleanJSON dBNameJSON = new IdNameBooleanJSON();
1641                                                 dBNameJSON.setId(ds.getItem(i, 0));
1642                                                 dBNameJSON.setName(ds.getItem(i, 0));
1643                                                 dBNameJSON.setSelected(false);
1644                                                 dbInfoList.add(dBNameJSON);
1645                                         }
1646                         }
1647                         catch (Exception e) {}
1648                                 wizardJSON.setDbInfoList(dbInfoList);
1649                                 
1650                                 /*Robert add*/
1651                                 wizardJSON.setOneTimeRec((rdef != null) ? rdef.getIsOneTimeScheduleAllowed() : "false");
1652                                 wizardJSON.setHourlyRec((rdef != null) ? rdef.getIsHourlyScheduleAllowed() : "false");
1653                                 wizardJSON.setDailyRec((rdef != null) ? rdef.getIsDailyScheduleAllowed() : "false");
1654                                 wizardJSON.setDailyMFRec((rdef != null) ? rdef.getIsDailyMFScheduleAllowed() : "false");
1655                                 wizardJSON.setWeeklyRec((rdef != null) ? rdef.getIsWeeklyScheduleAllowed() : "false");
1656                                 wizardJSON.setMonthlyRec((rdef != null) ? rdef.getIsMonthlyScheduleAllowed() : "false");
1657                                 wizardJSON.setSizedByContent((rdef != null) ? rdef.getSizedByContentOption() : "false");
1658                                 wizardJSON.setRepDefType(rdef.getReportDefType());
1659                         } else if(wizardJSON.getReportType().equals(AppConstants.RT_DASHBOARD)){
1660                                 wizardJSON.setDashboardLayoutHTML((rdef != null) ? rdef.getCustomReport().getDashboardLayoutHTML() : null);
1661                                 wizardJSON.setDashboardLayoutJSON((rdef != null) ? rdef.getCustomReport().getDashboardLayoutJSON() : null);
1662                                 wizardJSON.setDashboardReports((rdef != null) ? rdef.getCustomReport().getDashBoardReports() : null);
1663                         }
1664                 }
1665
1666                 ObjectMapper mapper = new ObjectMapper();
1667                 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1668                 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1669                 
1670                 String session_id = request.getSession().getId();
1671                 Object obj = request.getAttributeNames();
1672                 ReportDefinition report_def = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1673
1674                 return wizardJSON;
1675
1676         }
1677
1678         @PostMapping(value = "/report/wizard/retrieve_data/{validate}")
1679         public @ResponseBody RaptorResponse retrieveDataForGivenQuery(@PathVariable("validate") boolean validate,
1680                         @RequestBody QueryJSON queryJSON, HttpServletRequest request, HttpServletResponse response)
1681                         throws RaptorException {
1682                 RaptorResponse raptorResponse = new RaptorResponse();
1683                 String sql = queryJSON.getQuery();
1684                 String jsonInString = "";
1685                 
1686                 ServletContext servletContext = request.getSession().getServletContext();
1687                 if (!Globals.isSystemInitialized()) {
1688                         Globals.initializeSystem(servletContext);
1689                 }
1690
1691                 String session_id = request.getSession().getId();
1692                 Object obj = request.getAttributeNames();
1693                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1694                 if (rdef == null) {
1695                         ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
1696                         errorJSONRuntime.setErrormessage("Report Definition is not in session;");
1697                         errorJSONRuntime.setStacktrace("");
1698
1699                         ObjectMapper mapper = new ObjectMapper();
1700                         mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1701                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1702
1703                         try {
1704                                 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
1705                                 raptorResponse.data().put("elements", jsonInString);
1706                                 return raptorResponse;
1707                         } catch (Exception ex1) {
1708                                 logger.error(EELFLoggerDelegate.errorLogger,
1709                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex1);
1710                         }
1711                 } else {
1712                         if (!sql.trim().toUpperCase().startsWith("SELECT")) {
1713                                 ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
1714                                 errorJSONRuntime.setErrormessage("Invalid statement - the SQL must start with the keyword SELECT");
1715                                 errorJSONRuntime.setStacktrace("SQL Error");
1716                                 ObjectMapper mapper = new ObjectMapper();
1717                                 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1718                                 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1719
1720                                 try {
1721                                         jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
1722                                         raptorResponse.data().put("elements", jsonInString);
1723                                         return raptorResponse;
1724
1725                                 } catch (Exception ex) {
1726                                         logger.error(EELFLoggerDelegate.errorLogger,
1727                                                         "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1728                                 }
1729                         } else {
1730                                 DataSet ds = null;
1731                                 String remoteDb = request.getParameter("remoteDbPrefix");
1732                                 // comment below two lines to test
1733                                 String remoteDbPrefix = (remoteDb != null && !remoteDb.equalsIgnoreCase("null")) ? remoteDb
1734                                                 : rdef.getDBInfo();
1735                                 String userId = AppUtils.getUserID(request);
1736
1737                                 sql = Utils.replaceInString(sql, "[LOGGED_USERID]", userId);
1738                                 sql = Utils.replaceInString(sql, "[USERID]", userId);
1739                                 String[] reqParameters = Globals.getRequestParams().split(",");
1740                                 String[] sessionParameters = Globals.getSessionParams().split(",");
1741                                 javax.servlet.http.HttpSession session = request.getSession();
1742                                 logger.debug(EELFLoggerDelegate.debugLogger, ("B4 testRunSQL " + sql));
1743                                 if (request != null) {
1744                                         for (int i = 0; i < reqParameters.length; i++) {
1745                                                 if (!reqParameters[i].startsWith("ff"))
1746                                                         sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase() + "]",
1747                                                                         ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(),request.getParameter(reqParameters[i].toUpperCase())));
1748                                                 else
1749                                                                                                                 sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase() + "]",
1750                                                                         ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(),request.getParameter(reqParameters[i])));
1751                                         }
1752                                 }
1753                                 if (session != null) {
1754                                         for (int i = 0; i < sessionParameters.length; i++) {
1755                                                 logger.debug(EELFLoggerDelegate.debugLogger, (" Session " + " sessionParameters[i] "
1756                                                                 + sessionParameters[i] + " " + (String) session.getAttribute(sessionParameters[i])));
1757                                                 sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase() + "]",
1758                                                                 (String) session.getAttribute(sessionParameters[i]));
1759                                         }
1760                                 }
1761                                 logger.debug(EELFLoggerDelegate.debugLogger, ("After testRunSQL " + sql));
1762                                 try {
1763
1764                                         response.setContentType("application/json");
1765                                         ds = ConnectionUtils.getDataSet(sql, rdef.getDBInfo(), true);
1766
1767                                         QueryResultJSON queryResultJSON = new QueryResultJSON();
1768                                         queryResultJSON.setQuery(queryJSON.getQuery());
1769                                         String query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1770                                         if(validate) {
1771                                         rdef.parseReportSQL(query,validate);
1772                                                 }
1773                                         queryResultJSON.setQuery(query);
1774
1775                                         queryResultJSON.setTotalRows(ds.getRowCount());
1776
1777                                         Map<String, String> dvJSON;
1778                                         ArrayList<String> colList = new ArrayList<>();
1779                                         ArrayList<Map<String, String>> reportDataRows = new ArrayList<>();
1780                                         if (!ds.isEmpty()) {
1781
1782                                                 for (int i = 0; i < ds.getColumnCount(); i++) {
1783                                                         colList.add(ds.getColumnName(i));
1784                                                 }
1785                                                 queryResultJSON.setReportDataColumns(colList);
1786                                                 if (queryResultJSON.getTotalRows() > 0) {
1787                                                         for (int r = 0; r < Math.min(ds.getRowCount(), 100); r++) {
1788                                                                 dvJSON = new HashMap<>();
1789                                                                 for (int c = 0; c < ds.getColumnCount(); c++) {
1790                                                                         try {
1791                                                                                 dvJSON.put(ds.getColumnName(c), ds.getString(r, c));
1792                                                                         } catch (Exception ex) {
1793                                                                                 logger.error(EELFLoggerDelegate.errorLogger,
1794                                                                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].",
1795                                                                                                 ex);
1796                                                                         }
1797                                                                 }
1798                                                                 reportDataRows.add(dvJSON);
1799
1800                                                         }
1801                                                 }
1802
1803                                         }
1804                                         queryResultJSON.setReportDataRows(reportDataRows);
1805                                         ObjectMapper mapper = new ObjectMapper();
1806                                         mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1807                                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1808                                         if (validate) {
1809                                                 query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1810                                                 request.setAttribute("sqlValidated", "N");
1811                                                 rdef.parseReportSQL(query);
1812                                                 request.setAttribute("sqlValidated", "Y");
1813                                                 persistReportDefinition(request, rdef);
1814
1815                                         }
1816                                         try {
1817                                                 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(queryResultJSON);
1818                                                 raptorResponse.data().put("elements", jsonInString);
1819                                                 return raptorResponse;
1820
1821                                         } catch (Exception ex) {
1822                                                 logger.error(EELFLoggerDelegate.errorLogger,
1823                                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery]. RaptorException: ",
1824                                                                 ex);
1825                                         }
1826                                 } catch (ReportSQLException ex) {
1827                                         ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
1828                                         if (sql.contains("[")) {
1829                                                 errorJSONRuntime.setErrormessage(
1830                                                                 "Formfield information is present in the query, hence couldn't execute");
1831                                                 errorJSONRuntime
1832                                                                 .setStacktrace("Formfield information is present in the query, hence couldn't execute");
1833                                                 if (validate) {
1834                                                         String query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1835                                                         request.setAttribute("sqlValidated", "N");
1836                                                         rdef.parseReportSQL(query);
1837                                                         request.setAttribute("sqlValidated", "Y");
1838                                                         persistReportDefinition(request, rdef);
1839
1840                                                 }
1841
1842                                         } else {
1843                                                 errorJSONRuntime.setErrormessage(ex.getMessage());
1844                                                 errorJSONRuntime.setStacktrace(getStackTrace(ex));
1845                                         }
1846                                         ObjectMapper mapper = new ObjectMapper();
1847                                         mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1848                                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1849
1850                                         try {
1851                                                 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
1852                                                 raptorResponse.data().put("elements", jsonInString);
1853                                                 return raptorResponse;
1854
1855                                         } catch (Exception ex1) {
1856                                                 logger.error(EELFLoggerDelegate.errorLogger,
1857                                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex1);
1858                                         }
1859                                 }
1860                                 if (validate) {
1861                                         String query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1862                                         request.setAttribute("sqlValidated", "N");
1863                                         rdef.parseReportSQL(query);
1864                                         request.setAttribute("sqlValidated", "Y");
1865                                         persistReportDefinition(request, rdef);
1866
1867                                 }
1868
1869                         }
1870                 }
1871                 raptorResponse.data().put("elements", jsonInString);
1872                 return raptorResponse;
1873
1874         }
1875         
1876         
1877         @GetMapping(value = "/report/wizard/get_report_log/{reportID}")
1878         public @ResponseBody ArrayList<ReportLogEntry> getLogs(@PathVariable("reportID") String reportId, HttpServletRequest request,
1879                         HttpServletResponse ReportLogEntry) {
1880                 ArrayList<ReportLogEntry> arrayList = new ArrayList<>();
1881                 try {
1882                         Vector<ReportLogEntry> v = ReportLoader.loadReportLogEntries(reportId);
1883                         for(ReportLogEntry r:v ){
1884                                 arrayList.add(r);
1885                         }
1886                 } catch (RaptorException e) {
1887                         logger.error(EELFLoggerDelegate.errorLogger,
1888                                         "RaptorControllerAsync getLogs.", e);
1889                 }
1890                 return arrayList;
1891         }
1892
1893         @PostMapping(value = "save_chart")
1894         public void reportChartReceive(@RequestBody ChartJSON chartJSON, HttpServletRequest request,
1895                         HttpServletResponse response) {
1896                 //ReportRuntime reportRuntime;
1897                 //reportRuntime = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); // changing
1898                 ReportDefinition reportDefn;
1899                 reportDefn = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);                                                                                                                                                                                                   // session
1900                                                                                                                                                                                                                         // to
1901                                                                                                                                                                                                                         // request
1902                 String reportID = request.getParameter("c_master");
1903         /*      if (reportRuntime == null && AppUtils.nvl(reportID).length() > 0) {
1904                         try {
1905                                 ReportHandler rh = new ReportHandler();
1906                                 reportRuntime = rh.loadReportRuntime(request, reportID);
1907                         } catch (RaptorException ex) {
1908                                 logger.error(EELFLoggerDelegate.errorLogger,
1909                                                 "[Controller.processRequest]Invalid raptor action [reportChartReceive].", ex);
1910                         }
1911                 }*/
1912
1913                 if (reportDefn != null) {
1914                         String chartType = chartJSON.getChartType();
1915                         reportDefn.setChartType(chartJSON.getChartType());
1916                         reportDefn.setChartAnimate(chartJSON.isAnimation());
1917                         reportDefn.setChartWidth(chartJSON.getWidth());
1918                         reportDefn.setChartHeight(chartJSON.getHeight());
1919                         reportDefn.setShowChartTitle(chartJSON.isShowTitle());
1920
1921                         String domainAxis = null;
1922                         domainAxis = chartJSON.getDomainAxis();
1923
1924                         List<DataColumnType> reportCols = reportDefn.getAllColumns();
1925
1926                         for (Iterator<DataColumnType> iter = reportCols.iterator(); iter.hasNext();) {
1927                                 DataColumnType dct = iter.next();
1928                                 if (dct.getColId().equals(domainAxis)) {
1929                                         dct.setColOnChart(AppConstants.GC_LEGEND);
1930                                 } else {
1931                                         dct.setColOnChart(null);
1932                                 }
1933                         }
1934
1935                         CategoryAxisJSON categoryAxisJSON = chartJSON.getCategoryAxisJSON();
1936                         String categoryAxis;
1937
1938                         categoryAxis = (categoryAxisJSON != null ? categoryAxisJSON.getValue() : "");
1939
1940                         reportCols = reportDefn.getAllColumns();
1941
1942                         for (Iterator<DataColumnType> iter = reportCols.iterator(); iter.hasNext();) {
1943                                 DataColumnType dct = iter.next();
1944                                 if (dct.getColId().equals(categoryAxis)) {
1945                                         dct.setChartSeries(true);
1946                                 } else {
1947                                         dct.setChartSeries(false);
1948                                 }
1949                         }
1950
1951                         ArrayList<RangeAxisJSON> rangeAxisList = chartJSON.getRangeAxisList();
1952                         int r = 0;
1953                         HashSet<String> removeRangeAxisMap = new HashSet<>();
1954                         for(RangeAxisJSON rangeAxis:chartJSON.getRangeAxisRemoveList()){                                
1955                                 removeRangeAxisMap.add(rangeAxis.getRangeAxis());
1956                         }
1957                         for (int i = 0; i < rangeAxisList.size(); i++) {
1958                                 RangeAxisJSON rangeAxisJSON = rangeAxisList.get(i);
1959                                 String rangeAxis = rangeAxisJSON.getRangeAxis();
1960                                 String rangeYAxis = AppUtils.nvl(rangeAxisJSON.getRangeYAxis());
1961                                 String rangeChartGroup = AppUtils.nvl(rangeAxisJSON.getRangeChartGroup());
1962                                 String rangeColor = AppUtils.nvl(rangeAxisJSON.getRangeColor());
1963                                 String rangeLineType = AppUtils.nvl(rangeAxisJSON.getRangeLineType());
1964
1965                                 rangefor: for (Iterator<DataColumnType> iterator = reportCols.iterator(); iterator.hasNext();) {
1966                                         DataColumnType dct = iterator.next();
1967                                         if (dct.getColId().equals(rangeAxis)) {
1968                                                 if(removeRangeAxisMap.contains(rangeAxis))
1969                                                         dct.setChartSeq(-1); // if we set it to -1, means this range axis will not be included
1970                                                 else
1971                                                         dct.setChartSeq(++r);
1972                                                 
1973                                                 if (!dct.getColId().equals(domainAxis)) {
1974                                                         dct.setColOnChart("0");
1975                                                 }else{
1976                                                         dct.setChartSeq(-1);
1977                                                 }
1978                                                 dct.setYAxis(rangeYAxis); // +"|"+dct.getColId());
1979                                                 dct.setChartGroup(rangeChartGroup); // +"|"+dct.getColId());
1980                                                 dct.setChartColor(rangeColor);
1981                                                 dct.setChartLineType(rangeLineType);
1982
1983                                                 if (chartType.equals(AppConstants.GT_ANNOTATION_CHART)
1984                                                                 || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) {
1985                                                         if (rangeAxisJSON.isShowAsArea()) {
1986                                                                 dct.setIsRangeAxisFilled(true);
1987                                                         } else {
1988                                                                 dct.setIsRangeAxisFilled(false);
1989                                                         }
1990                                                 }
1991                                                 break rangefor;
1992                                         }
1993                                 }
1994
1995                         }
1996                         reportDefn.setChartLeftAxisLabel(chartJSON.getPrimaryAxisLabel());
1997                         reportDefn.setChartRightAxisLabel(chartJSON.getSecondaryAxisLabel());
1998
1999                         reportDefn.setRangeAxisLowerLimit(chartJSON.getMinRange());
2000                         reportDefn.setRangeAxisUpperLimit(chartJSON.getMaxRange());
2001
2002                         if (chartType.equals(AppConstants.GT_ANNOTATION_CHART)
2003                                         || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) {
2004                                 if (chartJSON.getFlexTimeSeriesChartOptions() != null) {
2005                                         reportDefn.setZoomIn(chartJSON.getFlexTimeSeriesChartOptions().getZoomIn());
2006                                         reportDefn.setTimeAxisType(chartJSON.getFlexTimeSeriesChartOptions().getTimeAxisType());
2007                                 }
2008
2009                         }
2010
2011                         if (chartType.equals(AppConstants.GT_TIME_SERIES)) {
2012                                 if (chartJSON.getTimeSeriesChartOptions() != null) {
2013                                         reportDefn.setTimeSeriesRender(chartJSON.getTimeSeriesChartOptions().getLineChartRenderer());
2014                                         reportDefn.setShowXAxisLabel(chartJSON.getTimeSeriesChartOptions().isShowXAxisLabel());
2015                                         reportDefn.setAddXAxisTickers(chartJSON.getTimeSeriesChartOptions().isAddXAxisTicker());
2016                                         reportDefn.setTimeAxis(chartJSON.getTimeSeriesChartOptions().isNonTimeAxis());
2017                                         reportDefn.setMultiSeries(chartJSON.getTimeSeriesChartOptions().isMultiSeries());
2018                                 }
2019
2020                         }
2021
2022                         if (chartType.equals(AppConstants.GT_BAR_3D)) {
2023                                 if (chartJSON.getBarChartOptions() != null) {
2024                                         reportDefn.setChartOrientation(
2025                                                         chartJSON.getBarChartOptions().isVerticalOrientation() ? "vertical" : "horizontal");
2026                                         reportDefn.setChartStacked(chartJSON.getBarChartOptions().isStackedChart());
2027                                         reportDefn.setBarControls(chartJSON.getBarChartOptions().isDisplayBarControls());
2028                                         reportDefn.setXAxisDateType(chartJSON.getBarChartOptions().isxAxisDateType());
2029                                         reportDefn.setLessXaxisTickers(chartJSON.getBarChartOptions().isMinimizeXAxisTickers());
2030                                         reportDefn.setTimeAxis(chartJSON.getBarChartOptions().isTimeAxis());
2031                                         reportDefn.setLogScale(chartJSON.getBarChartOptions().isyAxisLogScale());
2032                                 }
2033                         }
2034
2035                         reportDefn.setLegendLabelAngle(chartJSON.getCommonChartOptions().getLegendLabelAngle());
2036                         reportDefn.setLegendPosition(chartJSON.getCommonChartOptions().getLegendPosition());
2037                         reportDefn.setChartLegendDisplay(chartJSON.getCommonChartOptions().isHideLegend() ? "Y" : "N");
2038                         reportDefn.setAnimateAnimatedChart(chartJSON.getCommonChartOptions().isAnimateAnimatedChart());
2039
2040                         reportDefn.setTopMargin(chartJSON.getCommonChartOptions().getTopMargin());
2041                         reportDefn.setBottomMargin(chartJSON.getCommonChartOptions().getBottomMargin());
2042                         reportDefn.setLeftMargin(chartJSON.getCommonChartOptions().getLeftMargin());
2043                         reportDefn.setRightMargin(chartJSON.getCommonChartOptions().getRightMargin());
2044
2045                         for (Iterator<DataColumnType> iterator = reportCols.iterator(); iterator.hasNext();) {
2046                                 DataColumnType dct = iterator.next();
2047                                 if (!(AppUtils.nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND)
2048                                                 || (dct.getChartSeq() != null && dct.getChartSeq() > 0) || dct.isChartSeries())) {
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                         }
2057
2058                         try {
2059                                 //reportRuntime.persistLinearReport(request);
2060                                 //reportRuntime.persistReport(request);
2061                 persistReportDefinition(request, reportDefn);                   
2062                         } catch (Exception ex) {
2063                                 logger.error(EELFLoggerDelegate.errorLogger,
2064                                                 "[Controller.processRequest]Invalid raptor action [reportChartReceive].", ex);
2065                         }
2066                 }
2067
2068         }
2069         public String getViewName() {
2070                 return viewName;
2071         }
2072
2073         public void setViewName(String viewName) {
2074                 this.viewName = viewName;
2075         }
2076
2077         public String nvl(String s) {
2078                 return (s == null) ? "" : s;
2079         }
2080
2081         public String nvl(String s, String sDefault) {
2082                 return nvl(s).equals("") ? sDefault : s;
2083         }
2084
2085         public static String getStackTrace(Throwable aThrowable) {
2086                 Writer result = new StringWriter();
2087                 PrintWriter printWriter = new PrintWriter(result);
2088                 aThrowable.printStackTrace(printWriter);
2089                 return result.toString();
2090         }
2091
2092         public void persistReportDefinition(HttpServletRequest request, ReportDefinition rdef) throws RaptorException {
2093                 ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
2094                 if (rr != null && rr.getReportID().equals(rdef.getReportID()))
2095                         request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
2096                 rdef.persistReport(request);
2097         } // persistReportDefinition
2098
2099         // Remove from session
2100         private void removeVariablesFromSession(HttpServletRequest request) {
2101                 HttpSession session = request.getSession();
2102                 session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
2103                 session.removeAttribute(AppConstants.DRILLDOWN_INDEX);
2104                 session.removeAttribute(AppConstants.FORM_DRILLDOWN_INDEX);
2105                 session.removeAttribute(AppConstants.SI_BACKUP_FOR_REP_ID);
2106                 session.removeAttribute(AppConstants.SI_COLUMN_LOOKUP);
2107                 session.removeAttribute(AppConstants.SI_DASHBOARD_REP_ID);
2108                 session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP);
2109                 session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME);
2110                 session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP);
2111                 session.removeAttribute(AppConstants.SI_DASHBOARD_CHARTDATA_MAP);
2112                 session.removeAttribute(AppConstants.SI_DASHBOARD_DISPLAYTYPE_MAP);
2113                 session.removeAttribute(AppConstants.SI_DATA_SIZE_FOR_TEXTFIELD_POPUP);
2114                 session.removeAttribute(AppConstants.SI_MAP);
2115                 session.removeAttribute(AppConstants.SI_MAP_OBJECT);
2116                 session.removeAttribute(AppConstants.SI_REPORT_DEFINITION);
2117                 session.removeAttribute(AppConstants.SI_REPORT_RUNTIME);
2118                 session.removeAttribute(AppConstants.SI_REPORT_RUN_BACKUP);
2119                 session.removeAttribute(AppConstants.SI_REPORT_SCHEDULE);
2120                 session.removeAttribute(AppConstants.RI_REPORT_DATA);
2121                 session.removeAttribute(AppConstants.RI_CHART_DATA);
2122                 session.removeAttribute(AppConstants.SI_FORMFIELD_INFO);
2123                 session.removeAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
2124                 session.removeAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP);
2125                 session.removeAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP);
2126                 Enumeration<String> enum1 = session.getAttributeNames();
2127                 String attributeName = "";
2128                 while (enum1.hasMoreElements()) {
2129                         attributeName = enum1.nextElement();
2130                         if (attributeName.startsWith("parent_")) {
2131                                 session.removeAttribute(attributeName);
2132                         }
2133                 }
2134         }
2135
2136 }