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