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