2 * ================================================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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 * ================================================================================
20 package org.openecomp.portalsdk.analytics.system.fusion.web;
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;
36 import java.util.Vector;
38 import javax.servlet.ServletContext;
39 import javax.servlet.http.HttpServletRequest;
40 import javax.servlet.http.HttpServletResponse;
41 import javax.servlet.http.HttpSession;
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;
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;
106 public class RaptorControllerAsync extends RestrictedBaseController {
108 private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RaptorControllerAsync.class);
110 private String viewName;
112 @RequestMapping(value = { "/raptor.htm" }, method = RequestMethod.GET)
113 public void RaptorSearch(HttpServletRequest request, HttpServletResponse response)
114 throws IOException, RaptorException {
117 String actionKey = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));
118 actionKey = nvl(actionKey, "report.run");
120 HttpSession session = request.getSession();
121 User user = UserUtils.getUserSession(request);
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);
131 ReportRuntime rr = null;
132 ReportData rd = null;
135 if (!nvl(request.getParameter("parent"), "").equals("N"))
136 parent = nvl(request.getParameter("parent"), "");
137 if (parent.startsWith("parent_"))
139 if (parentFlag == 1) {
140 rr = (ReportRuntime) request.getSession().getAttribute(parent + "_rr");
141 rd = (ReportData) request.getSession().getAttribute(parent + "_rd");
144 boolean isEmbedded = false;
145 Object temp = request.getSession().getAttribute("isEmbedded");
147 isEmbedded = (boolean) temp;
150 String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
152 rr = (ReportRuntime) ((HashMap) request.getSession()
153 .getAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP)).get(reportID);
155 rd = (ReportData) ((HashMap) request.getSession()
156 .getAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP)).get(reportID);
159 rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
161 rd = (ReportData) request.getSession().getAttribute(AppConstants.RI_REPORT_DATA);
163 String user_id = AppUtils.getUserID(request);
164 int downloadLimit = 0;
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);
173 OutputStreamWriter out = new OutputStreamWriter(response.getOutputStream());
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
184 new ReportHandler().createExcel2007FileContent(out, rd, rr, request, response, user_id, 3); // 3
187 } catch (Exception e) {
188 logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action ["
189 + actionKey + "].", e);
192 response.sendRedirect("login.htm");
195 if (session != null && user != null) {
196 Action action = null;
197 ServletContext servletContext = request.getSession().getServletContext();
198 if (!Globals.isSystemInitialized()) {
199 Globals.initializeSystem(servletContext);
202 action = Globals.getRaptorActionMapping().getAction(actionKey);
204 throw new RaptorRuntimeException("Action not found");
205 } catch (RaptorException e) {
206 logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action ["
207 + actionKey + "].", e);
209 viewName = (new ErrorHandler()).processFatalErrorJSON(request,
210 new RaptorRuntimeException("[Controller.processRequest]Invalid raptor action [" + actionKey
211 + "]. Exception: " + e.getMessage()));
215 Class[] paramTypes = new Class[2];
216 paramTypes[0] = Class.forName("javax.servlet.http.HttpServletRequest");
217 paramTypes[1] = Class.forName("java.lang.String");
219 Class handlerClass = Class.forName(action.getControllerClass());
220 Object handler = handlerClass.newInstance();
221 Method handlerMethod = handlerClass.getMethod(action.getControllerMethod(), paramTypes);
223 Object[] paramValues = new Object[2];
224 paramValues[0] = request;
225 paramValues[1] = action.getJspName();
228 viewName = (String) handlerMethod.invoke(handler, paramValues);
229 if (!actionKey.equals("chart.run"))
230 response.setContentType("application/json");
232 response.setContentType("text/html");
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: "
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: "
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: "
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: "
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: "
270 PrintWriter out = response.getWriter();
274 PrintWriter out = response.getWriter();
275 out.write("session has timed out for user");
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();
289 for (DataColumnType reportColumnType : reportColumnList) {
290 columnJSON = new ColumnJSON();
291 columnJSON.setId(reportColumnType.getColId());
292 columnJSON.setName(reportColumnType.getColName());
293 listJSON.add(columnJSON);
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));
308 ArrayList<ColumnJSON> listJSON = new ArrayList<ColumnJSON>();
309 ColumnJSON columnJSON = new ColumnJSON();
311 ServletContext servletContext = request.getSession().getServletContext();
312 if (!Globals.isSystemInitialized()) {
313 Globals.initializeSystem(servletContext);
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);
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);
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);
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);
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);
372 List<DataColumnType> reportColumnList = ddRr.getAllColumns();
373 ArrayList<ColumnJSON> listJSON = new ArrayList<ColumnJSON>();
374 ColumnJSON columnJSON = new ColumnJSON();
376 for (DataColumnType reportColumnType : reportColumnList) {
377 columnJSON = new ColumnJSON();
378 columnJSON.setId(reportColumnType.getColId());
379 columnJSON.setName(reportColumnType.getColName());
380 listJSON.add(columnJSON);
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();
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);
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();
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.");
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: "
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();
438 String reportXML = importJSON.getReportXML();
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();
447 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
449 messageJSON.setMessage("Success- Report imported.");
450 messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
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));
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);
470 MessageJSON messageJSON = new MessageJSON();
474 String fieldId = formEditJSON.getFieldId();
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());
487 // clear predefined value
488 if (fft.getPredefinedValueList() != null) {
489 for (Iterator<String> iter = fft.getPredefinedValueList().getPredefinedValue().iterator(); iter
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());
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.");
513 messageJSON.setMessage("Report Definition is not in session");
514 messageJSON.setAnyStacktrace("Report Definition is not in session");
517 } catch (Exception ex) {
518 messageJSON.setMessage("Error occured while formfield details Tab");
519 messageJSON.setAnyStacktrace(getStackTrace(ex));
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);
532 MessageJSON messageJSON = new MessageJSON();
536 String colId = columnEditJSON.getColId();
537 List<DataColumnType> reportColumnList = rdef.getAllColumns();
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());
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.");
559 messageJSON.setMessage("Report Definition is not in session");
560 messageJSON.setAnyStacktrace("");
563 } catch (Exception ex) {
564 messageJSON.setMessage("Error occured while saving column details Tab");
565 messageJSON.setAnyStacktrace(getStackTrace(ex));
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();
583 if (id.equals("InSession")) {
584 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
587 } else if (id.equals("Create")) {
588 removeVariablesFromSession(request);
589 rdef = (new ReportHandler()).loadReportDefinition(request, "-1");
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 ");
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);
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);
616 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
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);
628 String reportDescr = definitionJSON.getReportDescr();
629 rdef.setReportDescr(reportDescr);
631 String formHelpText = definitionJSON.getFormHelpText();
632 rdef.setFormHelpText(formHelpText);
634 Integer pageSize = definitionJSON.getPageSize();
635 rdef.setPageSize(pageSize);
637 List<IdNameBooleanJSON> menuIds = definitionJSON.getDisplayArea();
638 for (IdNameBooleanJSON menuId : menuIds) {
639 if (menuId.isSelected()) {
640 rdef.setMenuID(menuId.getName());
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);
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');
687 rdef.setDisplayOptions(displayOptionStr.toString());
689 if (id.equals("Create")) {
690 rdef.persistReport(request);
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."));
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);
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;
715 String detailId = "";
716 FormEditJSON wizardJSON = new FormEditJSON();
717 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
719 if (pathVariables.containsKey("id")) {
720 id = pathVariables.get("id");
722 if (pathVariables.containsKey("action")) {
723 action = pathVariables.get("action");
726 ServletContext servletContext = request.getSession().getServletContext();
727 if (!Globals.isSystemInitialized()) {
728 Globals.initializeSystem(servletContext);
730 wizardJSON.setTabId("FormEdit");
731 wizardJSON.setTabName("Form Edit");
732 FormFieldType currField = null;
734 if (id.equals("add")) {
736 currField = rdef.addFormFieldType(new ObjectFactory(), "", "", "", "", "", "", "", "", null, null, "",
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);
748 } else if (action.equals("delete")) {
749 rdef.deleteFormField(id);
750 persistReportDefinition(request, rdef);
751 wizardJSON.setMessage("Formfield " + detailId + " Deleted");
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());
765 PredefinedValueList preDefined = fft.getPredefinedValueList();
767 if (preDefined != null) {
768 List<IdNameBooleanJSON> preDefinedList = new ArrayList<IdNameBooleanJSON>();
769 IdNameBooleanJSON idNameBooleanJSON = new IdNameBooleanJSON();
771 for (String v : preDefined.getPredefinedValue()) {
772 idNameBooleanJSON = new IdNameBooleanJSON();
773 idNameBooleanJSON.setId(v);
774 idNameBooleanJSON.setName(v);
775 preDefinedList.add(idNameBooleanJSON);
777 wizardJSON.setPredefinedValueList(preDefinedList);
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));
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;
801 ColumnEditJSON wizardJSON = new ColumnEditJSON();
802 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
804 if (pathVariables.containsKey("id")) {
805 id = pathVariables.get("id");
807 ServletContext servletContext = request.getSession().getServletContext();
808 if (!Globals.isSystemInitialized()) {
809 Globals.initializeSystem(servletContext);
812 wizardJSON.setTabId("ColEdit");
813 wizardJSON.setTabName("Column Edit");
815 List<DataColumnType> reportColumnList = rdef.getAllColumns();
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());
836 wizardJSON.setErrorMessage("Report is not in session");
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;
849 String detailId = "";
850 QueryJSON wizardJSON = new QueryJSON();
852 if (pathVariables.containsKey("id")) {
853 id = pathVariables.get("id");
855 if (pathVariables.containsKey("detailId")) {
856 detailId = pathVariables.get("detailId");
858 ServletContext servletContext = request.getSession().getServletContext();
859 if (!Globals.isSystemInitialized()) {
860 Globals.initializeSystem(servletContext);
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);
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);
883 wizardJSON.setTabId("Sql");
884 wizardJSON.setTabName("Sql");
885 wizardJSON.setQuery(rdef.getReportSQL());
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";
900 if (pathVariables.containsKey("id")) {
901 id = pathVariables.get("id");
903 String detailId = "";
904 if (pathVariables.containsKey("detailId")) {
905 detailId = pathVariables.get("detailId");
908 ServletContext servletContext = request.getSession().getServletContext();
909 if (!Globals.isSystemInitialized()) {
910 Globals.initializeSystem(servletContext);
913 if (tabId.equals("Def") && id.equals("InSession")) {
914 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
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);
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);
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);
944 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
946 DefinitionJSON wizardJSON = new DefinitionJSON();
947 if (tabId.equals("Def")) {
948 wizardJSON.setTabId("Def");
949 wizardJSON.setTabName("Definition");
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();
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);
969 displayArea.add(idNameJSON);
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);
985 nameBooleanJSON = new NameBooleanJSON();
986 nameBooleanJSON.setName("HideChart");
987 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideChart() : false);
988 displayOptions.add(nameBooleanJSON);
990 nameBooleanJSON = new NameBooleanJSON();
991 nameBooleanJSON.setName("HideReportData");
992 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideData() : false);
993 displayOptions.add(nameBooleanJSON);
995 nameBooleanJSON = new NameBooleanJSON();
996 nameBooleanJSON.setName("HideExcel");
997 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideExcelIcons() : false);
998 displayOptions.add(nameBooleanJSON);
1000 nameBooleanJSON = new NameBooleanJSON();
1001 nameBooleanJSON.setName("HidePdf");
1002 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHidePDFIcons() : false);
1003 displayOptions.add(nameBooleanJSON);
1005 wizardJSON.setDisplayOptions(displayOptions);
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() : "");
1014 ObjectMapper mapper = new ObjectMapper();
1015 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1016 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
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 = "";
1030 ServletContext servletContext = request.getSession().getServletContext();
1031 if (!Globals.isSystemInitialized()) {
1032 Globals.initializeSystem(servletContext);
1035 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1037 ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
1038 errorJSONRuntime.setErrormessage("Report Definition is not in session;");
1039 errorJSONRuntime.setStacktrace("");
1041 ObjectMapper mapper = new ObjectMapper();
1042 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1043 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
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);
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);
1063 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
1064 raptorResponse.data().put("elements", jsonInString);
1065 return raptorResponse;
1067 } catch (Exception ex) {
1068 logger.error(EELFLoggerDelegate.errorLogger,
1069 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1073 String remoteDb = request.getParameter("remoteDbPrefix");
1074 // comment below two lines to test
1075 String remoteDbPrefix = (remoteDb != null && !remoteDb.equalsIgnoreCase("null")) ? remoteDb
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()));
1091 sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase() + "]",
1092 request.getParameter(reqParameters[i]));
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]));
1103 logger.debug(EELFLoggerDelegate.debugLogger, ("After testRunSQL " + sql));
1106 response.setContentType("application/json");
1107 ds = ConnectionUtils.getDataSet(sql, "local", true);
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);
1115 int numColumns = ds.getColumnCount();
1116 queryResultJSON.setTotalRows(ds.getRowCount());
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()) {
1125 for (int i = 0; i < ds.getColumnCount(); i++) {
1126 colList.add(ds.getColumnName(i));
1128 queryResultJSON.setReportDataColumns(colList);
1129 if (queryResultJSON.getTotalRows() > 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++) {
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);
1142 reportDataRows.add(dvJSON);
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);
1153 query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1154 request.setAttribute("sqlValidated", "N");
1155 rdef.parseReportSQL(query);
1156 request.setAttribute("sqlValidated", "Y");
1157 persistReportDefinition(request, rdef);
1161 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(queryResultJSON);
1162 raptorResponse.data().put("elements", jsonInString);
1163 return raptorResponse;
1166 } catch (Exception ex) {
1167 logger.error(EELFLoggerDelegate.errorLogger,
1168 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery]. RaptorException: ", ex);
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");
1176 .setStacktrace("Formfield information is present in the query, hence couldn't execute");
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);
1187 errorJSONRuntime.setErrormessage(ex.getMessage());
1188 errorJSONRuntime.setStacktrace(getStackTrace(ex));
1190 ObjectMapper mapper = new ObjectMapper();
1191 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1192 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1195 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
1196 raptorResponse.data().put("elements", jsonInString);
1197 return raptorResponse;
1200 } catch (Exception ex1) {
1201 logger.error(EELFLoggerDelegate.errorLogger,
1202 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex1);
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);
1216 raptorResponse.data().put("elements", jsonInString);
1217 return raptorResponse;
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
1229 String reportID = request.getParameter("c_master");
1230 if (reportRuntime == null && AppUtils.nvl(reportID).length() > 0) {
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);
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());
1248 String domainAxis = null;
1249 domainAxis = chartJSON.getDomainAxis();
1251 List<DataColumnType> reportCols = reportRuntime.getAllColumns();
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);
1258 dct.setColOnChart(null);
1262 CategoryAxisJSON categoryAxisJSON = chartJSON.getCategoryAxisJSON();
1263 String categoryAxis = null;
1265 categoryAxis = (categoryAxisJSON != null ? categoryAxisJSON.getValue() : "");
1267 reportCols = reportRuntime.getAllColumns();
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);
1274 dct.setChartSeries(false);
1278 ArrayList<RangeAxisJSON> rangeAxisList = chartJSON.getRangeAxisList();
1280 HashSet<String> removeRangeAxisMap = new HashSet<>();
1281 for(RangeAxisJSON rangeAxis:chartJSON.getRangeAxisRemoveList()){
1282 removeRangeAxisMap.add(rangeAxis.getRangeAxis());
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());
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
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);
1305 if (chartType.equals(AppConstants.GT_ANNOTATION_CHART)
1306 || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) {
1307 if (rangeAxisJSON.isShowAsArea()) {
1308 dct.setIsRangeAxisFilled(true);
1310 dct.setIsRangeAxisFilled(false);
1319 reportRuntime.setChartLeftAxisLabel(chartJSON.getPrimaryAxisLabel());
1320 reportRuntime.setChartRightAxisLabel(chartJSON.getSecondaryAxisLabel());
1322 reportRuntime.setRangeAxisLowerLimit(chartJSON.getMinRange());
1323 reportRuntime.setRangeAxisUpperLimit(chartJSON.getMaxRange());
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());
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());
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());
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());
1363 reportRuntime.setTopMargin(chartJSON.getCommonChartOptions().getTopMargin());
1364 reportRuntime.setBottomMargin(chartJSON.getCommonChartOptions().getBottomMargin());
1365 reportRuntime.setLeftMargin(chartJSON.getCommonChartOptions().getLeftMargin());
1366 reportRuntime.setRightMargin(chartJSON.getCommonChartOptions().getRightMargin());
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);
1382 reportRuntime.persistLinearReport(request);
1383 } catch (Exception ex) {
1384 logger.error(EELFLoggerDelegate.errorLogger,
1385 "[Controller.processRequest]Invalid raptor action [reportChartReceive].", ex);
1391 public String getViewName() {
1395 public void setViewName(String viewName) {
1396 this.viewName = viewName;
1399 public String nvl(String s) {
1400 return (s == null) ? "" : s;
1403 public String nvl(String s, String sDefault) {
1404 return nvl(s).equals("") ? sDefault : s;
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();
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
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);