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