0194b52d96a2c0b20ad2c1c9808fab4cf77bd802
[portal/sdk.git] /
1 /*-
2  * ================================================================================
3  * ECOMP Portal SDK
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ================================================================================
19  */
20 package org.openecomp.portalsdk.analytics.system.fusion.web;
21
22 import java.io.IOException;
23 import java.io.OutputStreamWriter;
24 import java.io.PrintWriter;
25 import java.io.StringWriter;
26 import java.io.Writer;
27 import java.lang.reflect.InvocationTargetException;
28 import java.lang.reflect.Method;
29 import java.util.ArrayList;
30 import java.util.Enumeration;
31 import java.util.HashMap;
32 import java.util.Iterator;
33 import java.util.List;
34 import java.util.Map;
35 import java.util.Vector;
36
37 import javax.servlet.ServletContext;
38 import javax.servlet.http.HttpServletRequest;
39 import javax.servlet.http.HttpServletResponse;
40 import javax.servlet.http.HttpSession;
41
42 import org.openecomp.portalsdk.analytics.controller.Action;
43 import org.openecomp.portalsdk.analytics.controller.ErrorHandler;
44 import org.openecomp.portalsdk.analytics.error.RaptorException;
45 import org.openecomp.portalsdk.analytics.error.RaptorRuntimeException;
46 import org.openecomp.portalsdk.analytics.error.ReportSQLException;
47 import org.openecomp.portalsdk.analytics.model.DataCache;
48 import org.openecomp.portalsdk.analytics.model.ReportHandler;
49 import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
50 import org.openecomp.portalsdk.analytics.model.definition.ReportDefinition;
51 import org.openecomp.portalsdk.analytics.model.definition.wizard.ColumnEditJSON;
52 import org.openecomp.portalsdk.analytics.model.definition.wizard.ColumnJSON;
53 import org.openecomp.portalsdk.analytics.model.definition.wizard.DefinitionJSON;
54 import org.openecomp.portalsdk.analytics.model.definition.wizard.FormEditJSON;
55 import org.openecomp.portalsdk.analytics.model.definition.wizard.IdNameBooleanJSON;
56 import org.openecomp.portalsdk.analytics.model.definition.wizard.ImportJSON;
57 import org.openecomp.portalsdk.analytics.model.definition.wizard.MessageJSON;
58 import org.openecomp.portalsdk.analytics.model.definition.wizard.NameBooleanJSON;
59 import org.openecomp.portalsdk.analytics.model.definition.wizard.QueryJSON;
60 import org.openecomp.portalsdk.analytics.model.definition.wizard.QueryResultJSON;
61 import org.openecomp.portalsdk.analytics.model.definition.wizard.RaptorResponse;
62 import org.openecomp.portalsdk.analytics.model.definition.wizard.SearchFieldJSON;
63 import org.openecomp.portalsdk.analytics.model.definition.wizard.WizardJSON;
64 import org.openecomp.portalsdk.analytics.model.pdf.PdfReportHandler;
65 import org.openecomp.portalsdk.analytics.model.runtime.CategoryAxisJSON;
66 import org.openecomp.portalsdk.analytics.model.runtime.ChartJSON;
67 import org.openecomp.portalsdk.analytics.model.runtime.ErrorJSONRuntime;
68 import org.openecomp.portalsdk.analytics.model.runtime.FormField;
69 import org.openecomp.portalsdk.analytics.model.runtime.RangeAxisJSON;
70 import org.openecomp.portalsdk.analytics.model.runtime.ReportFormFields;
71 import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
72 import org.openecomp.portalsdk.analytics.system.AppUtils;
73 import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
74 import org.openecomp.portalsdk.analytics.system.Globals;
75 import org.openecomp.portalsdk.analytics.util.AppConstants;
76 import org.openecomp.portalsdk.analytics.util.DataSet;
77 import org.openecomp.portalsdk.analytics.util.Utils;
78 import org.openecomp.portalsdk.analytics.util.XSSFilter;
79 import org.openecomp.portalsdk.analytics.view.ReportData;
80 import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
81 import org.openecomp.portalsdk.analytics.xmlobj.FormFieldType;
82 import org.openecomp.portalsdk.analytics.xmlobj.ObjectFactory;
83 import org.openecomp.portalsdk.analytics.xmlobj.PredefinedValueList;
84 import org.openecomp.portalsdk.core.controller.RestrictedBaseController;
85 import org.openecomp.portalsdk.core.domain.User;
86 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
87 import org.openecomp.portalsdk.core.web.support.UserUtils;
88 import org.springframework.stereotype.Controller;
89 import org.springframework.web.bind.annotation.PathVariable;
90 import org.springframework.web.bind.annotation.RequestBody;
91 import org.springframework.web.bind.annotation.RequestMapping;
92 import org.springframework.web.bind.annotation.RequestMethod;
93 import org.springframework.web.bind.annotation.ResponseBody;
94 import org.springframework.web.context.request.async.DeferredResult;
95
96 import com.fasterxml.jackson.core.JsonFactory;
97 import com.fasterxml.jackson.core.JsonParser;
98 import com.fasterxml.jackson.databind.DeserializationFeature;
99 import com.fasterxml.jackson.databind.JsonNode;
100 import com.fasterxml.jackson.databind.ObjectMapper;
101 import com.fasterxml.jackson.databind.SerializationFeature;
102
103 @Controller
104 @RequestMapping("/")
105 public class RaptorControllerAsync extends RestrictedBaseController {
106         
107         private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RaptorControllerAsync.class);
108
109         private String viewName;
110
111         @RequestMapping(value = { "/raptor.htm" }, method = RequestMethod.GET)
112         public void RaptorSearch(HttpServletRequest request, HttpServletResponse response)
113                         throws IOException, RaptorException {
114
115                 viewName = "";
116                 String actionKey = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));
117                 actionKey = nvl(actionKey, "report.run");
118
119                 HttpSession session = request.getSession();
120                 User user = UserUtils.getUserSession(request);
121
122                 if (actionKey.equals("report.download.excel2007.session") || actionKey.equals("report.download.csv.session")
123                                 || actionKey.equals("report.download.excel.session")
124                                 || actionKey.equals("report.download.pdf.session")) {
125                         if (session != null && user != null) {
126                                 ServletContext servletContext = request.getSession().getServletContext();
127                                 if (!Globals.isSystemInitialized()) {
128                                         Globals.initializeSystem(servletContext);
129                                 }
130                                 ReportRuntime rr = null;
131                                 ReportData rd = null;
132                                 String parent = "";
133                                 int parentFlag = 0;
134                                 if (!nvl(request.getParameter("parent"), "").equals("N"))
135                                         parent = nvl(request.getParameter("parent"), "");
136                                 if (parent.startsWith("parent_"))
137                                         parentFlag = 1;
138                                 if (parentFlag == 1) {
139                                         rr = (ReportRuntime) request.getSession().getAttribute(parent + "_rr");
140                                         rd = (ReportData) request.getSession().getAttribute(parent + "_rd");
141                                 }
142
143                                 boolean isEmbedded = false;
144                                 Object temp = request.getSession().getAttribute("isEmbedded");
145                                 if (temp != null) {
146                                         isEmbedded = (boolean) temp;
147                                 }
148                                 if (isEmbedded) {
149                                         String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
150                                         if (rr == null)
151                                                 rr = (ReportRuntime) ((HashMap) request.getSession()
152                                                                 .getAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP)).get(reportID);
153                                         if (rd == null)
154                                                 rd = (ReportData) ((HashMap) request.getSession()
155                                                                 .getAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP)).get(reportID);
156                                 } else {
157                                         if (rr == null)
158                                                 rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
159                                         if (rd == null)
160                                                 rd = (ReportData) request.getSession().getAttribute(AppConstants.RI_REPORT_DATA);
161                                 }
162                                 String user_id = AppUtils.getUserID(request);
163                                 int downloadLimit = 0;
164                                 if (rr != null)
165                                         downloadLimit = (rr.getMaxRowsInExcelDownload() > 0) ? rr.getMaxRowsInExcelDownload()
166                                                         : Globals.getDownloadLimit();
167                                 if (actionKey.equals("report.csv.download"))
168                                         downloadLimit = Globals.getCSVDownloadLimit();
169                                 String sql_whole = rr.getReportDataSQL(user_id, downloadLimit, request);
170                                 request.setAttribute(AppConstants.RI_REPORT_SQL_WHOLE, sql_whole);
171                                 try {
172                                         OutputStreamWriter out = new OutputStreamWriter(response.getOutputStream());
173
174                                         if (actionKey.equals("report.download.pdf.session")) {
175                                                 new PdfReportHandler().createPdfFileContent(request, response, 3);
176                                         } else if (actionKey.equals("report.download.csv.session")) {
177                                                 (new ReportHandler()).createCSVFileContent(out, rd, rr, request, response);
178                                         } else if (actionKey.equals("report.download.excel.session")) {
179                                                 new ReportHandler().createExcelFileContent(out, rd, rr, request, response, user_id, 3); // 3
180                                                                                                                                                                                                                                 // whole
181                                         } else {
182
183                                                 new ReportHandler().createExcel2007FileContent(out, rd, rr, request, response, user_id, 3); // 3
184                                                                                                                                                                                                                                         // whole
185                                         }
186                                 } catch (Exception e) {
187                                         logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action ["
188                                                         + actionKey + "].", e);
189                                 }
190                         } else {
191                                 response.sendRedirect("login.htm");
192                         }
193                 } else {
194                         if (session != null && user != null) {
195                                 Action action = null;
196                                 ServletContext servletContext = request.getSession().getServletContext();
197                                 if (!Globals.isSystemInitialized()) {
198                                         Globals.initializeSystem(servletContext);
199                                 }
200                                 try {
201                                         action = Globals.getRaptorActionMapping().getAction(actionKey);
202                                         if (action == null)
203                                                 throw new RaptorRuntimeException("Action not found");
204                                 } catch (RaptorException e) {
205                                         logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action ["
206                                                         + actionKey + "].", e);
207
208                                         viewName = (new ErrorHandler()).processFatalErrorJSON(request,
209                                                         new RaptorRuntimeException("[Controller.processRequest]Invalid raptor action [" + actionKey
210                                                                         + "]. Exception: " + e.getMessage()));
211                                 }
212
213                                 try {
214                                         Class[] paramTypes = new Class[2];
215                                         paramTypes[0] = Class.forName("javax.servlet.http.HttpServletRequest");
216                                         paramTypes[1] = Class.forName("java.lang.String");
217
218                                         Class handlerClass = Class.forName(action.getControllerClass());
219                                         Object handler = handlerClass.newInstance();
220                                         Method handlerMethod = handlerClass.getMethod(action.getControllerMethod(), paramTypes);
221
222                                         Object[] paramValues = new Object[2];
223                                         paramValues[0] = request;
224                                         paramValues[1] = action.getJspName();
225                                         ;
226
227                                         viewName = (String) handlerMethod.invoke(handler, paramValues);
228                                         if (!actionKey.equals("chart.run"))
229                                                 response.setContentType("application/json");
230                                         else
231                                                 response.setContentType("text/html");
232
233                                 } catch (ClassNotFoundException e) {
234                                         logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
235                                                         + actionKey + "]. ClassNotFoundException: " + e.getMessage()));
236                                         viewName = (new ErrorHandler()).processFatalErrorJSON(request,
237                                                         new RaptorRuntimeException(
238                                                                         "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
239                                                                                         + e.getMessage()));
240                                 } catch (IllegalAccessException e) {
241                                         logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
242                                                         + actionKey + "]. IllegalAccessException: " + e.getMessage()));
243                                         viewName = (new ErrorHandler()).processFatalErrorJSON(request,
244                                                         new RaptorRuntimeException(
245                                                                         "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
246                                                                                         + e.getMessage()));
247                                 } catch (InstantiationException e) {
248                                         logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
249                                                         + actionKey + "]. InstantiationException: " + e.getMessage()));
250                                         viewName = (new ErrorHandler()).processFatalErrorJSON(request,
251                                                         new RaptorRuntimeException(
252                                                                         "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
253                                                                                         + e.getMessage()));
254                                 } catch (NoSuchMethodException e) {
255                                         logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
256                                                         + actionKey + "]. NoSuchMethodException: " + e.getMessage()));
257                                         viewName = (new ErrorHandler()).processFatalErrorJSON(request,
258                                                         new RaptorRuntimeException(
259                                                                         "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
260                                                                                         + e.getMessage()));
261                                 } catch (InvocationTargetException e) {
262                                         logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
263                                                         + actionKey + "]. InvocationTargetException: " + e.getMessage()));
264                                         viewName = (new ErrorHandler()).processFatalErrorJSON(request,
265                                                         new RaptorRuntimeException(
266                                                                         "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
267                                                                                         + e.getMessage()));
268                                 } finally {
269                                         PrintWriter out = response.getWriter();
270                                         out.write(viewName);
271                                 }
272                         } else {
273                                 PrintWriter out = response.getWriter();
274                                 out.write("session has timed out for user");
275                         }
276
277                 }
278         }
279
280         @RequestMapping(value = "/report/wizard/list_columns", method = RequestMethod.GET, produces = "application/json")
281         public @ResponseBody ArrayList<ColumnJSON> listColumns(HttpServletRequest request, HttpServletResponse response)
282                         throws IOException, RaptorException {
283                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
284                 List<DataColumnType> reportColumnList = rdef.getAllColumns();
285                 ArrayList<ColumnJSON> listJSON = new ArrayList<ColumnJSON>();
286                 ColumnJSON columnJSON = new ColumnJSON();
287
288                 for (DataColumnType reportColumnType : reportColumnList) {
289                         columnJSON = new ColumnJSON();
290                         columnJSON.setId(reportColumnType.getColId());
291                         columnJSON.setName(reportColumnType.getColName());
292                         listJSON.add(columnJSON);
293                 }
294                 return listJSON;
295         }
296
297         @RequestMapping(value = "/report/wizard/list_drilldown_reports", method = RequestMethod.GET, produces = "application/json")
298         public @ResponseBody ArrayList<ColumnJSON> list_drilldown_reports(HttpServletRequest request,
299                         HttpServletResponse response) throws IOException, RaptorException {
300                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
301                 Vector<IdNameValue> publicReportIdNames = DataCache.getPublicReportIdNames();
302                 Vector groupReportIdNames = DataCache.getGroupAccessibleReportIdNames(AppUtils.getUserID(request),
303                                 AppUtils.getUserRoles(request));
304                 Vector privateReportIdNames = DataCache.getPrivateAccessibleReportIdNames(AppUtils.getUserID(request),
305                                 AppUtils.getUserRoles(request));
306
307                 ArrayList<ColumnJSON> listJSON = new ArrayList<ColumnJSON>();
308                 ColumnJSON columnJSON = new ColumnJSON();
309
310                 ServletContext servletContext = request.getSession().getServletContext();
311                 if (!Globals.isSystemInitialized()) {
312                         Globals.initializeSystem(servletContext);
313                 }
314
315                 for (int i = 0; i < publicReportIdNames.size(); i++) {
316                         IdNameValue reportIdName = (IdNameValue) publicReportIdNames.get(i);
317                         columnJSON = new ColumnJSON();
318                         columnJSON.setId(reportIdName.getId());
319                         columnJSON.setName("Public Report: " + reportIdName.getName());
320                         if (!rdef.getReportID().equals(reportIdName.getId()))
321                                 listJSON.add(columnJSON);
322                 }
323
324                 for (int i = 0; i < groupReportIdNames.size(); i++) {
325                         IdNameValue reportIdName = (IdNameValue) groupReportIdNames.get(i);
326                         columnJSON = new ColumnJSON();
327                         columnJSON.setId(reportIdName.getId());
328                         columnJSON.setName("Group Report: " + reportIdName.getName());
329                         if (!rdef.getReportID().equals(reportIdName.getId()))
330                                 listJSON.add(columnJSON);
331                 }
332
333                 for (int i = 0; i < privateReportIdNames.size(); i++) {
334                         IdNameValue reportIdName = (IdNameValue) privateReportIdNames.get(i);
335                         columnJSON = new ColumnJSON();
336                         columnJSON.setId(reportIdName.getId());
337                         columnJSON.setName("Private Report: " + reportIdName.getName());
338                         if (!rdef.getReportID().equals(reportIdName.getId()))
339                                 listJSON.add(columnJSON);
340                 }
341
342                 return listJSON;
343         }
344
345         @RequestMapping(value = "/report/wizard/list_formfields", method = RequestMethod.GET, produces = "application/json")
346         public @ResponseBody ArrayList<SearchFieldJSON> listFormFields(HttpServletRequest request,
347                         HttpServletResponse response) throws IOException, RaptorException {
348                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
349                 ArrayList<SearchFieldJSON> listJSON = new ArrayList<SearchFieldJSON>();
350                 SearchFieldJSON fieldJSON = new SearchFieldJSON();
351                 if (rdef.getFormFieldList() != null) {
352                         for (Iterator iter = rdef.getFormFieldList().getFormField().iterator(); iter.hasNext();) {
353                                 fieldJSON = new SearchFieldJSON();
354                                 FormFieldType fft = (FormFieldType) iter.next();
355                                 String fieldId = fft.getFieldId();
356                                 String fieldDisplay = fft.getFieldName();
357                                 fieldJSON.setId(fieldId);
358                                 fieldJSON.setName(fieldDisplay);
359                                 listJSON.add(fieldJSON);
360                         }
361                 }
362
363                 return listJSON;
364         }
365
366         @RequestMapping(value = "/report/wizard/list_child_report_col/{reportID}", method = RequestMethod.GET, produces = "application/json")
367         public @ResponseBody ArrayList<ColumnJSON> listChildReportCols(@PathVariable("reportID") String reportID,
368                         HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
369                 ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, reportID, false);
370
371                 List<DataColumnType> reportColumnList = ddRr.getAllColumns();
372                 ArrayList<ColumnJSON> listJSON = new ArrayList<ColumnJSON>();
373                 ColumnJSON columnJSON = new ColumnJSON();
374
375                 for (DataColumnType reportColumnType : reportColumnList) {
376                         columnJSON = new ColumnJSON();
377                         columnJSON.setId(reportColumnType.getColId());
378                         columnJSON.setName(reportColumnType.getColName());
379                         listJSON.add(columnJSON);
380                 }
381                 return listJSON;
382         }
383
384         @RequestMapping(value = "/report/wizard/list_child_report_ff/{reportID}", method = RequestMethod.GET, produces = "application/json")
385         public @ResponseBody ArrayList<SearchFieldJSON> listChildReportFormFields(@PathVariable("reportID") String reportID,
386                         HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
387                 ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, reportID, false);
388                 ArrayList<SearchFieldJSON> listJSON = new ArrayList<SearchFieldJSON>();
389                 SearchFieldJSON fieldJSON = new SearchFieldJSON();
390
391                 ReportFormFields ddReportFormFields = ddRr.getReportFormFields();
392                 if (ddReportFormFields != null) {
393                         for (ddReportFormFields.resetNext(); ddReportFormFields.hasNext();) {
394                                 FormField ff = ddReportFormFields.getNext();
395                                 if (!ff.getFieldType().equals(FormField.FFT_BLANK)) {
396                                         fieldJSON = new SearchFieldJSON();
397                                         fieldJSON.setId(ff.getFieldName());
398                                         fieldJSON.setName(ff.getFieldDisplayName());
399                                         listJSON.add(fieldJSON);
400                                 }
401                         }
402                 }
403                 return listJSON;
404         }
405
406         @RequestMapping(value = "report/wizard/copy_report/{reportID}", method = RequestMethod.GET, produces = "application/json")
407         public @ResponseBody MessageJSON copyReport(@PathVariable("reportID") String reportID, HttpServletRequest request,
408                         HttpServletResponse response) throws IOException, RaptorException {
409                 MessageJSON messageJSON = new MessageJSON();
410                 try {
411
412                         ReportHandler rh = new ReportHandler();
413                         ReportDefinition rdef = rh.loadReportDefinition(request, reportID);
414                         rdef.setAsCopy(request);
415                         request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
416                         messageJSON.setMessage("Success- Report Copied.");
417                         messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
418
419                 } catch (RaptorException e) {
420                         request.setAttribute("error_extra_msg", "While copying report " + reportID);
421                         messageJSON.setMessage("Failed - While copying report " + reportID);
422                         messageJSON.setAnyStacktrace(getStackTrace(e));
423                         logger.debug(EELFLoggerDelegate.debugLogger,
424                                         ("[Controller.processRequest]Invalid raptor action [copyReport]. RaptorException: "
425                                                         + e.getMessage()));
426                         return messageJSON;
427                 }
428
429                 return messageJSON;
430         }
431
432         @RequestMapping(value = "report/wizard/import_report", method = RequestMethod.POST, consumes = "application/json")
433         public @ResponseBody MessageJSON importReport(@RequestBody ImportJSON importJSON, HttpServletRequest request,
434                         HttpServletResponse response) throws IOException, RaptorException {
435                 MessageJSON messageJSON = new MessageJSON();
436                 try {
437                         String reportXML = importJSON.getReportXML();
438
439                         ReportHandler rh = new ReportHandler();
440                         ReportDefinition rdef = rh.createReportDefinition(request, "-1", reportXML);
441                         rdef.updateReportDefType();
442                         rdef.generateWizardSequence(request);
443                         rdef.setReportName("Import: " + rdef.getReportName());
444                         rdef.clearAllDrillDowns();
445
446                         request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
447
448                         messageJSON.setMessage("Success- Report imported.");
449                         messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
450
451                 } catch (RaptorException e) {
452                         request.setAttribute("error_extra_msg", "Unable to parse XML. Nested error: ");
453                         messageJSON.setMessage("Unable to parse XML. Nested error: ");
454                         messageJSON.setAnyStacktrace(getStackTrace(e));
455
456                         return messageJSON;
457                 }
458
459                 return messageJSON;
460
461         }
462
463         @RequestMapping(value = "report/wizard/save_formfield_tab_data", method = RequestMethod.POST)
464         public @ResponseBody MessageJSON saveFFTabWiseData(@RequestBody FormEditJSON formEditJSON,
465                         HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
466                 ReportDefinition rdef = null;
467                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
468
469                 MessageJSON messageJSON = new MessageJSON();
470                 try {
471                         if (rdef != null) {
472
473                                 String fieldId = formEditJSON.getFieldId();
474
475                                 if (rdef.getFormFieldList() != null) {
476                                         for (FormFieldType fft : rdef.getFormFieldList().getFormField()) {
477                                                 if (fft.getFieldId().equals(fieldId)) {
478                                                         fft.setFieldName(formEditJSON.getFieldName());
479                                                         fft.setFieldType(formEditJSON.getFieldType());
480                                                         fft.setVisible(formEditJSON.isVisible() ? "Y" : "N");
481                                                         fft.setDefaultValue(formEditJSON.getDefaultValue());
482                                                         fft.setFieldDefaultSQL(formEditJSON.getFieldDefaultSQL());
483                                                         fft.setFieldSQL(formEditJSON.getFieldSQL());
484                                                         fft.setValidationType(formEditJSON.getValidationType());
485
486                                                         // clear predefined value
487                                                         if (fft.getPredefinedValueList() != null) {
488                                                                 for (Iterator<String> iter = fft.getPredefinedValueList().getPredefinedValue().iterator(); iter
489                                                                                 .hasNext();)
490                                                                         iter.remove();
491                                                         }
492
493                                                         List<IdNameBooleanJSON> predefList = formEditJSON.getPredefinedValueList();
494                                                         if (predefList != null && predefList.size() > 0) {
495                                                                 for (IdNameBooleanJSON item : predefList) {
496                                                                         PredefinedValueList predefinedValueList = new ObjectFactory()
497                                                                                         .createPredefinedValueList();
498                                                                         fft.setPredefinedValueList(predefinedValueList);
499                                                                         fft.getPredefinedValueList().getPredefinedValue().add(item.getId());
500                                                                 }
501                                                         }
502
503                                                 }
504                                         }
505                                 }
506
507                                 persistReportDefinition(request, rdef);
508                                 messageJSON.setMessage("Success formfield Details of given report is saved in session.");
509                                 messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
510
511                         } else {
512                                 messageJSON.setMessage("Report Definition is not in session");
513                                 messageJSON.setAnyStacktrace("Report Definition is not in session");
514
515                         }
516                 } catch (Exception ex) {
517                         messageJSON.setMessage("Error occured while formfield details Tab");
518                         messageJSON.setAnyStacktrace(getStackTrace(ex));
519                         return messageJSON;
520                 }
521
522                 return messageJSON;
523         }
524
525         @RequestMapping(value = "report/wizard/save_col_tab_data", method = RequestMethod.POST)
526         public @ResponseBody MessageJSON saveColTabWiseData(@RequestBody ColumnEditJSON columnEditJSON,
527                         HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
528                 ReportDefinition rdef = null;
529                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
530
531                 MessageJSON messageJSON = new MessageJSON();
532
533                 try {
534                         if (rdef != null) {
535                                 String colId = columnEditJSON.getColId();
536                                 List<DataColumnType> reportColumnList = rdef.getAllColumns();
537
538                                 for (DataColumnType reportColumnType : reportColumnList) {
539                                         // columnJSON = new ColumnJSON();
540                                         if (reportColumnType.getColId().equals(colId)) {
541                                                 reportColumnType.setColName(columnEditJSON.getColName());
542                                                 reportColumnType.setDisplayAlignment(columnEditJSON.getDisplayAlignment());
543                                                 reportColumnType.setDisplayHeaderAlignment(columnEditJSON.getDisplayHeaderAlignment());
544                                                 reportColumnType.setIsSortable(columnEditJSON.isSortable());
545                                                 reportColumnType.setVisible(columnEditJSON.isVisible());
546                                                 reportColumnType.setDrillDownURL(columnEditJSON.getDrilldownURL());
547                                                 reportColumnType.setDrillDownParams(columnEditJSON.getDrilldownParams());
548                                                 reportColumnType.setDrillDownType(columnEditJSON.getDrilldownType());
549
550                                         }
551
552                                 }
553                                 persistReportDefinition(request, rdef);
554                                 messageJSON.setMessage("Success Column Details of given report is saved in session.");
555                                 messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
556
557                         } else {
558                                 messageJSON.setMessage("Report Definition is not in session");
559                                 messageJSON.setAnyStacktrace("");
560
561                         }
562                 } catch (Exception ex) {
563                         messageJSON.setMessage("Error occured while saving column details Tab");
564                         messageJSON.setAnyStacktrace(getStackTrace(ex));
565
566                         return messageJSON;
567                 }
568
569                 return messageJSON;
570         }
571
572         @RequestMapping(value = "report/wizard/save_def_tab_data/{id}", method = RequestMethod.POST)
573         public @ResponseBody MessageJSON saveDefTabWiseData(@PathVariable("id") String id,
574                         @RequestBody DefinitionJSON definitionJSON, HttpServletRequest request, HttpServletResponse response)
575                         throws IOException, RaptorException {
576                 ReportDefinition rdef = null;
577                 ReportRuntime rr = null;
578                 boolean newReport = false;
579                 MessageJSON messageJSON = new MessageJSON();
580
581                 try {
582                         if (id.equals("InSession")) {
583                                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
584                                 newReport = false;
585
586                         } else if (id.equals("Create")) {
587                                 removeVariablesFromSession(request);
588                                 rdef = (new ReportHandler()).loadReportDefinition(request, "-1");
589                                 newReport = true;
590                                 System.out.println("&&&&&&&&&&&&&&&&&&&&&& CHECK Report Type "
591                                                 + (AppUtils.nvl(rdef.getReportType()).length() <= 0));
592                                 if (AppUtils.nvl(rdef.getReportType()).length() <= 0) {
593                                         rdef.setReportType(AppConstants.RT_LINEAR);
594                                         System.out.println("&&&&&&&&&&&&&&&&&&&&&& ADDED Report Type in session ");
595                                 }
596
597                         } else if (AppUtils.nvl(id).length() > 0) {
598                                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
599                                 rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
600
601                                 if (rdef != null && !rdef.getReportID().equals(id)) {
602                                         request.getSession().removeAttribute(AppConstants.SI_REPORT_DEFINITION);
603                                         removeVariablesFromSession(request);
604                                         rdef = (new ReportHandler()).loadReportDefinition(request, id);
605                                 } else if (rr != null && !rr.getReportID().equals(id)) {
606                                         request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
607                                         removeVariablesFromSession(request);
608                                         rdef = (new ReportHandler()).loadReportDefinition(request, id);
609                                 } else if (rdef == null) {
610                                         rdef = (new ReportHandler()).loadReportDefinition(request, id);
611                                 }
612                                 newReport = false;
613
614                         } else {
615                                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
616                                 newReport = true;
617                         }
618                         // }
619
620                         if (rdef != null) {
621                                 String reportName = definitionJSON.getReportName();
622                                 String errorString = "";
623                                 if (AppUtils.nvl(reportName).length() <= 0)
624                                         errorString = "ReportName cannot be null;";
625                                 rdef.setReportName(reportName);
626
627                                 String reportDescr = definitionJSON.getReportDescr();
628                                 rdef.setReportDescr(reportDescr);
629
630                                 String formHelpText = definitionJSON.getFormHelpText();
631                                 rdef.setFormHelpText(formHelpText);
632
633                                 Integer pageSize = definitionJSON.getPageSize();
634                                 rdef.setPageSize(pageSize);
635
636                                 List<IdNameBooleanJSON> menuIds = definitionJSON.getDisplayArea();
637                                 for (IdNameBooleanJSON menuId : menuIds) {
638                                         if (menuId.isSelected()) {
639                                                 rdef.setMenuID(menuId.getName());
640                                         }
641
642                                 }
643
644                                 Boolean hideFormFieldsAfterRun = definitionJSON.getHideFormFieldsAfterRun();
645                                 rdef.setHideFormFieldAfterRun(hideFormFieldsAfterRun);
646                                 Integer maxRowsInExcelCSVDownload = definitionJSON.getMaxRowsInExcelCSVDownload();
647                                 rdef.setMaxRowsInExcelDownload(maxRowsInExcelCSVDownload);
648                                 Integer frozenColumns = definitionJSON.getFrozenColumns();
649                                 rdef.setFrozenColumns(frozenColumns);
650                                 String dataGridAlign = definitionJSON.getDataGridAlign();
651                                 rdef.setDataGridAlign(dataGridAlign);
652                                 String emptyMessage = definitionJSON.getEmptyMessage();
653                                 rdef.setEmptyMessage(emptyMessage);
654                                 String dataContainerHeight = definitionJSON.getDataContainerHeight();
655                                 rdef.setDataContainerHeight(dataContainerHeight);
656                                 String dataContainerWidth = definitionJSON.getDataContainerWidth();
657                                 rdef.setDataContainerWidth(dataContainerWidth);
658                                 boolean runtimeColSortDisabled = definitionJSON.getRuntimeColSortDisabled();
659                                 rdef.setRuntimeColSortDisabled(runtimeColSortDisabled);
660                                 Integer numFormCols = definitionJSON.getNumFormCols();
661                                 rdef.setNumFormCols(Integer.toString(numFormCols));
662                                 String reportTitle = definitionJSON.getReportTitle();
663                                 rdef.setReportTitle(reportTitle);
664                                 String reportSubTitle = definitionJSON.getReportSubTitle();
665                                 rdef.setReportSubTitle(reportSubTitle);
666
667                                 List<NameBooleanJSON> displayOptions = definitionJSON.getDisplayOptions();
668                                 StringBuffer displayOptionStr = new StringBuffer("NNNNNNN");
669                                 for (NameBooleanJSON displayOption : displayOptions) {
670                                         if (displayOption.isSelected()) {
671                                                 if (displayOption.getName().equals("HideFormFields")) {
672                                                         displayOptionStr.setCharAt(0, 'Y');
673                                                 } else if (displayOption.getName().equals("HideChart")) {
674                                                         displayOptionStr.setCharAt(1, 'Y');
675                                                 } else if (displayOption.getName().equals("HideReportData")) {
676                                                         displayOptionStr.setCharAt(2, 'Y');
677                                                 } else if (displayOption.getName().equals("HideExcel")) {
678                                                         displayOptionStr.setCharAt(5, 'Y');
679                                                 } else if (displayOption.getName().equals("HidePdf")) {
680                                                         displayOptionStr.setCharAt(6, 'Y');
681                                                 }
682                                         }
683
684                                 }
685
686                                 rdef.setDisplayOptions(displayOptionStr.toString());
687                         }
688                         if (id.equals("Create")) {
689                                 rdef.persistReport(request);
690                         } else
691                                 persistReportDefinition(request, rdef);
692                         messageJSON.setMessage("Success Definition of given report is saved in session.");
693                         messageJSON.setAnyStacktrace((newReport ? " New Report info is added to Session "
694                                         : rdef.getReportID() + " is Modified and added to session and DB."));
695
696                 } catch (Exception ex) {
697                         messageJSON.setMessage("Error occured while saving definition Tab");
698                         messageJSON.setAnyStacktrace(getStackTrace(ex));
699                         logger.error(EELFLoggerDelegate.errorLogger,
700                                         "[Controller.processRequest]Invalid raptor action [retrieveTabWiseData].", ex);
701                         return messageJSON;
702                 }
703
704                 return messageJSON;
705         }
706
707         @RequestMapping(value = { "/report/wizard/retrieve_form_tab_wise_data/{id}",
708                         "/report/wizard/retrieve_form_tab_wise_data/{id}/{action}" }, method = RequestMethod.GET)
709         public @ResponseBody FormEditJSON retrieveFormTabWiseData(@PathVariable Map<String, String> pathVariables,
710                         HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
711                 ReportDefinition rdef = null;
712                 String id = "";
713                 String action = "";
714                 String detailId = "";
715                 FormEditJSON wizardJSON = new FormEditJSON();
716                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
717
718                 if (pathVariables.containsKey("id")) {
719                         id = pathVariables.get("id");
720                 }
721                 if (pathVariables.containsKey("action")) {
722                         action = pathVariables.get("action");
723                 }
724                 
725                 ServletContext servletContext = request.getSession().getServletContext();
726                 if (!Globals.isSystemInitialized()) {
727                         Globals.initializeSystem(servletContext);
728                 }
729                 wizardJSON.setTabId("FormEdit");
730                 wizardJSON.setTabName("Form Edit");
731                 FormFieldType currField = null;
732                 try {
733                         if (id.equals("add")) {
734
735                                 currField = rdef.addFormFieldType(new ObjectFactory(), "", "", "", "", "", "", "", "", null, null, "",
736                                                 "");
737                                 wizardJSON.setFieldId(currField.getFieldId());
738                                 wizardJSON.setFieldName(currField.getFieldName());
739                                 wizardJSON.setFieldType(currField.getFieldType());
740                                 wizardJSON.setVisible(AppUtils.nvls(currField.getVisible(), "Y").toUpperCase().startsWith("Y"));
741                                 wizardJSON.setDefaultValue(currField.getDefaultValue());
742                                 wizardJSON.setFieldDefaultSQL(currField.getFieldDefaultSQL());
743                                 wizardJSON.setFieldSQL(currField.getFieldSQL());
744                                 wizardJSON.setValidationType(currField.getValidationType());
745                                 persistReportDefinition(request, rdef);
746
747                         } else if (action.equals("delete")) {
748                                 rdef.deleteFormField(id);
749                                 persistReportDefinition(request, rdef);
750                                 wizardJSON.setMessage("Formfield " + detailId + " Deleted");
751                         }
752                         if (rdef.getFormFieldList() != null) {
753                                 for (FormFieldType fft : rdef.getFormFieldList().getFormField()) {
754                                         if (fft.getFieldId().equals(id)) {
755                                                 wizardJSON.setFieldId(fft.getFieldId());
756                                                 wizardJSON.setFieldName(fft.getFieldName());
757                                                 wizardJSON.setFieldType(fft.getFieldType());
758                                                 wizardJSON.setVisible(fft.getVisible().toUpperCase().startsWith("Y"));
759                                                 wizardJSON.setDefaultValue(fft.getDefaultValue());
760                                                 wizardJSON.setFieldDefaultSQL(fft.getFieldDefaultSQL());
761                                                 wizardJSON.setFieldSQL(fft.getFieldSQL());
762                                                 wizardJSON.setValidationType(fft.getValidationType());
763
764                                                 PredefinedValueList preDefined = fft.getPredefinedValueList();
765
766                                                 if (preDefined != null) {
767                                                         List<IdNameBooleanJSON> preDefinedList = new ArrayList<IdNameBooleanJSON>();
768                                                         IdNameBooleanJSON idNameBooleanJSON = new IdNameBooleanJSON();
769
770                                                         for (String v : preDefined.getPredefinedValue()) {
771                                                                 idNameBooleanJSON = new IdNameBooleanJSON();
772                                                                 idNameBooleanJSON.setId(v);
773                                                                 idNameBooleanJSON.setName(v);
774                                                                 preDefinedList.add(idNameBooleanJSON);
775                                                         }
776                                                         wizardJSON.setPredefinedValueList(preDefinedList);
777                                                 }
778                                         }
779                                 }
780                         }
781                 } catch (Exception ex) {
782                         logger.error(EELFLoggerDelegate.errorLogger,
783                                         "[Controller.processRequest]Invalid raptor action [retrieveFormTabWiseData].", ex);
784                         ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
785                         errorJSONRuntime.setErrormessage("Error occured while retreiving formedit definition Tab");
786                         errorJSONRuntime.setStacktrace(getStackTrace(ex));
787                         wizardJSON.setErrorMessage("Error occured while retreiving formedit definition Tab");
788                         wizardJSON.setErrorStackTrace(getStackTrace(ex));
789
790                 }
791
792                 return wizardJSON;
793         }
794
795         @RequestMapping(value = { "/report/wizard/retrieve_col_tab_wise_data/{id}" }, method = RequestMethod.GET)
796         public @ResponseBody ColumnEditJSON retrieveColTabWiseData(@PathVariable Map<String, String> pathVariables,
797                         HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
798                 ReportDefinition rdef = null;
799                 String id = "";
800                 ColumnEditJSON wizardJSON = new ColumnEditJSON();
801                 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
802
803                 if (pathVariables.containsKey("id")) {
804                         id = pathVariables.get("id");
805                 }
806                 ServletContext servletContext = request.getSession().getServletContext();
807                 if (!Globals.isSystemInitialized()) {
808                         Globals.initializeSystem(servletContext);
809                 }
810                 if (rdef != null) {
811                         wizardJSON.setTabId("ColEdit");
812                         wizardJSON.setTabName("Column Edit");
813
814                         List<DataColumnType> reportColumnList = rdef.getAllColumns();
815
816                         for (DataColumnType reportColumnType : reportColumnList) {
817                                 if (reportColumnType.getColId().equals(id)) {
818                                         wizardJSON.setColId(reportColumnType.getColId());
819                                         wizardJSON.setColName(reportColumnType.getColName());
820                                         wizardJSON.setDisplayAlignment(reportColumnType.getDisplayAlignment());
821                                         wizardJSON.setDisplayHeaderAlignment(reportColumnType.getDisplayHeaderAlignment());
822                                         wizardJSON.setSortable(
823                                                         reportColumnType.isIsSortable() == null ? false : reportColumnType.isIsSortable());
824                                         wizardJSON.setVisible(reportColumnType.isVisible());
825                                         wizardJSON.setDrilldownURL(
826                                                         reportColumnType.getDrillDownURL() == null ? "" : reportColumnType.getDrillDownURL());
827                                         wizardJSON.setDrilldownParams(
828                                                         reportColumnType.getDrillDownParams() == null ? "" : reportColumnType.getDrillDownParams());
829                                         wizardJSON.setDrilldownType(
830                                                         reportColumnType.getDrillDownType() == null ? "" : reportColumnType.getDrillDownType());
831
832                                 }
833                         }
834                 } else {
835                         wizardJSON.setErrorMessage("Report is not in session");
836                 }
837
838                 return wizardJSON;
839         }
840
841         @RequestMapping(value = { "/report/wizard/retrieve_sql_tab_wise_data/{id}",
842                         "/report/wizard/retrieve_sql_tab_wise_data/" }, method = RequestMethod.GET)
843         public @ResponseBody QueryJSON retrieveSqlTabWiseData(@PathVariable Map<String, String> pathVariables,
844                         HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
845                 ReportDefinition rdef = null;
846                 ReportRuntime rr = null;
847                 String id = "";
848                 String detailId = "";
849                 QueryJSON wizardJSON = new QueryJSON();
850
851                 if (pathVariables.containsKey("id")) {
852                         id = pathVariables.get("id");
853                 }
854                 if (pathVariables.containsKey("detailId")) {
855                         detailId = pathVariables.get("detailId");
856                 }
857                 ServletContext servletContext = request.getSession().getServletContext();
858                 if (!Globals.isSystemInitialized()) {
859                         Globals.initializeSystem(servletContext);
860                 }
861                 if (id.equals("InSession") || AppUtils.nvl(id).length() <= 0) {
862                         rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
863                 } else if (AppUtils.nvl(id).length() > 0) {
864                         rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
865                         rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
866
867                         if (rdef != null && !rdef.getReportID().equals(id)) {
868                                 request.getSession().removeAttribute(AppConstants.SI_REPORT_DEFINITION);
869                                 removeVariablesFromSession(request);
870                                 rdef = (new ReportHandler()).loadReportDefinition(request, id);
871                         } else if (rr != null && !rr.getReportID().equals(id)) {
872                                 request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
873                                 removeVariablesFromSession(request);
874                                 rdef = (new ReportHandler()).loadReportDefinition(request, id);
875                         } else if (rdef == null) {
876                                 rdef = (new ReportHandler()).loadReportDefinition(request, id);
877                         }
878                 }
879
880                 if (rdef != null) {
881
882                         wizardJSON.setTabId("Sql");
883                         wizardJSON.setTabName("Sql");
884                         wizardJSON.setQuery(rdef.getReportSQL());
885                 }
886                 return wizardJSON;
887         }
888
889         @RequestMapping(value = { "/report/wizard/retrieve_def_tab_wise_data/{id}",
890                         "/report/wizard/retrieve_def_tab_wise_data/{id}/{detailId}" }, method = RequestMethod.GET)
891         public @ResponseBody DefinitionJSON retrieveDefTabWiseData(@PathVariable Map<String, String> pathVariables,
892                         HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
893                 ReportDefinition rdef = null;
894                 ReportRuntime rr = null;
895                 boolean newReport = false;
896                 String tabId = "Def";
897                 String id = "";
898
899                 if (pathVariables.containsKey("id")) {
900                         id = pathVariables.get("id");
901                 }
902                 String detailId = "";
903                 if (pathVariables.containsKey("detailId")) {
904                         detailId = pathVariables.get("detailId");
905                 }
906
907                 ServletContext servletContext = request.getSession().getServletContext();
908                 if (!Globals.isSystemInitialized()) {
909                         Globals.initializeSystem(servletContext);
910                 }
911
912                 if (tabId.equals("Def") && id.equals("InSession")) {
913                         rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
914                         newReport = false;
915
916                 } else if (tabId.equals("Def") && id.equals("Create")) {
917                         removeVariablesFromSession(request);
918                         rdef = (new ReportHandler()).loadReportDefinition(request, "-1");
919                         rdef.setReportType(AppConstants.RT_LINEAR);
920                         newReport = true;
921
922                 } else if (tabId.equals("Def") && AppUtils.nvl(id).length() > 0) {
923                         rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
924                         rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
925
926                         if (rdef != null && !rdef.getReportID().equals(id)) {
927                                 request.getSession().removeAttribute(AppConstants.SI_REPORT_DEFINITION);
928                                 removeVariablesFromSession(request);
929                                 rdef = (new ReportHandler()).loadReportDefinition(request, id);
930                                 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
931                         } else if (rr != null && !rr.getReportID().equals(id)) {
932                                 request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
933                                 removeVariablesFromSession(request);
934                                 rdef = (new ReportHandler()).loadReportDefinition(request, id);
935                                 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
936                         } else if (rdef == null) {
937                                 rdef = (new ReportHandler()).loadReportDefinition(request, id);
938                                 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
939                         }
940                         newReport = false;
941
942                 } else {
943                         rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
944                 }
945                 DefinitionJSON wizardJSON = new DefinitionJSON();
946                 if (tabId.equals("Def")) {
947                         wizardJSON.setTabId("Def");
948                         wizardJSON.setTabName("Definition");
949
950                         wizardJSON.setReportId((rdef != null) ? rdef.getReportID() + "" : "");
951                         wizardJSON.setReportName((rdef != null) ? rdef.getReportName() : "");
952                         wizardJSON.setReportDescr((rdef != null) ? rdef.getReportDescr() : "");
953                         wizardJSON.setReportType((rdef != null) ? rdef.getReportType() : AppConstants.RT_LINEAR);
954                         wizardJSON.setDbInfo((rdef != null) ? rdef.getDBInfo() : "");
955                         wizardJSON.setFormHelpText((rdef != null) ? rdef.getFormHelpText() : "");
956                         wizardJSON.setPageSize((rdef != null) ? rdef.getPageSize() : 50);
957                         List<IdNameBooleanJSON> displayArea = new ArrayList<IdNameBooleanJSON>();
958                         IdNameBooleanJSON idNameJSON = new IdNameBooleanJSON();
959                         String qMenu = "";
960                         for (int i = 0; i < AppUtils.getQuickLinksMenuIDs().size(); i++) {
961                                 idNameJSON = new IdNameBooleanJSON();
962                                 qMenu = (String) AppUtils.getQuickLinksMenuIDs().get(i);
963                                 idNameJSON.setId(qMenu);
964                                 idNameJSON.setName(qMenu);
965                                 if (rdef != null && (rdef.getMenuID().equals(qMenu))) {
966                                         idNameJSON.setSelected(true);
967                                 }
968                                 displayArea.add(idNameJSON);
969                         }
970                         wizardJSON.setDisplayArea(displayArea);
971                         wizardJSON.setHideFormFieldsAfterRun((rdef != null) ? rdef.isHideFormFieldAfterRun() : false);
972                         wizardJSON.setMaxRowsInExcelCSVDownload((rdef != null) ? rdef.getMaxRowsInExcelDownload() : 500);
973                         wizardJSON.setFrozenColumns((rdef != null) ? rdef.getFrozenColumns() : 0);
974                         wizardJSON.setDataGridAlign((rdef != null) ? rdef.getDataGridAlign() : "left");
975                         wizardJSON.setEmptyMessage((rdef != null) ? rdef.getEmptyMessage() : "No records found");
976                         wizardJSON.setDataContainerHeight((rdef != null) ? rdef.getDataContainerHeight() : "600");
977                         wizardJSON.setDataContainerWidth((rdef != null) ? rdef.getDataContainerWidth() : "900");
978                         List<NameBooleanJSON> displayOptions = new ArrayList<NameBooleanJSON>();
979                         NameBooleanJSON nameBooleanJSON = new NameBooleanJSON();
980                         nameBooleanJSON.setName("HideFormFields");
981                         nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideForm() : false);
982                         displayOptions.add(nameBooleanJSON);
983
984                         nameBooleanJSON = new NameBooleanJSON();
985                         nameBooleanJSON.setName("HideChart");
986                         nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideChart() : false);
987                         displayOptions.add(nameBooleanJSON);
988
989                         nameBooleanJSON = new NameBooleanJSON();
990                         nameBooleanJSON.setName("HideReportData");
991                         nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideData() : false);
992                         displayOptions.add(nameBooleanJSON);
993
994                         nameBooleanJSON = new NameBooleanJSON();
995                         nameBooleanJSON.setName("HideExcel");
996                         nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideExcelIcons() : false);
997                         displayOptions.add(nameBooleanJSON);
998
999                         nameBooleanJSON = new NameBooleanJSON();
1000                         nameBooleanJSON.setName("HidePdf");
1001                         nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHidePDFIcons() : false);
1002                         displayOptions.add(nameBooleanJSON);
1003
1004                         wizardJSON.setDisplayOptions(displayOptions);
1005
1006                         wizardJSON.setRuntimeColSortDisabled((rdef != null) ? rdef.isRuntimeColSortDisabled() : false);
1007                         wizardJSON.setNumFormCols((rdef != null) ? rdef.getNumFormColsAsInt() : 1);
1008                         wizardJSON.setReportTitle((rdef != null) ? rdef.getReportTitle() : "");
1009                         wizardJSON.setReportSubTitle((rdef != null) ? rdef.getReportSubTitle() : "");
1010
1011                 }
1012
1013                 ObjectMapper mapper = new ObjectMapper();
1014                 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1015                 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1016
1017                 return wizardJSON;
1018
1019         }
1020
1021         @RequestMapping(value = "/report/wizard/retrieve_data/{validate}", method = RequestMethod.POST)
1022         public @ResponseBody RaptorResponse retrieveDataForGivenQuery(@PathVariable("validate") boolean validate,
1023                         @RequestBody QueryJSON queryJSON, HttpServletRequest request, HttpServletResponse response)
1024                         throws IOException, RaptorException {
1025                 RaptorResponse raptorResponse = new RaptorResponse();
1026                 String sql = queryJSON.getQuery();
1027                 String jsonInString = "";
1028
1029                 ServletContext servletContext = request.getSession().getServletContext();
1030                 if (!Globals.isSystemInitialized()) {
1031                         Globals.initializeSystem(servletContext);
1032                 }
1033
1034                 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1035                 if (rdef == null) {
1036                         ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
1037                         errorJSONRuntime.setErrormessage("Report Definition is not in session;");
1038                         errorJSONRuntime.setStacktrace("");
1039
1040                         ObjectMapper mapper = new ObjectMapper();
1041                         mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1042                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1043
1044                         try {
1045                                 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
1046                                 raptorResponse.data().put("elements", jsonInString);
1047                                 return raptorResponse;
1048                         } catch (Exception ex1) {
1049                                 logger.error(EELFLoggerDelegate.errorLogger,
1050                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex1);
1051                         }
1052                 } else {
1053                         if (!sql.trim().toUpperCase().startsWith("SELECT")) {
1054                                 ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
1055                                 errorJSONRuntime.setErrormessage("Invalid statement - the SQL must start with the keyword SELECT");
1056                                 errorJSONRuntime.setStacktrace("SQL Error");
1057                                 ObjectMapper mapper = new ObjectMapper();
1058                                 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1059                                 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1060
1061                                 try {
1062                                         jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
1063                                         raptorResponse.data().put("elements", jsonInString);
1064                                         return raptorResponse;
1065                                         
1066                                 } catch (Exception ex) {
1067                                         logger.error(EELFLoggerDelegate.errorLogger,
1068                                                         "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1069                                 }
1070                         } else {
1071                                 DataSet ds = null;
1072                                 String remoteDb = request.getParameter("remoteDbPrefix");
1073                                 // comment below two lines to test
1074                                 String remoteDbPrefix = (remoteDb != null && !remoteDb.equalsIgnoreCase("null")) ? remoteDb
1075                                                 : rdef.getDBInfo();
1076                                 String userId = AppUtils.getUserID(request);
1077                                 // String userId = "1";
1078                                 sql = Utils.replaceInString(sql, "[LOGGED_USERID]", userId);
1079                                 sql = Utils.replaceInString(sql, "[USERID]", userId);
1080                                 String[] reqParameters = Globals.getRequestParams().split(",");
1081                                 String[] sessionParameters = Globals.getSessionParams().split(",");
1082                                 javax.servlet.http.HttpSession session = request.getSession();
1083                                 logger.debug(EELFLoggerDelegate.debugLogger, ("B4 testRunSQL " + sql));
1084                                 if (request != null) {
1085                                         for (int i = 0; i < reqParameters.length; i++) {
1086                                                 if (!reqParameters[i].startsWith("ff"))
1087                                                         sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase() + "]",
1088                                                                         request.getParameter(reqParameters[i].toUpperCase()));
1089                                                 else
1090                                                         sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase() + "]",
1091                                                                         request.getParameter(reqParameters[i]));
1092                                         }
1093                                 }
1094                                 if (session != null) {
1095                                         for (int i = 0; i < sessionParameters.length; i++) {
1096                                                 logger.debug(EELFLoggerDelegate.debugLogger, (" Session " + " sessionParameters[i] "
1097                                                                 + sessionParameters[i] + " " + (String) session.getAttribute(sessionParameters[i])));
1098                                                 sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase() + "]",
1099                                                                 (String) session.getAttribute(sessionParameters[i]));
1100                                         }
1101                                 }
1102                                 logger.debug(EELFLoggerDelegate.debugLogger, ("After testRunSQL " + sql));
1103                                 try {
1104
1105                                         response.setContentType("application/json");
1106                                         ds = ConnectionUtils.getDataSet(sql, "local", true);
1107
1108                                         QueryResultJSON queryResultJSON = new QueryResultJSON();
1109                                         queryResultJSON.setQuery(queryJSON.getQuery());
1110                                         String query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1111                                         rdef.parseReportSQL(query);
1112                                         queryResultJSON.setQuery(query);
1113
1114                                         int numColumns = ds.getColumnCount();
1115                                         queryResultJSON.setTotalRows(ds.getRowCount());
1116
1117                                         int count = 0;
1118                                         Map<String, String> dvJSON = null;
1119                                         ArrayList<String> colList = new ArrayList<String>();
1120                                         ArrayList<Map<String, String>> reportDataRows = new ArrayList<Map<String, String>>();
1121                                         if (!ds.isEmpty()) {
1122                                                 count = 0;
1123
1124                                                 for (int i = 0; i < ds.getColumnCount(); i++) {
1125                                                         colList.add(ds.getColumnName(i));
1126                                                 }
1127                                                 queryResultJSON.setReportDataColumns(colList);
1128                                                 if (queryResultJSON.getTotalRows() > 0) {
1129                                                         count = 0;
1130                                                         dvJSON = new HashMap<String, String>();
1131                                                         for (int r = 0; r < Math.min(ds.getRowCount(), 100); r++) {
1132                                                                 dvJSON = new HashMap<String, String>();
1133                                                                 for (int c = 0; c < ds.getColumnCount(); c++) {
1134                                                                         try {
1135                                                                                 dvJSON.put(ds.getColumnName(c), ds.getString(r, c));
1136                                                                         } catch (Exception ex) {
1137                                                                                 logger.error(EELFLoggerDelegate.errorLogger,
1138                                                                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1139                                                                         }
1140                                                                 }
1141                                                                 reportDataRows.add(dvJSON);
1142
1143                                                         }
1144                                                 }
1145
1146                                         }
1147                                         queryResultJSON.setReportDataRows(reportDataRows);
1148                                         ObjectMapper mapper = new ObjectMapper();
1149                                         mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1150                                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1151                                         if (validate) {
1152                                                 query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1153                                                 request.setAttribute("sqlValidated", "N");
1154                                                 rdef.parseReportSQL(query);
1155                                                 request.setAttribute("sqlValidated", "Y");
1156                                                 persistReportDefinition(request, rdef);
1157
1158                                         }
1159                                         try {
1160                                                 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(queryResultJSON);
1161                                                 raptorResponse.data().put("elements", jsonInString);
1162                                                 return raptorResponse;
1163                                                 
1164                                                 
1165                                         } catch (Exception ex) {
1166                                                 logger.error(EELFLoggerDelegate.errorLogger,
1167                                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery]. RaptorException: ", ex);
1168                                         }
1169                                 } catch (ReportSQLException ex) {
1170                                         ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
1171                                         if (sql.contains("[")) {
1172                                                 errorJSONRuntime.setErrormessage(
1173                                                                 "Formfield information is present in the query, hence couldn't execute");
1174                                                 errorJSONRuntime
1175                                                                 .setStacktrace("Formfield information is present in the query, hence couldn't execute");
1176                                                 if (validate) {
1177                                                         String query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1178                                                         request.setAttribute("sqlValidated", "N");
1179                                                         rdef.parseReportSQL(query);
1180                                                         request.setAttribute("sqlValidated", "Y");
1181                                                         persistReportDefinition(request, rdef);
1182
1183                                                 }
1184
1185                                         } else {
1186                                                 errorJSONRuntime.setErrormessage(ex.getMessage());
1187                                                 errorJSONRuntime.setStacktrace(getStackTrace(ex));
1188                                         }
1189                                         ObjectMapper mapper = new ObjectMapper();
1190                                         mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1191                                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1192
1193                                         try {
1194                                                 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
1195                                                 raptorResponse.data().put("elements", jsonInString);
1196                                                 return raptorResponse;
1197                                                 
1198
1199                                         } catch (Exception ex1) {
1200                                                 logger.error(EELFLoggerDelegate.errorLogger,
1201                                                                 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex1);
1202                                         }
1203                                 }
1204                                 if (validate) {
1205                                         String query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1206                                         request.setAttribute("sqlValidated", "N");
1207                                         rdef.parseReportSQL(query);
1208                                         request.setAttribute("sqlValidated", "Y");
1209                                         persistReportDefinition(request, rdef);
1210
1211                                 }
1212
1213                         }
1214                 }
1215                 raptorResponse.data().put("elements", jsonInString);
1216                 return raptorResponse;
1217
1218         }
1219
1220         @RequestMapping(value = "save_chart", method = RequestMethod.POST)
1221         public void reportChartReceive(@RequestBody ChartJSON chartJSON, HttpServletRequest request,
1222                         HttpServletResponse response) throws IOException {
1223                 ReportRuntime reportRuntime;
1224                 reportRuntime = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); // changing
1225                                                                                                                                                                                                                         // session
1226                                                                                                                                                                                                                         // to
1227                                                                                                                                                                                                                         // request
1228                 String reportID = request.getParameter("c_master");
1229                 if (reportRuntime == null && AppUtils.nvl(reportID).length() > 0) {
1230                         try {
1231                                 ReportHandler rh = new ReportHandler();
1232                                 reportRuntime = rh.loadReportRuntime(request, reportID);
1233                         } catch (RaptorException ex) {
1234                                 logger.error(EELFLoggerDelegate.errorLogger,
1235                                                 "[Controller.processRequest]Invalid raptor action [reportChartReceive].", ex);
1236                         }
1237                 }
1238
1239                 if (reportRuntime != null) {
1240                         String chartType = chartJSON.getChartType();
1241                         reportRuntime.setChartType(chartJSON.getChartType());
1242                         reportRuntime.setChartAnimate(chartJSON.isAnimation());
1243                         reportRuntime.setChartWidth(chartJSON.getWidth());
1244                         reportRuntime.setChartHeight(chartJSON.getHeight());
1245                         reportRuntime.setShowChartTitle(chartJSON.isShowTitle());
1246
1247                         String domainAxis = null;
1248                         domainAxis = chartJSON.getDomainAxis();
1249
1250                         List<DataColumnType> reportCols = reportRuntime.getAllColumns();
1251
1252                         for (Iterator<DataColumnType> iter = reportCols.iterator(); iter.hasNext();) {
1253                                 DataColumnType dct = (DataColumnType) iter.next();
1254                                 if (dct.getColId().equals(domainAxis)) {
1255                                         dct.setColOnChart(AppConstants.GC_LEGEND);
1256                                 } else {
1257                                         dct.setColOnChart(null);
1258                                 }
1259                         }
1260
1261                         CategoryAxisJSON categoryAxisJSON = chartJSON.getCategoryAxisJSON();
1262                         String categoryAxis = null;
1263
1264                         categoryAxis = (categoryAxisJSON != null ? categoryAxisJSON.getValue() : "");
1265
1266                         reportCols = reportRuntime.getAllColumns();
1267
1268                         for (Iterator<DataColumnType> iter = reportCols.iterator(); iter.hasNext();) {
1269                                 DataColumnType dct = (DataColumnType) iter.next();
1270                                 if (dct.getColId().equals(categoryAxis)) {
1271                                         dct.setChartSeries(true);
1272                                 } else {
1273                                         dct.setChartSeries(false);
1274                                 }
1275                         }
1276
1277                         ArrayList<RangeAxisJSON> rangeAxisList = chartJSON.getRangeAxisList();
1278                         int r = 0;
1279                         for (int i = 0; i < rangeAxisList.size(); i++) {
1280                                 RangeAxisJSON rangeAxisJSON = rangeAxisList.get(i);
1281                                 String rangeAxis = rangeAxisJSON.getRangeAxis();
1282                                 String rangeYAxis = AppUtils.nvl(rangeAxisJSON.getRangeYAxis());
1283                                 String rangeChartGroup = AppUtils.nvl(rangeAxisJSON.getRangeChartGroup());
1284                                 String rangeColor = AppUtils.nvl(rangeAxisJSON.getRangeColor());
1285                                 String rangeLineType = AppUtils.nvl(rangeAxisJSON.getRangeLineType());
1286
1287                                 rangefor: for (Iterator<DataColumnType> iterator = reportCols.iterator(); iterator.hasNext();) {
1288                                         DataColumnType dct = (DataColumnType) iterator.next();
1289                                         if (dct.getColId().equals(rangeAxis)) {
1290                                                 dct.setChartSeq(++r);
1291                                                 dct.setColOnChart("0");
1292                                                 dct.setYAxis(rangeYAxis); // +"|"+dct.getColId());
1293                                                 dct.setChartGroup(rangeChartGroup); // +"|"+dct.getColId());
1294                                                 dct.setChartColor(rangeColor);
1295                                                 dct.setChartLineType(rangeLineType);
1296
1297                                                 if (chartType.equals(AppConstants.GT_ANNOTATION_CHART)
1298                                                                 || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) {
1299                                                         if (rangeAxisJSON.isShowAsArea()) {
1300                                                                 dct.setIsRangeAxisFilled(true);
1301                                                         } else {
1302                                                                 dct.setIsRangeAxisFilled(false);
1303                                                         }
1304                                                 }
1305                                                 break rangefor;
1306                                         }
1307                                 }
1308
1309                         }
1310
1311                         reportRuntime.setChartLeftAxisLabel(chartJSON.getPrimaryAxisLabel());
1312                         reportRuntime.setChartRightAxisLabel(chartJSON.getSecondaryAxisLabel());
1313
1314                         reportRuntime.setRangeAxisLowerLimit(chartJSON.getMinRange());
1315                         reportRuntime.setRangeAxisUpperLimit(chartJSON.getMaxRange());
1316
1317                         if (chartType.equals(AppConstants.GT_ANNOTATION_CHART)
1318                                         || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) {
1319                                 if (chartJSON.getFlexTimeSeriesChartOptions() != null) {
1320                                         reportRuntime.setZoomIn(chartJSON.getFlexTimeSeriesChartOptions().getZoomIn());
1321                                         reportRuntime.setTimeAxisType(chartJSON.getFlexTimeSeriesChartOptions().getTimeAxisType());
1322                                 }
1323
1324                         }
1325
1326                         if (chartType.equals(AppConstants.GT_TIME_SERIES)) {
1327                                 if (chartJSON.getTimeSeriesChartOptions() != null) {
1328                                         reportRuntime.setTimeSeriesRender(chartJSON.getTimeSeriesChartOptions().getLineChartRenderer());
1329                                         reportRuntime.setShowXAxisLabel(chartJSON.getTimeSeriesChartOptions().isShowXAxisLabel());
1330                                         reportRuntime.setAddXAxisTickers(chartJSON.getTimeSeriesChartOptions().isAddXAxisTicker());
1331                                         reportRuntime.setTimeAxis(chartJSON.getTimeSeriesChartOptions().isNonTimeAxis());
1332                                         reportRuntime.setMultiSeries(chartJSON.getTimeSeriesChartOptions().isMultiSeries());
1333                                 }
1334
1335                         }
1336
1337                         if (chartType.equals(AppConstants.GT_BAR_3D)) {
1338                                 if (chartJSON.getBarChartOptions() != null) {
1339                                         reportRuntime.setChartOrientation(
1340                                                         chartJSON.getBarChartOptions().isVerticalOrientation() ? "vertical" : "horizontal");
1341                                         reportRuntime.setChartStacked(chartJSON.getBarChartOptions().isStackedChart());
1342                                         reportRuntime.setBarControls(chartJSON.getBarChartOptions().isDisplayBarControls());
1343                                         reportRuntime.setXAxisDateType(chartJSON.getBarChartOptions().isxAxisDateType());
1344                                         reportRuntime.setLessXaxisTickers(chartJSON.getBarChartOptions().isMinimizeXAxisTickers());
1345                                         reportRuntime.setTimeAxis(chartJSON.getBarChartOptions().isTimeAxis());
1346                                         reportRuntime.setLogScale(chartJSON.getBarChartOptions().isyAxisLogScale());
1347                                 }
1348                         }
1349
1350                         reportRuntime.setLegendLabelAngle(chartJSON.getCommonChartOptions().getLegendLabelAngle());
1351                         reportRuntime.setLegendPosition(chartJSON.getCommonChartOptions().getLegendPosition());
1352                         reportRuntime.setChartLegendDisplay(chartJSON.getCommonChartOptions().isHideLegend() ? "Y" : "N");
1353                         reportRuntime.setAnimateAnimatedChart(chartJSON.getCommonChartOptions().isAnimateAnimatedChart());
1354
1355                         reportRuntime.setTopMargin(chartJSON.getCommonChartOptions().getTopMargin());
1356                         reportRuntime.setBottomMargin(chartJSON.getCommonChartOptions().getBottomMargin());
1357                         reportRuntime.setLeftMargin(chartJSON.getCommonChartOptions().getLeftMargin());
1358                         reportRuntime.setRightMargin(chartJSON.getCommonChartOptions().getRightMargin());
1359
1360                         for (Iterator<DataColumnType> iterator = reportCols.iterator(); iterator.hasNext();) {
1361                                 DataColumnType dct = (DataColumnType) iterator.next();
1362                                 if (!(AppUtils.nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND)
1363                                                 || (dct.getChartSeq() != null && dct.getChartSeq() > 0) || dct.isChartSeries())) {
1364                                         dct.setChartSeq(-1);
1365                                         dct.setChartColor(null);
1366                                         dct.setColOnChart(null);
1367                                         dct.setCreateInNewChart(false);
1368                                         dct.setChartGroup(null);
1369                                         dct.setYAxis(null);
1370                                 }
1371                         }
1372
1373                         try {
1374                                 reportRuntime.persistLinearReport(request);
1375                         } catch (Exception ex) {
1376                                 logger.error(EELFLoggerDelegate.errorLogger,
1377                                                 "[Controller.processRequest]Invalid raptor action [reportChartReceive].", ex);
1378                         }
1379                 }
1380
1381         }
1382
1383         public String getViewName() {
1384                 return viewName;
1385         }
1386
1387         public void setViewName(String viewName) {
1388                 this.viewName = viewName;
1389         }
1390
1391         public String nvl(String s) {
1392                 return (s == null) ? "" : s;
1393         }
1394
1395         public String nvl(String s, String sDefault) {
1396                 return nvl(s).equals("") ? sDefault : s;
1397         }
1398
1399         public static String getStackTrace(Throwable aThrowable) {
1400                 Writer result = new StringWriter();
1401                 PrintWriter printWriter = new PrintWriter(result);
1402                 aThrowable.printStackTrace(printWriter);
1403                 return result.toString();
1404         }
1405
1406         public void persistReportDefinition(HttpServletRequest request, ReportDefinition rdef) throws RaptorException {
1407                 ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
1408                 if (rr != null && rr.getReportID().equals(rdef.getReportID()))
1409                         request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
1410                 rdef.persistReport(request);
1411         } // persistReportDefinition
1412
1413         // Remove from session
1414         private void removeVariablesFromSession(HttpServletRequest request) {
1415                 HttpSession session = request.getSession();
1416                 session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
1417                 session.removeAttribute(AppConstants.DRILLDOWN_INDEX);
1418                 session.removeAttribute(AppConstants.FORM_DRILLDOWN_INDEX);
1419                 session.removeAttribute(AppConstants.SI_BACKUP_FOR_REP_ID);
1420                 session.removeAttribute(AppConstants.SI_COLUMN_LOOKUP);
1421                 session.removeAttribute(AppConstants.SI_DASHBOARD_REP_ID);
1422                 session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP);
1423                 session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME);
1424                 session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP);
1425                 session.removeAttribute(AppConstants.SI_DASHBOARD_CHARTDATA_MAP);
1426                 session.removeAttribute(AppConstants.SI_DASHBOARD_DISPLAYTYPE_MAP);
1427                 session.removeAttribute(AppConstants.SI_DATA_SIZE_FOR_TEXTFIELD_POPUP);
1428                 session.removeAttribute(AppConstants.SI_MAP);
1429                 session.removeAttribute(AppConstants.SI_MAP_OBJECT);
1430                 session.removeAttribute(AppConstants.SI_REPORT_DEFINITION);
1431                 session.removeAttribute(AppConstants.SI_REPORT_RUNTIME);
1432                 session.removeAttribute(AppConstants.SI_REPORT_RUN_BACKUP);
1433                 session.removeAttribute(AppConstants.SI_REPORT_SCHEDULE);
1434                 session.removeAttribute(AppConstants.RI_REPORT_DATA);
1435                 session.removeAttribute(AppConstants.RI_CHART_DATA);
1436                 session.removeAttribute(AppConstants.SI_FORMFIELD_INFO);
1437                 session.removeAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
1438                 session.removeAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP);
1439                 session.removeAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP);
1440                 Enumeration<String> enum1 = session.getAttributeNames();
1441                 String attributeName = "";
1442                 while (enum1.hasMoreElements()) {
1443                         attributeName = enum1.nextElement();
1444                         if (attributeName.startsWith("parent_")) {
1445                                 session.removeAttribute(attributeName);
1446                         }
1447                 }
1448         }
1449
1450 }