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.Iterator;
33 import java.util.List;
35 import java.util.Vector;
37 import javax.servlet.ServletContext;
38 import javax.servlet.http.HttpServletRequest;
39 import javax.servlet.http.HttpServletResponse;
40 import javax.servlet.http.HttpSession;
42 import org.openecomp.portalsdk.analytics.controller.Action;
43 import org.openecomp.portalsdk.analytics.controller.ErrorHandler;
44 import org.openecomp.portalsdk.analytics.error.RaptorException;
45 import org.openecomp.portalsdk.analytics.error.RaptorRuntimeException;
46 import org.openecomp.portalsdk.analytics.error.ReportSQLException;
47 import org.openecomp.portalsdk.analytics.model.DataCache;
48 import org.openecomp.portalsdk.analytics.model.ReportHandler;
49 import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
50 import org.openecomp.portalsdk.analytics.model.definition.ReportDefinition;
51 import org.openecomp.portalsdk.analytics.model.definition.wizard.ColumnEditJSON;
52 import org.openecomp.portalsdk.analytics.model.definition.wizard.ColumnJSON;
53 import org.openecomp.portalsdk.analytics.model.definition.wizard.DefinitionJSON;
54 import org.openecomp.portalsdk.analytics.model.definition.wizard.FormEditJSON;
55 import org.openecomp.portalsdk.analytics.model.definition.wizard.IdNameBooleanJSON;
56 import org.openecomp.portalsdk.analytics.model.definition.wizard.ImportJSON;
57 import org.openecomp.portalsdk.analytics.model.definition.wizard.MessageJSON;
58 import org.openecomp.portalsdk.analytics.model.definition.wizard.NameBooleanJSON;
59 import org.openecomp.portalsdk.analytics.model.definition.wizard.QueryJSON;
60 import org.openecomp.portalsdk.analytics.model.definition.wizard.QueryResultJSON;
61 import org.openecomp.portalsdk.analytics.model.definition.wizard.RaptorResponse;
62 import org.openecomp.portalsdk.analytics.model.definition.wizard.SearchFieldJSON;
63 import org.openecomp.portalsdk.analytics.model.definition.wizard.WizardJSON;
64 import org.openecomp.portalsdk.analytics.model.pdf.PdfReportHandler;
65 import org.openecomp.portalsdk.analytics.model.runtime.CategoryAxisJSON;
66 import org.openecomp.portalsdk.analytics.model.runtime.ChartJSON;
67 import org.openecomp.portalsdk.analytics.model.runtime.ErrorJSONRuntime;
68 import org.openecomp.portalsdk.analytics.model.runtime.FormField;
69 import org.openecomp.portalsdk.analytics.model.runtime.RangeAxisJSON;
70 import org.openecomp.portalsdk.analytics.model.runtime.ReportFormFields;
71 import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
72 import org.openecomp.portalsdk.analytics.system.AppUtils;
73 import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
74 import org.openecomp.portalsdk.analytics.system.Globals;
75 import org.openecomp.portalsdk.analytics.util.AppConstants;
76 import org.openecomp.portalsdk.analytics.util.DataSet;
77 import org.openecomp.portalsdk.analytics.util.Utils;
78 import org.openecomp.portalsdk.analytics.util.XSSFilter;
79 import org.openecomp.portalsdk.analytics.view.ReportData;
80 import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
81 import org.openecomp.portalsdk.analytics.xmlobj.FormFieldType;
82 import org.openecomp.portalsdk.analytics.xmlobj.ObjectFactory;
83 import org.openecomp.portalsdk.analytics.xmlobj.PredefinedValueList;
84 import org.openecomp.portalsdk.core.controller.RestrictedBaseController;
85 import org.openecomp.portalsdk.core.domain.User;
86 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
87 import org.openecomp.portalsdk.core.web.support.UserUtils;
88 import org.springframework.stereotype.Controller;
89 import org.springframework.web.bind.annotation.PathVariable;
90 import org.springframework.web.bind.annotation.RequestBody;
91 import org.springframework.web.bind.annotation.RequestMapping;
92 import org.springframework.web.bind.annotation.RequestMethod;
93 import org.springframework.web.bind.annotation.ResponseBody;
94 import org.springframework.web.context.request.async.DeferredResult;
96 import com.fasterxml.jackson.core.JsonFactory;
97 import com.fasterxml.jackson.core.JsonParser;
98 import com.fasterxml.jackson.databind.DeserializationFeature;
99 import com.fasterxml.jackson.databind.JsonNode;
100 import com.fasterxml.jackson.databind.ObjectMapper;
101 import com.fasterxml.jackson.databind.SerializationFeature;
105 public class RaptorControllerAsync extends RestrictedBaseController {
107 private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RaptorControllerAsync.class);
109 private String viewName;
111 @RequestMapping(value = { "/raptor.htm" }, method = RequestMethod.GET)
112 public void RaptorSearch(HttpServletRequest request, HttpServletResponse response)
113 throws IOException, RaptorException {
116 String actionKey = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));
117 actionKey = nvl(actionKey, "report.run");
119 HttpSession session = request.getSession();
120 User user = UserUtils.getUserSession(request);
122 if (actionKey.equals("report.download.excel2007.session") || actionKey.equals("report.download.csv.session")
123 || actionKey.equals("report.download.excel.session")
124 || actionKey.equals("report.download.pdf.session")) {
125 if (session != null && user != null) {
126 ServletContext servletContext = request.getSession().getServletContext();
127 if (!Globals.isSystemInitialized()) {
128 Globals.initializeSystem(servletContext);
130 ReportRuntime rr = null;
131 ReportData rd = null;
134 if (!nvl(request.getParameter("parent"), "").equals("N"))
135 parent = nvl(request.getParameter("parent"), "");
136 if (parent.startsWith("parent_"))
138 if (parentFlag == 1) {
139 rr = (ReportRuntime) request.getSession().getAttribute(parent + "_rr");
140 rd = (ReportData) request.getSession().getAttribute(parent + "_rd");
143 boolean isEmbedded = false;
144 Object temp = request.getSession().getAttribute("isEmbedded");
146 isEmbedded = (boolean) temp;
149 String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
151 rr = (ReportRuntime) ((HashMap) request.getSession()
152 .getAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP)).get(reportID);
154 rd = (ReportData) ((HashMap) request.getSession()
155 .getAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP)).get(reportID);
158 rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
160 rd = (ReportData) request.getSession().getAttribute(AppConstants.RI_REPORT_DATA);
162 String user_id = AppUtils.getUserID(request);
163 int downloadLimit = 0;
165 downloadLimit = (rr.getMaxRowsInExcelDownload() > 0) ? rr.getMaxRowsInExcelDownload()
166 : Globals.getDownloadLimit();
167 if (actionKey.equals("report.csv.download"))
168 downloadLimit = Globals.getCSVDownloadLimit();
169 String sql_whole = rr.getReportDataSQL(user_id, downloadLimit, request);
170 request.setAttribute(AppConstants.RI_REPORT_SQL_WHOLE, sql_whole);
172 OutputStreamWriter out = new OutputStreamWriter(response.getOutputStream());
174 if (actionKey.equals("report.download.pdf.session")) {
175 new PdfReportHandler().createPdfFileContent(request, response, 3);
176 } else if (actionKey.equals("report.download.csv.session")) {
177 (new ReportHandler()).createCSVFileContent(out, rd, rr, request, response);
178 } else if (actionKey.equals("report.download.excel.session")) {
179 new ReportHandler().createExcelFileContent(out, rd, rr, request, response, user_id, 3); // 3
183 new ReportHandler().createExcel2007FileContent(out, rd, rr, request, response, user_id, 3); // 3
186 } catch (Exception e) {
187 logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action ["
188 + actionKey + "].", e);
191 response.sendRedirect("login.htm");
194 if (session != null && user != null) {
195 Action action = null;
196 ServletContext servletContext = request.getSession().getServletContext();
197 if (!Globals.isSystemInitialized()) {
198 Globals.initializeSystem(servletContext);
201 action = Globals.getRaptorActionMapping().getAction(actionKey);
203 throw new RaptorRuntimeException("Action not found");
204 } catch (RaptorException e) {
205 logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action ["
206 + actionKey + "].", e);
208 viewName = (new ErrorHandler()).processFatalErrorJSON(request,
209 new RaptorRuntimeException("[Controller.processRequest]Invalid raptor action [" + actionKey
210 + "]. Exception: " + e.getMessage()));
214 Class[] paramTypes = new Class[2];
215 paramTypes[0] = Class.forName("javax.servlet.http.HttpServletRequest");
216 paramTypes[1] = Class.forName("java.lang.String");
218 Class handlerClass = Class.forName(action.getControllerClass());
219 Object handler = handlerClass.newInstance();
220 Method handlerMethod = handlerClass.getMethod(action.getControllerMethod(), paramTypes);
222 Object[] paramValues = new Object[2];
223 paramValues[0] = request;
224 paramValues[1] = action.getJspName();
227 viewName = (String) handlerMethod.invoke(handler, paramValues);
228 if (!actionKey.equals("chart.run"))
229 response.setContentType("application/json");
231 response.setContentType("text/html");
233 } catch (ClassNotFoundException e) {
234 logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
235 + actionKey + "]. ClassNotFoundException: " + e.getMessage()));
236 viewName = (new ErrorHandler()).processFatalErrorJSON(request,
237 new RaptorRuntimeException(
238 "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
240 } catch (IllegalAccessException e) {
241 logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
242 + actionKey + "]. IllegalAccessException: " + e.getMessage()));
243 viewName = (new ErrorHandler()).processFatalErrorJSON(request,
244 new RaptorRuntimeException(
245 "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
247 } catch (InstantiationException e) {
248 logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
249 + actionKey + "]. InstantiationException: " + e.getMessage()));
250 viewName = (new ErrorHandler()).processFatalErrorJSON(request,
251 new RaptorRuntimeException(
252 "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
254 } catch (NoSuchMethodException e) {
255 logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
256 + actionKey + "]. NoSuchMethodException: " + e.getMessage()));
257 viewName = (new ErrorHandler()).processFatalErrorJSON(request,
258 new RaptorRuntimeException(
259 "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
261 } catch (InvocationTargetException e) {
262 logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action ["
263 + actionKey + "]. InvocationTargetException: " + e.getMessage()));
264 viewName = (new ErrorHandler()).processFatalErrorJSON(request,
265 new RaptorRuntimeException(
266 "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
269 PrintWriter out = response.getWriter();
273 PrintWriter out = response.getWriter();
274 out.write("session has timed out for user");
280 @RequestMapping(value = "/report/wizard/list_columns", method = RequestMethod.GET, produces = "application/json")
281 public @ResponseBody ArrayList<ColumnJSON> listColumns(HttpServletRequest request, HttpServletResponse response)
282 throws IOException, RaptorException {
283 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
284 List<DataColumnType> reportColumnList = rdef.getAllColumns();
285 ArrayList<ColumnJSON> listJSON = new ArrayList<ColumnJSON>();
286 ColumnJSON columnJSON = new ColumnJSON();
288 for (DataColumnType reportColumnType : reportColumnList) {
289 columnJSON = new ColumnJSON();
290 columnJSON.setId(reportColumnType.getColId());
291 columnJSON.setName(reportColumnType.getColName());
292 listJSON.add(columnJSON);
297 @RequestMapping(value = "/report/wizard/list_drilldown_reports", method = RequestMethod.GET, produces = "application/json")
298 public @ResponseBody ArrayList<ColumnJSON> list_drilldown_reports(HttpServletRequest request,
299 HttpServletResponse response) throws IOException, RaptorException {
300 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
301 Vector<IdNameValue> publicReportIdNames = DataCache.getPublicReportIdNames();
302 Vector groupReportIdNames = DataCache.getGroupAccessibleReportIdNames(AppUtils.getUserID(request),
303 AppUtils.getUserRoles(request));
304 Vector privateReportIdNames = DataCache.getPrivateAccessibleReportIdNames(AppUtils.getUserID(request),
305 AppUtils.getUserRoles(request));
307 ArrayList<ColumnJSON> listJSON = new ArrayList<ColumnJSON>();
308 ColumnJSON columnJSON = new ColumnJSON();
310 ServletContext servletContext = request.getSession().getServletContext();
311 if (!Globals.isSystemInitialized()) {
312 Globals.initializeSystem(servletContext);
315 for (int i = 0; i < publicReportIdNames.size(); i++) {
316 IdNameValue reportIdName = (IdNameValue) publicReportIdNames.get(i);
317 columnJSON = new ColumnJSON();
318 columnJSON.setId(reportIdName.getId());
319 columnJSON.setName("Public Report: " + reportIdName.getName());
320 if (!rdef.getReportID().equals(reportIdName.getId()))
321 listJSON.add(columnJSON);
324 for (int i = 0; i < groupReportIdNames.size(); i++) {
325 IdNameValue reportIdName = (IdNameValue) groupReportIdNames.get(i);
326 columnJSON = new ColumnJSON();
327 columnJSON.setId(reportIdName.getId());
328 columnJSON.setName("Group Report: " + reportIdName.getName());
329 if (!rdef.getReportID().equals(reportIdName.getId()))
330 listJSON.add(columnJSON);
333 for (int i = 0; i < privateReportIdNames.size(); i++) {
334 IdNameValue reportIdName = (IdNameValue) privateReportIdNames.get(i);
335 columnJSON = new ColumnJSON();
336 columnJSON.setId(reportIdName.getId());
337 columnJSON.setName("Private Report: " + reportIdName.getName());
338 if (!rdef.getReportID().equals(reportIdName.getId()))
339 listJSON.add(columnJSON);
345 @RequestMapping(value = "/report/wizard/list_formfields", method = RequestMethod.GET, produces = "application/json")
346 public @ResponseBody ArrayList<SearchFieldJSON> listFormFields(HttpServletRequest request,
347 HttpServletResponse response) throws IOException, RaptorException {
348 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
349 ArrayList<SearchFieldJSON> listJSON = new ArrayList<SearchFieldJSON>();
350 SearchFieldJSON fieldJSON = new SearchFieldJSON();
351 if (rdef.getFormFieldList() != null) {
352 for (Iterator iter = rdef.getFormFieldList().getFormField().iterator(); iter.hasNext();) {
353 fieldJSON = new SearchFieldJSON();
354 FormFieldType fft = (FormFieldType) iter.next();
355 String fieldId = fft.getFieldId();
356 String fieldDisplay = fft.getFieldName();
357 fieldJSON.setId(fieldId);
358 fieldJSON.setName(fieldDisplay);
359 listJSON.add(fieldJSON);
366 @RequestMapping(value = "/report/wizard/list_child_report_col/{reportID}", method = RequestMethod.GET, produces = "application/json")
367 public @ResponseBody ArrayList<ColumnJSON> listChildReportCols(@PathVariable("reportID") String reportID,
368 HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
369 ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, reportID, false);
371 List<DataColumnType> reportColumnList = ddRr.getAllColumns();
372 ArrayList<ColumnJSON> listJSON = new ArrayList<ColumnJSON>();
373 ColumnJSON columnJSON = new ColumnJSON();
375 for (DataColumnType reportColumnType : reportColumnList) {
376 columnJSON = new ColumnJSON();
377 columnJSON.setId(reportColumnType.getColId());
378 columnJSON.setName(reportColumnType.getColName());
379 listJSON.add(columnJSON);
384 @RequestMapping(value = "/report/wizard/list_child_report_ff/{reportID}", method = RequestMethod.GET, produces = "application/json")
385 public @ResponseBody ArrayList<SearchFieldJSON> listChildReportFormFields(@PathVariable("reportID") String reportID,
386 HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
387 ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, reportID, false);
388 ArrayList<SearchFieldJSON> listJSON = new ArrayList<SearchFieldJSON>();
389 SearchFieldJSON fieldJSON = new SearchFieldJSON();
391 ReportFormFields ddReportFormFields = ddRr.getReportFormFields();
392 if (ddReportFormFields != null) {
393 for (ddReportFormFields.resetNext(); ddReportFormFields.hasNext();) {
394 FormField ff = ddReportFormFields.getNext();
395 if (!ff.getFieldType().equals(FormField.FFT_BLANK)) {
396 fieldJSON = new SearchFieldJSON();
397 fieldJSON.setId(ff.getFieldName());
398 fieldJSON.setName(ff.getFieldDisplayName());
399 listJSON.add(fieldJSON);
406 @RequestMapping(value = "report/wizard/copy_report/{reportID}", method = RequestMethod.GET, produces = "application/json")
407 public @ResponseBody MessageJSON copyReport(@PathVariable("reportID") String reportID, HttpServletRequest request,
408 HttpServletResponse response) throws IOException, RaptorException {
409 MessageJSON messageJSON = new MessageJSON();
412 ReportHandler rh = new ReportHandler();
413 ReportDefinition rdef = rh.loadReportDefinition(request, reportID);
414 rdef.setAsCopy(request);
415 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
416 messageJSON.setMessage("Success- Report Copied.");
417 messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
419 } catch (RaptorException e) {
420 request.setAttribute("error_extra_msg", "While copying report " + reportID);
421 messageJSON.setMessage("Failed - While copying report " + reportID);
422 messageJSON.setAnyStacktrace(getStackTrace(e));
423 logger.debug(EELFLoggerDelegate.debugLogger,
424 ("[Controller.processRequest]Invalid raptor action [copyReport]. RaptorException: "
432 @RequestMapping(value = "report/wizard/import_report", method = RequestMethod.POST, consumes = "application/json")
433 public @ResponseBody MessageJSON importReport(@RequestBody ImportJSON importJSON, HttpServletRequest request,
434 HttpServletResponse response) throws IOException, RaptorException {
435 MessageJSON messageJSON = new MessageJSON();
437 String reportXML = importJSON.getReportXML();
439 ReportHandler rh = new ReportHandler();
440 ReportDefinition rdef = rh.createReportDefinition(request, "-1", reportXML);
441 rdef.updateReportDefType();
442 rdef.generateWizardSequence(request);
443 rdef.setReportName("Import: " + rdef.getReportName());
444 rdef.clearAllDrillDowns();
446 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
448 messageJSON.setMessage("Success- Report imported.");
449 messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
451 } catch (RaptorException e) {
452 request.setAttribute("error_extra_msg", "Unable to parse XML. Nested error: ");
453 messageJSON.setMessage("Unable to parse XML. Nested error: ");
454 messageJSON.setAnyStacktrace(getStackTrace(e));
463 @RequestMapping(value = "report/wizard/save_formfield_tab_data", method = RequestMethod.POST)
464 public @ResponseBody MessageJSON saveFFTabWiseData(@RequestBody FormEditJSON formEditJSON,
465 HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
466 ReportDefinition rdef = null;
467 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
469 MessageJSON messageJSON = new MessageJSON();
473 String fieldId = formEditJSON.getFieldId();
475 if (rdef.getFormFieldList() != null) {
476 for (FormFieldType fft : rdef.getFormFieldList().getFormField()) {
477 if (fft.getFieldId().equals(fieldId)) {
478 fft.setFieldName(formEditJSON.getFieldName());
479 fft.setFieldType(formEditJSON.getFieldType());
480 fft.setVisible(formEditJSON.isVisible() ? "Y" : "N");
481 fft.setDefaultValue(formEditJSON.getDefaultValue());
482 fft.setFieldDefaultSQL(formEditJSON.getFieldDefaultSQL());
483 fft.setFieldSQL(formEditJSON.getFieldSQL());
484 fft.setValidationType(formEditJSON.getValidationType());
486 // clear predefined value
487 if (fft.getPredefinedValueList() != null) {
488 for (Iterator<String> iter = fft.getPredefinedValueList().getPredefinedValue().iterator(); iter
493 List<IdNameBooleanJSON> predefList = formEditJSON.getPredefinedValueList();
494 if (predefList != null && predefList.size() > 0) {
495 for (IdNameBooleanJSON item : predefList) {
496 PredefinedValueList predefinedValueList = new ObjectFactory()
497 .createPredefinedValueList();
498 fft.setPredefinedValueList(predefinedValueList);
499 fft.getPredefinedValueList().getPredefinedValue().add(item.getId());
507 persistReportDefinition(request, rdef);
508 messageJSON.setMessage("Success formfield Details of given report is saved in session.");
509 messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
512 messageJSON.setMessage("Report Definition is not in session");
513 messageJSON.setAnyStacktrace("Report Definition is not in session");
516 } catch (Exception ex) {
517 messageJSON.setMessage("Error occured while formfield details Tab");
518 messageJSON.setAnyStacktrace(getStackTrace(ex));
525 @RequestMapping(value = "report/wizard/save_col_tab_data", method = RequestMethod.POST)
526 public @ResponseBody MessageJSON saveColTabWiseData(@RequestBody ColumnEditJSON columnEditJSON,
527 HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
528 ReportDefinition rdef = null;
529 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
531 MessageJSON messageJSON = new MessageJSON();
535 String colId = columnEditJSON.getColId();
536 List<DataColumnType> reportColumnList = rdef.getAllColumns();
538 for (DataColumnType reportColumnType : reportColumnList) {
539 // columnJSON = new ColumnJSON();
540 if (reportColumnType.getColId().equals(colId)) {
541 reportColumnType.setColName(columnEditJSON.getColName());
542 reportColumnType.setDisplayAlignment(columnEditJSON.getDisplayAlignment());
543 reportColumnType.setDisplayHeaderAlignment(columnEditJSON.getDisplayHeaderAlignment());
544 reportColumnType.setIsSortable(columnEditJSON.isSortable());
545 reportColumnType.setVisible(columnEditJSON.isVisible());
546 reportColumnType.setDrillDownURL(columnEditJSON.getDrilldownURL());
547 reportColumnType.setDrillDownParams(columnEditJSON.getDrilldownParams());
548 reportColumnType.setDrillDownType(columnEditJSON.getDrilldownType());
553 persistReportDefinition(request, rdef);
554 messageJSON.setMessage("Success Column Details of given report is saved in session.");
555 messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB.");
558 messageJSON.setMessage("Report Definition is not in session");
559 messageJSON.setAnyStacktrace("");
562 } catch (Exception ex) {
563 messageJSON.setMessage("Error occured while saving column details Tab");
564 messageJSON.setAnyStacktrace(getStackTrace(ex));
572 @RequestMapping(value = "report/wizard/save_def_tab_data/{id}", method = RequestMethod.POST)
573 public @ResponseBody MessageJSON saveDefTabWiseData(@PathVariable("id") String id,
574 @RequestBody DefinitionJSON definitionJSON, HttpServletRequest request, HttpServletResponse response)
575 throws IOException, RaptorException {
576 ReportDefinition rdef = null;
577 ReportRuntime rr = null;
578 boolean newReport = false;
579 MessageJSON messageJSON = new MessageJSON();
582 if (id.equals("InSession")) {
583 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
586 } else if (id.equals("Create")) {
587 removeVariablesFromSession(request);
588 rdef = (new ReportHandler()).loadReportDefinition(request, "-1");
590 System.out.println("&&&&&&&&&&&&&&&&&&&&&& CHECK Report Type "
591 + (AppUtils.nvl(rdef.getReportType()).length() <= 0));
592 if (AppUtils.nvl(rdef.getReportType()).length() <= 0) {
593 rdef.setReportType(AppConstants.RT_LINEAR);
594 System.out.println("&&&&&&&&&&&&&&&&&&&&&& ADDED Report Type in session ");
597 } else if (AppUtils.nvl(id).length() > 0) {
598 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
599 rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
601 if (rdef != null && !rdef.getReportID().equals(id)) {
602 request.getSession().removeAttribute(AppConstants.SI_REPORT_DEFINITION);
603 removeVariablesFromSession(request);
604 rdef = (new ReportHandler()).loadReportDefinition(request, id);
605 } else if (rr != null && !rr.getReportID().equals(id)) {
606 request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
607 removeVariablesFromSession(request);
608 rdef = (new ReportHandler()).loadReportDefinition(request, id);
609 } else if (rdef == null) {
610 rdef = (new ReportHandler()).loadReportDefinition(request, id);
615 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
621 String reportName = definitionJSON.getReportName();
622 String errorString = "";
623 if (AppUtils.nvl(reportName).length() <= 0)
624 errorString = "ReportName cannot be null;";
625 rdef.setReportName(reportName);
627 String reportDescr = definitionJSON.getReportDescr();
628 rdef.setReportDescr(reportDescr);
630 String formHelpText = definitionJSON.getFormHelpText();
631 rdef.setFormHelpText(formHelpText);
633 Integer pageSize = definitionJSON.getPageSize();
634 rdef.setPageSize(pageSize);
636 List<IdNameBooleanJSON> menuIds = definitionJSON.getDisplayArea();
637 for (IdNameBooleanJSON menuId : menuIds) {
638 if (menuId.isSelected()) {
639 rdef.setMenuID(menuId.getName());
644 Boolean hideFormFieldsAfterRun = definitionJSON.getHideFormFieldsAfterRun();
645 rdef.setHideFormFieldAfterRun(hideFormFieldsAfterRun);
646 Integer maxRowsInExcelCSVDownload = definitionJSON.getMaxRowsInExcelCSVDownload();
647 rdef.setMaxRowsInExcelDownload(maxRowsInExcelCSVDownload);
648 Integer frozenColumns = definitionJSON.getFrozenColumns();
649 rdef.setFrozenColumns(frozenColumns);
650 String dataGridAlign = definitionJSON.getDataGridAlign();
651 rdef.setDataGridAlign(dataGridAlign);
652 String emptyMessage = definitionJSON.getEmptyMessage();
653 rdef.setEmptyMessage(emptyMessage);
654 String dataContainerHeight = definitionJSON.getDataContainerHeight();
655 rdef.setDataContainerHeight(dataContainerHeight);
656 String dataContainerWidth = definitionJSON.getDataContainerWidth();
657 rdef.setDataContainerWidth(dataContainerWidth);
658 boolean runtimeColSortDisabled = definitionJSON.getRuntimeColSortDisabled();
659 rdef.setRuntimeColSortDisabled(runtimeColSortDisabled);
660 Integer numFormCols = definitionJSON.getNumFormCols();
661 rdef.setNumFormCols(Integer.toString(numFormCols));
662 String reportTitle = definitionJSON.getReportTitle();
663 rdef.setReportTitle(reportTitle);
664 String reportSubTitle = definitionJSON.getReportSubTitle();
665 rdef.setReportSubTitle(reportSubTitle);
667 List<NameBooleanJSON> displayOptions = definitionJSON.getDisplayOptions();
668 StringBuffer displayOptionStr = new StringBuffer("NNNNNNN");
669 for (NameBooleanJSON displayOption : displayOptions) {
670 if (displayOption.isSelected()) {
671 if (displayOption.getName().equals("HideFormFields")) {
672 displayOptionStr.setCharAt(0, 'Y');
673 } else if (displayOption.getName().equals("HideChart")) {
674 displayOptionStr.setCharAt(1, 'Y');
675 } else if (displayOption.getName().equals("HideReportData")) {
676 displayOptionStr.setCharAt(2, 'Y');
677 } else if (displayOption.getName().equals("HideExcel")) {
678 displayOptionStr.setCharAt(5, 'Y');
679 } else if (displayOption.getName().equals("HidePdf")) {
680 displayOptionStr.setCharAt(6, 'Y');
686 rdef.setDisplayOptions(displayOptionStr.toString());
688 if (id.equals("Create")) {
689 rdef.persistReport(request);
691 persistReportDefinition(request, rdef);
692 messageJSON.setMessage("Success Definition of given report is saved in session.");
693 messageJSON.setAnyStacktrace((newReport ? " New Report info is added to Session "
694 : rdef.getReportID() + " is Modified and added to session and DB."));
696 } catch (Exception ex) {
697 messageJSON.setMessage("Error occured while saving definition Tab");
698 messageJSON.setAnyStacktrace(getStackTrace(ex));
699 logger.error(EELFLoggerDelegate.errorLogger,
700 "[Controller.processRequest]Invalid raptor action [retrieveTabWiseData].", ex);
707 @RequestMapping(value = { "/report/wizard/retrieve_form_tab_wise_data/{id}",
708 "/report/wizard/retrieve_form_tab_wise_data/{id}/{action}" }, method = RequestMethod.GET)
709 public @ResponseBody FormEditJSON retrieveFormTabWiseData(@PathVariable Map<String, String> pathVariables,
710 HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
711 ReportDefinition rdef = null;
714 String detailId = "";
715 FormEditJSON wizardJSON = new FormEditJSON();
716 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
718 if (pathVariables.containsKey("id")) {
719 id = pathVariables.get("id");
721 if (pathVariables.containsKey("action")) {
722 action = pathVariables.get("action");
725 ServletContext servletContext = request.getSession().getServletContext();
726 if (!Globals.isSystemInitialized()) {
727 Globals.initializeSystem(servletContext);
729 wizardJSON.setTabId("FormEdit");
730 wizardJSON.setTabName("Form Edit");
731 FormFieldType currField = null;
733 if (id.equals("add")) {
735 currField = rdef.addFormFieldType(new ObjectFactory(), "", "", "", "", "", "", "", "", null, null, "",
737 wizardJSON.setFieldId(currField.getFieldId());
738 wizardJSON.setFieldName(currField.getFieldName());
739 wizardJSON.setFieldType(currField.getFieldType());
740 wizardJSON.setVisible(AppUtils.nvls(currField.getVisible(), "Y").toUpperCase().startsWith("Y"));
741 wizardJSON.setDefaultValue(currField.getDefaultValue());
742 wizardJSON.setFieldDefaultSQL(currField.getFieldDefaultSQL());
743 wizardJSON.setFieldSQL(currField.getFieldSQL());
744 wizardJSON.setValidationType(currField.getValidationType());
745 persistReportDefinition(request, rdef);
747 } else if (action.equals("delete")) {
748 rdef.deleteFormField(id);
749 persistReportDefinition(request, rdef);
750 wizardJSON.setMessage("Formfield " + detailId + " Deleted");
752 if (rdef.getFormFieldList() != null) {
753 for (FormFieldType fft : rdef.getFormFieldList().getFormField()) {
754 if (fft.getFieldId().equals(id)) {
755 wizardJSON.setFieldId(fft.getFieldId());
756 wizardJSON.setFieldName(fft.getFieldName());
757 wizardJSON.setFieldType(fft.getFieldType());
758 wizardJSON.setVisible(fft.getVisible().toUpperCase().startsWith("Y"));
759 wizardJSON.setDefaultValue(fft.getDefaultValue());
760 wizardJSON.setFieldDefaultSQL(fft.getFieldDefaultSQL());
761 wizardJSON.setFieldSQL(fft.getFieldSQL());
762 wizardJSON.setValidationType(fft.getValidationType());
764 PredefinedValueList preDefined = fft.getPredefinedValueList();
766 if (preDefined != null) {
767 List<IdNameBooleanJSON> preDefinedList = new ArrayList<IdNameBooleanJSON>();
768 IdNameBooleanJSON idNameBooleanJSON = new IdNameBooleanJSON();
770 for (String v : preDefined.getPredefinedValue()) {
771 idNameBooleanJSON = new IdNameBooleanJSON();
772 idNameBooleanJSON.setId(v);
773 idNameBooleanJSON.setName(v);
774 preDefinedList.add(idNameBooleanJSON);
776 wizardJSON.setPredefinedValueList(preDefinedList);
781 } catch (Exception ex) {
782 logger.error(EELFLoggerDelegate.errorLogger,
783 "[Controller.processRequest]Invalid raptor action [retrieveFormTabWiseData].", ex);
784 ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
785 errorJSONRuntime.setErrormessage("Error occured while retreiving formedit definition Tab");
786 errorJSONRuntime.setStacktrace(getStackTrace(ex));
787 wizardJSON.setErrorMessage("Error occured while retreiving formedit definition Tab");
788 wizardJSON.setErrorStackTrace(getStackTrace(ex));
795 @RequestMapping(value = { "/report/wizard/retrieve_col_tab_wise_data/{id}" }, method = RequestMethod.GET)
796 public @ResponseBody ColumnEditJSON retrieveColTabWiseData(@PathVariable Map<String, String> pathVariables,
797 HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
798 ReportDefinition rdef = null;
800 ColumnEditJSON wizardJSON = new ColumnEditJSON();
801 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
803 if (pathVariables.containsKey("id")) {
804 id = pathVariables.get("id");
806 ServletContext servletContext = request.getSession().getServletContext();
807 if (!Globals.isSystemInitialized()) {
808 Globals.initializeSystem(servletContext);
811 wizardJSON.setTabId("ColEdit");
812 wizardJSON.setTabName("Column Edit");
814 List<DataColumnType> reportColumnList = rdef.getAllColumns();
816 for (DataColumnType reportColumnType : reportColumnList) {
817 if (reportColumnType.getColId().equals(id)) {
818 wizardJSON.setColId(reportColumnType.getColId());
819 wizardJSON.setColName(reportColumnType.getColName());
820 wizardJSON.setDisplayAlignment(reportColumnType.getDisplayAlignment());
821 wizardJSON.setDisplayHeaderAlignment(reportColumnType.getDisplayHeaderAlignment());
822 wizardJSON.setSortable(
823 reportColumnType.isIsSortable() == null ? false : reportColumnType.isIsSortable());
824 wizardJSON.setVisible(reportColumnType.isVisible());
825 wizardJSON.setDrilldownURL(
826 reportColumnType.getDrillDownURL() == null ? "" : reportColumnType.getDrillDownURL());
827 wizardJSON.setDrilldownParams(
828 reportColumnType.getDrillDownParams() == null ? "" : reportColumnType.getDrillDownParams());
829 wizardJSON.setDrilldownType(
830 reportColumnType.getDrillDownType() == null ? "" : reportColumnType.getDrillDownType());
835 wizardJSON.setErrorMessage("Report is not in session");
841 @RequestMapping(value = { "/report/wizard/retrieve_sql_tab_wise_data/{id}",
842 "/report/wizard/retrieve_sql_tab_wise_data/" }, method = RequestMethod.GET)
843 public @ResponseBody QueryJSON retrieveSqlTabWiseData(@PathVariable Map<String, String> pathVariables,
844 HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
845 ReportDefinition rdef = null;
846 ReportRuntime rr = null;
848 String detailId = "";
849 QueryJSON wizardJSON = new QueryJSON();
851 if (pathVariables.containsKey("id")) {
852 id = pathVariables.get("id");
854 if (pathVariables.containsKey("detailId")) {
855 detailId = pathVariables.get("detailId");
857 ServletContext servletContext = request.getSession().getServletContext();
858 if (!Globals.isSystemInitialized()) {
859 Globals.initializeSystem(servletContext);
861 if (id.equals("InSession") || AppUtils.nvl(id).length() <= 0) {
862 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
863 } else if (AppUtils.nvl(id).length() > 0) {
864 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
865 rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
867 if (rdef != null && !rdef.getReportID().equals(id)) {
868 request.getSession().removeAttribute(AppConstants.SI_REPORT_DEFINITION);
869 removeVariablesFromSession(request);
870 rdef = (new ReportHandler()).loadReportDefinition(request, id);
871 } else if (rr != null && !rr.getReportID().equals(id)) {
872 request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
873 removeVariablesFromSession(request);
874 rdef = (new ReportHandler()).loadReportDefinition(request, id);
875 } else if (rdef == null) {
876 rdef = (new ReportHandler()).loadReportDefinition(request, id);
882 wizardJSON.setTabId("Sql");
883 wizardJSON.setTabName("Sql");
884 wizardJSON.setQuery(rdef.getReportSQL());
889 @RequestMapping(value = { "/report/wizard/retrieve_def_tab_wise_data/{id}",
890 "/report/wizard/retrieve_def_tab_wise_data/{id}/{detailId}" }, method = RequestMethod.GET)
891 public @ResponseBody DefinitionJSON retrieveDefTabWiseData(@PathVariable Map<String, String> pathVariables,
892 HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException {
893 ReportDefinition rdef = null;
894 ReportRuntime rr = null;
895 boolean newReport = false;
896 String tabId = "Def";
899 if (pathVariables.containsKey("id")) {
900 id = pathVariables.get("id");
902 String detailId = "";
903 if (pathVariables.containsKey("detailId")) {
904 detailId = pathVariables.get("detailId");
907 ServletContext servletContext = request.getSession().getServletContext();
908 if (!Globals.isSystemInitialized()) {
909 Globals.initializeSystem(servletContext);
912 if (tabId.equals("Def") && id.equals("InSession")) {
913 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
916 } else if (tabId.equals("Def") && id.equals("Create")) {
917 removeVariablesFromSession(request);
918 rdef = (new ReportHandler()).loadReportDefinition(request, "-1");
919 rdef.setReportType(AppConstants.RT_LINEAR);
922 } else if (tabId.equals("Def") && AppUtils.nvl(id).length() > 0) {
923 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
924 rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
926 if (rdef != null && !rdef.getReportID().equals(id)) {
927 request.getSession().removeAttribute(AppConstants.SI_REPORT_DEFINITION);
928 removeVariablesFromSession(request);
929 rdef = (new ReportHandler()).loadReportDefinition(request, id);
930 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
931 } else if (rr != null && !rr.getReportID().equals(id)) {
932 request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
933 removeVariablesFromSession(request);
934 rdef = (new ReportHandler()).loadReportDefinition(request, id);
935 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
936 } else if (rdef == null) {
937 rdef = (new ReportHandler()).loadReportDefinition(request, id);
938 request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
943 rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
945 DefinitionJSON wizardJSON = new DefinitionJSON();
946 if (tabId.equals("Def")) {
947 wizardJSON.setTabId("Def");
948 wizardJSON.setTabName("Definition");
950 wizardJSON.setReportId((rdef != null) ? rdef.getReportID() + "" : "");
951 wizardJSON.setReportName((rdef != null) ? rdef.getReportName() : "");
952 wizardJSON.setReportDescr((rdef != null) ? rdef.getReportDescr() : "");
953 wizardJSON.setReportType((rdef != null) ? rdef.getReportType() : AppConstants.RT_LINEAR);
954 wizardJSON.setDbInfo((rdef != null) ? rdef.getDBInfo() : "");
955 wizardJSON.setFormHelpText((rdef != null) ? rdef.getFormHelpText() : "");
956 wizardJSON.setPageSize((rdef != null) ? rdef.getPageSize() : 50);
957 List<IdNameBooleanJSON> displayArea = new ArrayList<IdNameBooleanJSON>();
958 IdNameBooleanJSON idNameJSON = new IdNameBooleanJSON();
960 for (int i = 0; i < AppUtils.getQuickLinksMenuIDs().size(); i++) {
961 idNameJSON = new IdNameBooleanJSON();
962 qMenu = (String) AppUtils.getQuickLinksMenuIDs().get(i);
963 idNameJSON.setId(qMenu);
964 idNameJSON.setName(qMenu);
965 if (rdef != null && (rdef.getMenuID().equals(qMenu))) {
966 idNameJSON.setSelected(true);
968 displayArea.add(idNameJSON);
970 wizardJSON.setDisplayArea(displayArea);
971 wizardJSON.setHideFormFieldsAfterRun((rdef != null) ? rdef.isHideFormFieldAfterRun() : false);
972 wizardJSON.setMaxRowsInExcelCSVDownload((rdef != null) ? rdef.getMaxRowsInExcelDownload() : 500);
973 wizardJSON.setFrozenColumns((rdef != null) ? rdef.getFrozenColumns() : 0);
974 wizardJSON.setDataGridAlign((rdef != null) ? rdef.getDataGridAlign() : "left");
975 wizardJSON.setEmptyMessage((rdef != null) ? rdef.getEmptyMessage() : "No records found");
976 wizardJSON.setDataContainerHeight((rdef != null) ? rdef.getDataContainerHeight() : "600");
977 wizardJSON.setDataContainerWidth((rdef != null) ? rdef.getDataContainerWidth() : "900");
978 List<NameBooleanJSON> displayOptions = new ArrayList<NameBooleanJSON>();
979 NameBooleanJSON nameBooleanJSON = new NameBooleanJSON();
980 nameBooleanJSON.setName("HideFormFields");
981 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideForm() : false);
982 displayOptions.add(nameBooleanJSON);
984 nameBooleanJSON = new NameBooleanJSON();
985 nameBooleanJSON.setName("HideChart");
986 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideChart() : false);
987 displayOptions.add(nameBooleanJSON);
989 nameBooleanJSON = new NameBooleanJSON();
990 nameBooleanJSON.setName("HideReportData");
991 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideData() : false);
992 displayOptions.add(nameBooleanJSON);
994 nameBooleanJSON = new NameBooleanJSON();
995 nameBooleanJSON.setName("HideExcel");
996 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideExcelIcons() : false);
997 displayOptions.add(nameBooleanJSON);
999 nameBooleanJSON = new NameBooleanJSON();
1000 nameBooleanJSON.setName("HidePdf");
1001 nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHidePDFIcons() : false);
1002 displayOptions.add(nameBooleanJSON);
1004 wizardJSON.setDisplayOptions(displayOptions);
1006 wizardJSON.setRuntimeColSortDisabled((rdef != null) ? rdef.isRuntimeColSortDisabled() : false);
1007 wizardJSON.setNumFormCols((rdef != null) ? rdef.getNumFormColsAsInt() : 1);
1008 wizardJSON.setReportTitle((rdef != null) ? rdef.getReportTitle() : "");
1009 wizardJSON.setReportSubTitle((rdef != null) ? rdef.getReportSubTitle() : "");
1013 ObjectMapper mapper = new ObjectMapper();
1014 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1015 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1021 @RequestMapping(value = "/report/wizard/retrieve_data/{validate}", method = RequestMethod.POST)
1022 public @ResponseBody RaptorResponse retrieveDataForGivenQuery(@PathVariable("validate") boolean validate,
1023 @RequestBody QueryJSON queryJSON, HttpServletRequest request, HttpServletResponse response)
1024 throws IOException, RaptorException {
1025 RaptorResponse raptorResponse = new RaptorResponse();
1026 String sql = queryJSON.getQuery();
1027 String jsonInString = "";
1029 ServletContext servletContext = request.getSession().getServletContext();
1030 if (!Globals.isSystemInitialized()) {
1031 Globals.initializeSystem(servletContext);
1034 ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
1036 ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
1037 errorJSONRuntime.setErrormessage("Report Definition is not in session;");
1038 errorJSONRuntime.setStacktrace("");
1040 ObjectMapper mapper = new ObjectMapper();
1041 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1042 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1045 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
1046 raptorResponse.data().put("elements", jsonInString);
1047 return raptorResponse;
1048 } catch (Exception ex1) {
1049 logger.error(EELFLoggerDelegate.errorLogger,
1050 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex1);
1053 if (!sql.trim().toUpperCase().startsWith("SELECT")) {
1054 ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
1055 errorJSONRuntime.setErrormessage("Invalid statement - the SQL must start with the keyword SELECT");
1056 errorJSONRuntime.setStacktrace("SQL Error");
1057 ObjectMapper mapper = new ObjectMapper();
1058 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1059 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1062 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
1063 raptorResponse.data().put("elements", jsonInString);
1064 return raptorResponse;
1066 } catch (Exception ex) {
1067 logger.error(EELFLoggerDelegate.errorLogger,
1068 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1072 String remoteDb = request.getParameter("remoteDbPrefix");
1073 // comment below two lines to test
1074 String remoteDbPrefix = (remoteDb != null && !remoteDb.equalsIgnoreCase("null")) ? remoteDb
1076 String userId = AppUtils.getUserID(request);
1077 // String userId = "1";
1078 sql = Utils.replaceInString(sql, "[LOGGED_USERID]", userId);
1079 sql = Utils.replaceInString(sql, "[USERID]", userId);
1080 String[] reqParameters = Globals.getRequestParams().split(",");
1081 String[] sessionParameters = Globals.getSessionParams().split(",");
1082 javax.servlet.http.HttpSession session = request.getSession();
1083 logger.debug(EELFLoggerDelegate.debugLogger, ("B4 testRunSQL " + sql));
1084 if (request != null) {
1085 for (int i = 0; i < reqParameters.length; i++) {
1086 if (!reqParameters[i].startsWith("ff"))
1087 sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase() + "]",
1088 request.getParameter(reqParameters[i].toUpperCase()));
1090 sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase() + "]",
1091 request.getParameter(reqParameters[i]));
1094 if (session != null) {
1095 for (int i = 0; i < sessionParameters.length; i++) {
1096 logger.debug(EELFLoggerDelegate.debugLogger, (" Session " + " sessionParameters[i] "
1097 + sessionParameters[i] + " " + (String) session.getAttribute(sessionParameters[i])));
1098 sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase() + "]",
1099 (String) session.getAttribute(sessionParameters[i]));
1102 logger.debug(EELFLoggerDelegate.debugLogger, ("After testRunSQL " + sql));
1105 response.setContentType("application/json");
1106 ds = ConnectionUtils.getDataSet(sql, "local", true);
1108 QueryResultJSON queryResultJSON = new QueryResultJSON();
1109 queryResultJSON.setQuery(queryJSON.getQuery());
1110 String query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1111 rdef.parseReportSQL(query);
1112 queryResultJSON.setQuery(query);
1114 int numColumns = ds.getColumnCount();
1115 queryResultJSON.setTotalRows(ds.getRowCount());
1118 Map<String, String> dvJSON = null;
1119 ArrayList<String> colList = new ArrayList<String>();
1120 ArrayList<Map<String, String>> reportDataRows = new ArrayList<Map<String, String>>();
1121 if (!ds.isEmpty()) {
1124 for (int i = 0; i < ds.getColumnCount(); i++) {
1125 colList.add(ds.getColumnName(i));
1127 queryResultJSON.setReportDataColumns(colList);
1128 if (queryResultJSON.getTotalRows() > 0) {
1130 dvJSON = new HashMap<String, String>();
1131 for (int r = 0; r < Math.min(ds.getRowCount(), 100); r++) {
1132 dvJSON = new HashMap<String, String>();
1133 for (int c = 0; c < ds.getColumnCount(); c++) {
1135 dvJSON.put(ds.getColumnName(c), ds.getString(r, c));
1136 } catch (Exception ex) {
1137 logger.error(EELFLoggerDelegate.errorLogger,
1138 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex);
1141 reportDataRows.add(dvJSON);
1147 queryResultJSON.setReportDataRows(reportDataRows);
1148 ObjectMapper mapper = new ObjectMapper();
1149 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1150 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1152 query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1153 request.setAttribute("sqlValidated", "N");
1154 rdef.parseReportSQL(query);
1155 request.setAttribute("sqlValidated", "Y");
1156 persistReportDefinition(request, rdef);
1160 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(queryResultJSON);
1161 raptorResponse.data().put("elements", jsonInString);
1162 return raptorResponse;
1165 } catch (Exception ex) {
1166 logger.error(EELFLoggerDelegate.errorLogger,
1167 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery]. RaptorException: ", ex);
1169 } catch (ReportSQLException ex) {
1170 ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
1171 if (sql.contains("[")) {
1172 errorJSONRuntime.setErrormessage(
1173 "Formfield information is present in the query, hence couldn't execute");
1175 .setStacktrace("Formfield information is present in the query, hence couldn't execute");
1177 String query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1178 request.setAttribute("sqlValidated", "N");
1179 rdef.parseReportSQL(query);
1180 request.setAttribute("sqlValidated", "Y");
1181 persistReportDefinition(request, rdef);
1186 errorJSONRuntime.setErrormessage(ex.getMessage());
1187 errorJSONRuntime.setStacktrace(getStackTrace(ex));
1189 ObjectMapper mapper = new ObjectMapper();
1190 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
1191 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
1194 jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime);
1195 raptorResponse.data().put("elements", jsonInString);
1196 return raptorResponse;
1199 } catch (Exception ex1) {
1200 logger.error(EELFLoggerDelegate.errorLogger,
1201 "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex1);
1205 String query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery());
1206 request.setAttribute("sqlValidated", "N");
1207 rdef.parseReportSQL(query);
1208 request.setAttribute("sqlValidated", "Y");
1209 persistReportDefinition(request, rdef);
1215 raptorResponse.data().put("elements", jsonInString);
1216 return raptorResponse;
1220 @RequestMapping(value = "save_chart", method = RequestMethod.POST)
1221 public void reportChartReceive(@RequestBody ChartJSON chartJSON, HttpServletRequest request,
1222 HttpServletResponse response) throws IOException {
1223 ReportRuntime reportRuntime;
1224 reportRuntime = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); // changing
1228 String reportID = request.getParameter("c_master");
1229 if (reportRuntime == null && AppUtils.nvl(reportID).length() > 0) {
1231 ReportHandler rh = new ReportHandler();
1232 reportRuntime = rh.loadReportRuntime(request, reportID);
1233 } catch (RaptorException ex) {
1234 logger.error(EELFLoggerDelegate.errorLogger,
1235 "[Controller.processRequest]Invalid raptor action [reportChartReceive].", ex);
1239 if (reportRuntime != null) {
1240 String chartType = chartJSON.getChartType();
1241 reportRuntime.setChartType(chartJSON.getChartType());
1242 reportRuntime.setChartAnimate(chartJSON.isAnimation());
1243 reportRuntime.setChartWidth(chartJSON.getWidth());
1244 reportRuntime.setChartHeight(chartJSON.getHeight());
1245 reportRuntime.setShowChartTitle(chartJSON.isShowTitle());
1247 String domainAxis = null;
1248 domainAxis = chartJSON.getDomainAxis();
1250 List<DataColumnType> reportCols = reportRuntime.getAllColumns();
1252 for (Iterator<DataColumnType> iter = reportCols.iterator(); iter.hasNext();) {
1253 DataColumnType dct = (DataColumnType) iter.next();
1254 if (dct.getColId().equals(domainAxis)) {
1255 dct.setColOnChart(AppConstants.GC_LEGEND);
1257 dct.setColOnChart(null);
1261 CategoryAxisJSON categoryAxisJSON = chartJSON.getCategoryAxisJSON();
1262 String categoryAxis = null;
1264 categoryAxis = (categoryAxisJSON != null ? categoryAxisJSON.getValue() : "");
1266 reportCols = reportRuntime.getAllColumns();
1268 for (Iterator<DataColumnType> iter = reportCols.iterator(); iter.hasNext();) {
1269 DataColumnType dct = (DataColumnType) iter.next();
1270 if (dct.getColId().equals(categoryAxis)) {
1271 dct.setChartSeries(true);
1273 dct.setChartSeries(false);
1277 ArrayList<RangeAxisJSON> rangeAxisList = chartJSON.getRangeAxisList();
1279 for (int i = 0; i < rangeAxisList.size(); i++) {
1280 RangeAxisJSON rangeAxisJSON = rangeAxisList.get(i);
1281 String rangeAxis = rangeAxisJSON.getRangeAxis();
1282 String rangeYAxis = AppUtils.nvl(rangeAxisJSON.getRangeYAxis());
1283 String rangeChartGroup = AppUtils.nvl(rangeAxisJSON.getRangeChartGroup());
1284 String rangeColor = AppUtils.nvl(rangeAxisJSON.getRangeColor());
1285 String rangeLineType = AppUtils.nvl(rangeAxisJSON.getRangeLineType());
1287 rangefor: for (Iterator<DataColumnType> iterator = reportCols.iterator(); iterator.hasNext();) {
1288 DataColumnType dct = (DataColumnType) iterator.next();
1289 if (dct.getColId().equals(rangeAxis)) {
1290 dct.setChartSeq(++r);
1291 dct.setColOnChart("0");
1292 dct.setYAxis(rangeYAxis); // +"|"+dct.getColId());
1293 dct.setChartGroup(rangeChartGroup); // +"|"+dct.getColId());
1294 dct.setChartColor(rangeColor);
1295 dct.setChartLineType(rangeLineType);
1297 if (chartType.equals(AppConstants.GT_ANNOTATION_CHART)
1298 || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) {
1299 if (rangeAxisJSON.isShowAsArea()) {
1300 dct.setIsRangeAxisFilled(true);
1302 dct.setIsRangeAxisFilled(false);
1311 reportRuntime.setChartLeftAxisLabel(chartJSON.getPrimaryAxisLabel());
1312 reportRuntime.setChartRightAxisLabel(chartJSON.getSecondaryAxisLabel());
1314 reportRuntime.setRangeAxisLowerLimit(chartJSON.getMinRange());
1315 reportRuntime.setRangeAxisUpperLimit(chartJSON.getMaxRange());
1317 if (chartType.equals(AppConstants.GT_ANNOTATION_CHART)
1318 || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) {
1319 if (chartJSON.getFlexTimeSeriesChartOptions() != null) {
1320 reportRuntime.setZoomIn(chartJSON.getFlexTimeSeriesChartOptions().getZoomIn());
1321 reportRuntime.setTimeAxisType(chartJSON.getFlexTimeSeriesChartOptions().getTimeAxisType());
1326 if (chartType.equals(AppConstants.GT_TIME_SERIES)) {
1327 if (chartJSON.getTimeSeriesChartOptions() != null) {
1328 reportRuntime.setTimeSeriesRender(chartJSON.getTimeSeriesChartOptions().getLineChartRenderer());
1329 reportRuntime.setShowXAxisLabel(chartJSON.getTimeSeriesChartOptions().isShowXAxisLabel());
1330 reportRuntime.setAddXAxisTickers(chartJSON.getTimeSeriesChartOptions().isAddXAxisTicker());
1331 reportRuntime.setTimeAxis(chartJSON.getTimeSeriesChartOptions().isNonTimeAxis());
1332 reportRuntime.setMultiSeries(chartJSON.getTimeSeriesChartOptions().isMultiSeries());
1337 if (chartType.equals(AppConstants.GT_BAR_3D)) {
1338 if (chartJSON.getBarChartOptions() != null) {
1339 reportRuntime.setChartOrientation(
1340 chartJSON.getBarChartOptions().isVerticalOrientation() ? "vertical" : "horizontal");
1341 reportRuntime.setChartStacked(chartJSON.getBarChartOptions().isStackedChart());
1342 reportRuntime.setBarControls(chartJSON.getBarChartOptions().isDisplayBarControls());
1343 reportRuntime.setXAxisDateType(chartJSON.getBarChartOptions().isxAxisDateType());
1344 reportRuntime.setLessXaxisTickers(chartJSON.getBarChartOptions().isMinimizeXAxisTickers());
1345 reportRuntime.setTimeAxis(chartJSON.getBarChartOptions().isTimeAxis());
1346 reportRuntime.setLogScale(chartJSON.getBarChartOptions().isyAxisLogScale());
1350 reportRuntime.setLegendLabelAngle(chartJSON.getCommonChartOptions().getLegendLabelAngle());
1351 reportRuntime.setLegendPosition(chartJSON.getCommonChartOptions().getLegendPosition());
1352 reportRuntime.setChartLegendDisplay(chartJSON.getCommonChartOptions().isHideLegend() ? "Y" : "N");
1353 reportRuntime.setAnimateAnimatedChart(chartJSON.getCommonChartOptions().isAnimateAnimatedChart());
1355 reportRuntime.setTopMargin(chartJSON.getCommonChartOptions().getTopMargin());
1356 reportRuntime.setBottomMargin(chartJSON.getCommonChartOptions().getBottomMargin());
1357 reportRuntime.setLeftMargin(chartJSON.getCommonChartOptions().getLeftMargin());
1358 reportRuntime.setRightMargin(chartJSON.getCommonChartOptions().getRightMargin());
1360 for (Iterator<DataColumnType> iterator = reportCols.iterator(); iterator.hasNext();) {
1361 DataColumnType dct = (DataColumnType) iterator.next();
1362 if (!(AppUtils.nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND)
1363 || (dct.getChartSeq() != null && dct.getChartSeq() > 0) || dct.isChartSeries())) {
1364 dct.setChartSeq(-1);
1365 dct.setChartColor(null);
1366 dct.setColOnChart(null);
1367 dct.setCreateInNewChart(false);
1368 dct.setChartGroup(null);
1374 reportRuntime.persistLinearReport(request);
1375 } catch (Exception ex) {
1376 logger.error(EELFLoggerDelegate.errorLogger,
1377 "[Controller.processRequest]Invalid raptor action [reportChartReceive].", ex);
1383 public String getViewName() {
1387 public void setViewName(String viewName) {
1388 this.viewName = viewName;
1391 public String nvl(String s) {
1392 return (s == null) ? "" : s;
1395 public String nvl(String s, String sDefault) {
1396 return nvl(s).equals("") ? sDefault : s;
1399 public static String getStackTrace(Throwable aThrowable) {
1400 Writer result = new StringWriter();
1401 PrintWriter printWriter = new PrintWriter(result);
1402 aThrowable.printStackTrace(printWriter);
1403 return result.toString();
1406 public void persistReportDefinition(HttpServletRequest request, ReportDefinition rdef) throws RaptorException {
1407 ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
1408 if (rr != null && rr.getReportID().equals(rdef.getReportID()))
1409 request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
1410 rdef.persistReport(request);
1411 } // persistReportDefinition
1413 // Remove from session
1414 private void removeVariablesFromSession(HttpServletRequest request) {
1415 HttpSession session = request.getSession();
1416 session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
1417 session.removeAttribute(AppConstants.DRILLDOWN_INDEX);
1418 session.removeAttribute(AppConstants.FORM_DRILLDOWN_INDEX);
1419 session.removeAttribute(AppConstants.SI_BACKUP_FOR_REP_ID);
1420 session.removeAttribute(AppConstants.SI_COLUMN_LOOKUP);
1421 session.removeAttribute(AppConstants.SI_DASHBOARD_REP_ID);
1422 session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP);
1423 session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME);
1424 session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP);
1425 session.removeAttribute(AppConstants.SI_DASHBOARD_CHARTDATA_MAP);
1426 session.removeAttribute(AppConstants.SI_DASHBOARD_DISPLAYTYPE_MAP);
1427 session.removeAttribute(AppConstants.SI_DATA_SIZE_FOR_TEXTFIELD_POPUP);
1428 session.removeAttribute(AppConstants.SI_MAP);
1429 session.removeAttribute(AppConstants.SI_MAP_OBJECT);
1430 session.removeAttribute(AppConstants.SI_REPORT_DEFINITION);
1431 session.removeAttribute(AppConstants.SI_REPORT_RUNTIME);
1432 session.removeAttribute(AppConstants.SI_REPORT_RUN_BACKUP);
1433 session.removeAttribute(AppConstants.SI_REPORT_SCHEDULE);
1434 session.removeAttribute(AppConstants.RI_REPORT_DATA);
1435 session.removeAttribute(AppConstants.RI_CHART_DATA);
1436 session.removeAttribute(AppConstants.SI_FORMFIELD_INFO);
1437 session.removeAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
1438 session.removeAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP);
1439 session.removeAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP);
1440 Enumeration<String> enum1 = session.getAttributeNames();
1441 String attributeName = "";
1442 while (enum1.hasMoreElements()) {
1443 attributeName = enum1.nextElement();
1444 if (attributeName.startsWith("parent_")) {
1445 session.removeAttribute(attributeName);