/* * ============LICENSE_START========================================== * ONAP Portal SDK * =================================================================== * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * =================================================================== * * Unless otherwise specified, all software contained herein is licensed * under the Apache License, Version 2.0 (the "License"); * you may not use this software except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Unless otherwise specified, all documentation contained herein is licensed * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); * you may not use this documentation except in compliance with the License. * You may obtain a copy of the License at * * https://creativecommons.org/licenses/by/4.0/ * * Unless required by applicable law or agreed to in writing, documentation * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ============LICENSE_END============================================ * * */ package org.onap.portalsdk.analytics.system.fusion.web; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Vector; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.onap.portalsdk.analytics.controller.Action; import org.onap.portalsdk.analytics.controller.ErrorHandler; import org.onap.portalsdk.analytics.controller.WizardSequence; import org.onap.portalsdk.analytics.error.RaptorException; import org.onap.portalsdk.analytics.error.RaptorRuntimeException; import org.onap.portalsdk.analytics.error.ReportSQLException; import org.onap.portalsdk.analytics.model.DataCache; import org.onap.portalsdk.analytics.model.ReportHandler; import org.onap.portalsdk.analytics.model.ReportLoader; import org.onap.portalsdk.analytics.model.base.IdNameList; import org.onap.portalsdk.analytics.model.base.IdNameValue; import org.onap.portalsdk.analytics.model.base.ReportUserRole; import org.onap.portalsdk.analytics.model.definition.DrillDownParamDef; import org.onap.portalsdk.analytics.model.definition.ReportDefinition; import org.onap.portalsdk.analytics.model.definition.ReportLogEntry; import org.onap.portalsdk.analytics.model.definition.SecurityEntry; import org.onap.portalsdk.analytics.model.definition.wizard.ColumnEditJSON; import org.onap.portalsdk.analytics.model.definition.wizard.ColumnJSON; import org.onap.portalsdk.analytics.model.definition.wizard.DefinitionJSON; import org.onap.portalsdk.analytics.model.definition.wizard.FormEditJSON; import org.onap.portalsdk.analytics.model.definition.wizard.FormFieldGroupsJSON; import org.onap.portalsdk.analytics.model.definition.wizard.IdNameBooleanJSON; import org.onap.portalsdk.analytics.model.definition.wizard.ImportJSON; import org.onap.portalsdk.analytics.model.definition.wizard.MessageJSON; import org.onap.portalsdk.analytics.model.definition.wizard.NameBooleanJSON; import org.onap.portalsdk.analytics.model.definition.wizard.QueryJSON; import org.onap.portalsdk.analytics.model.definition.wizard.QueryResultJSON; import org.onap.portalsdk.analytics.model.definition.wizard.RaptorResponse; import org.onap.portalsdk.analytics.model.definition.wizard.SearchFieldJSON; import org.onap.portalsdk.analytics.model.pdf.PdfReportHandler; import org.onap.portalsdk.analytics.model.runtime.CategoryAxisJSON; import org.onap.portalsdk.analytics.model.runtime.ChartJSON; import org.onap.portalsdk.analytics.model.runtime.ErrorJSONRuntime; import org.onap.portalsdk.analytics.model.runtime.FormField; import org.onap.portalsdk.analytics.model.runtime.RangeAxisJSON; import org.onap.portalsdk.analytics.model.runtime.ReportFormFields; import org.onap.portalsdk.analytics.model.runtime.ReportRuntime; import org.onap.portalsdk.analytics.system.AppUtils; import org.onap.portalsdk.analytics.system.ConnectionUtils; import org.onap.portalsdk.analytics.system.DbUtils; import org.onap.portalsdk.analytics.system.Globals; import org.onap.portalsdk.analytics.util.AppConstants; import org.onap.portalsdk.analytics.util.DataSet; import org.onap.portalsdk.analytics.util.Utils; import org.onap.portalsdk.analytics.util.XSSFilter; import org.onap.portalsdk.analytics.view.ReportData; import org.onap.portalsdk.analytics.xmlobj.DataColumnType; import org.onap.portalsdk.analytics.xmlobj.FormFieldType; import org.onap.portalsdk.analytics.xmlobj.ObjectFactory; import org.onap.portalsdk.analytics.xmlobj.PredefinedValueList; import org.onap.portalsdk.analytics.xmlobj.SemaphoreList; import org.onap.portalsdk.core.controller.RestrictedBaseController; import org.onap.portalsdk.core.domain.User; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.portalsdk.core.util.SecurityCodecUtil; import org.onap.portalsdk.core.web.support.UserUtils; import org.owasp.esapi.ESAPI; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; @Controller @RequestMapping("/") public class RaptorControllerAsync extends RestrictedBaseController { private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RaptorControllerAsync.class); private static final String INVALID_ACTION = "[Controller.processRequest]Invalid raptor action ["; private static final String UNABLE_INSTANTIATE = "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "; private String viewName; @GetMapping(value = { "/raptor.htm" }) public void RaptorSearch(HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException { viewName = ""; String actionKey = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action")); actionKey = nvl(actionKey, "report.run"); HttpSession session = request.getSession(); User user = UserUtils.getUserSession(request); boolean isPageDownload = Boolean.valueOf(request.getParameter(AppConstants.PAGE_DOWNLOAD)); if ("report.download.excel2007.session".equals(actionKey) || "report.download.csv.session".equals(actionKey) || "report.download.excel.session".equals(actionKey) || "report.download.pdf.session".equals(actionKey)) { if (session != null && user != null) { ServletContext servletContext = request.getSession().getServletContext(); if (!Globals.isSystemInitialized()) { Globals.initializeSystem(servletContext); } ReportRuntime rr = null; ReportData rd = null; String parent = ""; int parentFlag = 0; if (!"N".equals(nvl(request.getParameter("parent"), ""))) parent = nvl(request.getParameter("parent"), ""); if (parent.startsWith("parent_")) parentFlag = 1; if (parentFlag == 1) { rr = (ReportRuntime) request.getSession().getAttribute(parent + "_rr"); rd = (ReportData) request.getSession().getAttribute(parent + "_rd"); } boolean isEmbedded = false; Object temp = request.getSession().getAttribute("isEmbedded"); if (temp != null) { isEmbedded = (boolean) temp; } if (isEmbedded) { String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID); if (rr == null) rr = (ReportRuntime) ((HashMap) request.getSession() .getAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP)).get(reportID); if (rd == null) rd = (ReportData) ((HashMap) request.getSession() .getAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP)).get(reportID); } else { if (rr == null) rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); if (rd == null) rd = (ReportData) request.getSession().getAttribute(AppConstants.RI_REPORT_DATA); } String userId = AppUtils.getUserID(request); int downloadLimit = 0; if (rr != null) downloadLimit = (rr.getMaxRowsInExcelDownload() > 0) ? rr.getMaxRowsInExcelDownload() : Globals.getDownloadLimit(); if ("report.csv.download".equals(actionKey)) downloadLimit = Globals.getCSVDownloadLimit(); final boolean isDashboard = (session.getAttribute(AppConstants.SI_DASHBOARD_REP_ID) != null) && (((String) session.getAttribute(AppConstants.SI_DASHBOARD_REP_ID)).equals(rr.getReportID())); if(!isDashboard) { String sql_whole = rr.getReportDataSQL(userId, downloadLimit, request); request.setAttribute(AppConstants.RI_REPORT_SQL_WHOLE, sql_whole); } try { OutputStreamWriter out = new OutputStreamWriter(response.getOutputStream()); if(rr != null) rr.setSinglePageDownload(isPageDownload); if ("report.download.pdf.session".equals(actionKey)) { new PdfReportHandler().createPdfFileContent(request, response, 3); } else if ("report.download.csv.session".equals(actionKey)) { (new ReportHandler()).createCSVFileContent(out, rd, rr, request, response); } else if ("report.download.excel.session".equals(actionKey)) { new ReportHandler().createExcelFileContent(out, rd, rr, request, response, userId, 3); } else { new ReportHandler().createExcel2007FileContent(out, rd, rr, request, response, userId, 3); } } catch (Exception e) { logger.error(EELFLoggerDelegate.errorLogger, INVALID_ACTION + actionKey + "].", e); } } else { response.sendRedirect("login.htm"); } } else { if (session != null && user != null) { Action action = null; ServletContext servletContext = request.getSession().getServletContext(); if (!Globals.isSystemInitialized()) { Globals.initializeSystem(servletContext); } try { action = Globals.getRaptorActionMapping().getAction(actionKey); if (action == null) throw new RaptorRuntimeException("Action not found"); } catch (RaptorException e) { logger.error(EELFLoggerDelegate.errorLogger, INVALID_ACTION + actionKey + "].", e); viewName = (new ErrorHandler()).processFatalErrorJSON(request, new RaptorRuntimeException(INVALID_ACTION + actionKey + "]. Exception: " + e.getMessage())); } try { Class[] paramTypes = new Class[2]; paramTypes[0] = Class.forName("javax.servlet.http.HttpServletRequest"); paramTypes[1] = Class.forName("java.lang.String"); Class handlerClass = Class.forName(action.getControllerClass()); Object handler = handlerClass.newInstance(); Method handlerMethod = handlerClass.getMethod(action.getControllerMethod(), paramTypes); Object[] paramValues = new Object[2]; paramValues[0] = request; paramValues[1] = action.getJspName(); ; viewName = (String) handlerMethod.invoke(handler, paramValues); if (!"chart.run".equals(actionKey)) response.setContentType("application/json"); else response.setContentType("text/html"); } catch (ClassNotFoundException e) { logger.debug(EELFLoggerDelegate.debugLogger, (INVALID_ACTION + actionKey + "]. ClassNotFoundException: " + e.getMessage())); viewName = (new ErrorHandler()).processFatalErrorJSON(request, new RaptorRuntimeException(UNABLE_INSTANTIATE + e.getMessage())); } catch (IllegalAccessException e) { logger.debug(EELFLoggerDelegate.debugLogger, (INVALID_ACTION + actionKey + "]. IllegalAccessException: " + e.getMessage())); viewName = (new ErrorHandler()).processFatalErrorJSON(request, new RaptorRuntimeException(UNABLE_INSTANTIATE + e.getMessage())); } catch (InstantiationException e) { logger.debug(EELFLoggerDelegate.debugLogger, (INVALID_ACTION + actionKey + "]. InstantiationException: " + e.getMessage())); viewName = (new ErrorHandler()).processFatalErrorJSON(request, new RaptorRuntimeException(UNABLE_INSTANTIATE + e.getMessage())); } catch (NoSuchMethodException e) { logger.debug(EELFLoggerDelegate.debugLogger, (INVALID_ACTION + actionKey + "]. NoSuchMethodException: " + e.getMessage())); viewName = (new ErrorHandler()).processFatalErrorJSON(request, new RaptorRuntimeException(UNABLE_INSTANTIATE + e.getMessage())); } catch (InvocationTargetException e) { logger.debug(EELFLoggerDelegate.debugLogger, (INVALID_ACTION + actionKey + "]. InvocationTargetException: " + e.getMessage())); viewName = (new ErrorHandler()).processFatalErrorJSON(request, new RaptorRuntimeException(UNABLE_INSTANTIATE + e.getMessage())); } finally { PrintWriter out = response.getWriter(); out.write(viewName); } } else { PrintWriter out = response.getWriter(); out.write("session has timed out for user"); } } } @GetMapping(value = "/report/wizard/drill_down_param/{parameter}", produces = "application/json") public @ResponseBody List getDrillDownParamDef (@PathVariable("parameter") String parameter, HttpServletRequest request, HttpServletResponse response) { List list = new ArrayList<>(); String[] tmepArray = null; if(parameter!=null){ tmepArray = parameter.split("&"); } for(String str:tmepArray){ list.add(new DrillDownParamDef(str)); } return list; } @GetMapping(value = "/report/wizard/list_columns", produces = "application/json") public @ResponseBody ArrayList listColumns(HttpServletRequest request, HttpServletResponse response) { ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); List reportColumnList = rdef.getAllColumns(); ArrayList listJSON = new ArrayList<>(); ColumnJSON columnJSON; for (DataColumnType reportColumnType : reportColumnList) { columnJSON = new ColumnJSON(); columnJSON.setId(reportColumnType.getColId()); columnJSON.setName(reportColumnType.getDisplayName()); listJSON.add(columnJSON); } return listJSON; } @GetMapping(value = "/report/wizard/list_drilldown_reports", produces = "application/json") public @ResponseBody ArrayList list_drilldown_reports(HttpServletRequest request, HttpServletResponse response) throws RaptorException { ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); Vector publicReportIdNames = DataCache.getPublicReportIdNames(); Vector groupReportIdNames = DataCache.getGroupAccessibleReportIdNames(AppUtils.getUserID(request), AppUtils.getUserRoles(request)); Vector privateReportIdNames = DataCache.getPrivateAccessibleReportIdNames(AppUtils.getUserID(request), AppUtils.getUserRoles(request)); ArrayList listJSON = new ArrayList<>(); ColumnJSON columnJSON; ServletContext servletContext = request.getSession().getServletContext(); if (!Globals.isSystemInitialized()) { Globals.initializeSystem(servletContext); } for (int i = 0; i < publicReportIdNames.size(); i++) { IdNameValue reportIdName = publicReportIdNames.get(i); columnJSON = new ColumnJSON(); columnJSON.setId(reportIdName.getId()); columnJSON.setName("Public Report: " + reportIdName.getName()); if (!rdef.getReportID().equals(reportIdName.getId())) listJSON.add(columnJSON); } for (int i = 0; i < groupReportIdNames.size(); i++) { IdNameValue reportIdName = (IdNameValue) groupReportIdNames.get(i); columnJSON = new ColumnJSON(); columnJSON.setId(reportIdName.getId()); columnJSON.setName("Group Report: " + reportIdName.getName()); if (!rdef.getReportID().equals(reportIdName.getId())) listJSON.add(columnJSON); } for (int i = 0; i < privateReportIdNames.size(); i++) { IdNameValue reportIdName = (IdNameValue) privateReportIdNames.get(i); columnJSON = new ColumnJSON(); columnJSON.setId(reportIdName.getId()); columnJSON.setName("Private Report: " + reportIdName.getName()); if (!rdef.getReportID().equals(reportIdName.getId())) listJSON.add(columnJSON); } return listJSON; } @GetMapping(value = "/report/wizard/list_formfields", produces = "application/json") public @ResponseBody ArrayList listFormFields(HttpServletRequest request, HttpServletResponse response) { ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); ArrayList listJSON = new ArrayList<>(); SearchFieldJSON fieldJSON; if (rdef.getFormFieldList() != null) { for (Iterator iter = rdef.getFormFieldList().getFormField().iterator(); iter.hasNext();) { fieldJSON = new SearchFieldJSON(); FormFieldType fft = (FormFieldType) iter.next(); String fieldId = fft.getFieldId(); String fieldDisplay = fft.getFieldName(); fieldJSON.setId(fieldId); fieldJSON.setName(fieldDisplay); fieldJSON.setOrderSeq(fft.getOrderBySeq()); listJSON.add(fieldJSON); } } return listJSON; } @GetMapping(value = "/report/wizard/list_child_report_col/{reportID}", produces = "application/json") public @ResponseBody ArrayList listChildReportCols(@PathVariable("reportID") String reportID, HttpServletRequest request, HttpServletResponse response) throws RaptorException { ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, reportID, false); List reportColumnList = ddRr.getAllColumns(); ArrayList listJSON = new ArrayList<>(); ColumnJSON columnJSON; for (DataColumnType reportColumnType : reportColumnList) { columnJSON = new ColumnJSON(); columnJSON.setId(reportColumnType.getColId()); columnJSON.setName(reportColumnType.getColName()); listJSON.add(columnJSON); } return listJSON; } @GetMapping(value = "/report/wizard/list_child_report_ff/{reportID}", produces = "application/json") public @ResponseBody ArrayList listChildReportFormFields(@PathVariable("reportID") String reportID, HttpServletRequest request, HttpServletResponse response) throws RaptorException { ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, reportID, false); ArrayList listJSON = new ArrayList<>(); SearchFieldJSON fieldJSON; ReportFormFields ddReportFormFields = ddRr.getReportFormFields(); if (ddReportFormFields != null) { for (ddReportFormFields.resetNext(); ddReportFormFields.hasNext();) { FormField ff = ddReportFormFields.getNext(); if (!ff.getFieldType().equals(FormField.FFT_BLANK)) { fieldJSON = new SearchFieldJSON(); fieldJSON.setId(ff.getFieldName()); fieldJSON.setName(ff.getFieldDisplayName()); listJSON.add(fieldJSON); } } } return listJSON; } @GetMapping(value = "report/wizard/copy_report/{reportID}", produces = "application/json") public @ResponseBody MessageJSON copyReport(@PathVariable("reportID") String reportID, HttpServletRequest request, HttpServletResponse response){ MessageJSON messageJSON = new MessageJSON(); try { ReportHandler rh = new ReportHandler(); ReportDefinition rdef = rh.loadReportDefinition(request, reportID); rdef.setAsCopy(request); request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef); request.getSession().setAttribute("COPY_REPORT_EVENT", "true"); messageJSON.setMessage("Success- Report Copied."); messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB."); } catch (RaptorException e) { request.setAttribute("error_extra_msg", "While copying report " + reportID); messageJSON.setMessage("Failed - While copying report " + reportID); messageJSON.setAnyStacktrace(getStackTrace(e)); logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [copyReport]. RaptorException: " + e.getMessage())); return messageJSON; } return messageJSON; } @PostMapping(value = "report/wizard/import_report", consumes = "application/json") public @ResponseBody MessageJSON importReport(@RequestBody ImportJSON importJSON, HttpServletRequest request, HttpServletResponse response) { MessageJSON messageJSON = new MessageJSON(); try { String reportXML = importJSON.getReportXML(); ReportHandler rh = new ReportHandler(); ReportDefinition rdef = rh.createReportDefinition(request, "-1", reportXML); rdef.updateReportDefType(); rdef.generateWizardSequence(request); rdef.setReportName("Import: " + rdef.getReportName()); rdef.clearAllDrillDowns(); request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef); messageJSON.setMessage("Success- Report imported."); messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB."); } catch (RaptorException e) { request.setAttribute("error_extra_msg", "Unable to parse XML. Nested error: "); messageJSON.setMessage("Unable to parse XML. Nested error: "); messageJSON.setAnyStacktrace(getStackTrace(e)); return messageJSON; } return messageJSON; } @GetMapping(value = "report/wizard/get_formfield_groups_data/{id}") public @ResponseBody FormFieldGroupsJSON getFFGroupsData(@PathVariable Map pathVariables, HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException { FormFieldGroupsJSON formFieldGroupsJSON = new FormFieldGroupsJSON(); if (pathVariables.containsKey("id")) { formFieldGroupsJSON.setReportId(pathVariables.get("id")); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); if (rdef != null && !rdef.getReportID().equals(formFieldGroupsJSON.getReportId())) { removeVariablesFromSession(request); rdef = (new ReportHandler()).loadReportDefinition(request, formFieldGroupsJSON.getReportId()); } else if (rr != null && !rr.getReportID().equals(formFieldGroupsJSON.getReportId())) { removeVariablesFromSession(request); rdef = (new ReportHandler()).loadReportDefinition(request, formFieldGroupsJSON.getReportId()); } else if (rdef == null) { rdef = (new ReportHandler()).loadReportDefinition(request, formFieldGroupsJSON.getReportId()); } if(rdef != null) { formFieldGroupsJSON.setFormFieldGroupsJSON(rdef.getCustomReport().getFormFieldGroupsJSON()); formFieldGroupsJSON.setMessage("Success"); } else { formFieldGroupsJSON.setErrorMessage("Unable to load report definition for Report ID:"+formFieldGroupsJSON.getReportId()); } } else { formFieldGroupsJSON.setErrorMessage("Report ID missing in the URL"); } return formFieldGroupsJSON; } @GetMapping(value = "report/wizard/clearSession") public @ResponseBody MessageJSON clearSession(HttpServletRequest request, HttpServletResponse response) { MessageJSON messageJSON = new MessageJSON(); removeVariablesFromSession(request); request.getSession().setAttribute("COPY_REPORT_EVENT", ""); messageJSON.setMessage("CopyReport Cancelled"); return messageJSON; } @PostMapping(value = "report/wizard/save_formfield_groups_data") public @ResponseBody MessageJSON saveFFGroupsData(@RequestBody FormFieldGroupsJSON formFieldGroupsJSON, HttpServletRequest request, HttpServletResponse response) throws IOException, RaptorException { MessageJSON messageJSON = new MessageJSON(); if(formFieldGroupsJSON != null && formFieldGroupsJSON.getReportId() != null) { ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); if (rdef != null && !rdef.getReportID().equals(formFieldGroupsJSON.getReportId())) { removeVariablesFromSession(request); rdef = (new ReportHandler()).loadReportDefinition(request, formFieldGroupsJSON.getReportId()); } else if (rr != null && !rr.getReportID().equals(formFieldGroupsJSON.getReportId())) { removeVariablesFromSession(request); rdef = (new ReportHandler()).loadReportDefinition(request, formFieldGroupsJSON.getReportId()); } else if (rdef == null) { rdef = (new ReportHandler()).loadReportDefinition(request, formFieldGroupsJSON.getReportId()); } if (rdef != null) { rdef.getCustomReport().setFormFieldGroupsJSON(formFieldGroupsJSON.getFormFieldGroupsJSON()); try { persistReportDefinition(request, rdef); messageJSON.setMessage("Success: formfield groups have been updated for report ID:"+rdef.getReportID() +" and added to session and DB."); } catch (Exception ex) { messageJSON.setMessage("Error occured while saving formfield groups data"); messageJSON.setAnyStacktrace(getStackTrace(ex)); } } else { messageJSON.setMessage("Unable to load report definition for Report ID:"+formFieldGroupsJSON.getReportId()); } } else { messageJSON.setMessage("Report ID missing in the request body."); } return messageJSON; } @PostMapping(value = "report/wizard/save_formfield_tab_data") public @ResponseBody MessageJSON saveFFTabWiseData(@RequestBody FormEditJSON formEditJSON, HttpServletRequest request, HttpServletResponse response) { ReportDefinition rdef = null; rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); MessageJSON messageJSON = new MessageJSON(); try { if (rdef != null) { String fieldId = formEditJSON.getFieldId(); boolean lastUpdateIdFlag = false; if (rdef.getFormFieldList() != null) { // fft.getlastUpdatedFieldId() for (FormFieldType fft : rdef.getFormFieldList().getFormField()) { System.out.println(fft.getFieldId() + " " + fft.getFieldName() + " " + fft.getlastUpdatedFieldId() + " " + formEditJSON.getLastUpdatedFieldId() ); if (fft.getFieldId().equals(fieldId) && !lastUpdateIdFlag) { fft.setFieldId(formEditJSON.getLastUpdatedFieldId() != null ? formEditJSON.getLastUpdatedFieldId() : fft.getFieldId()); fft.setFieldName(formEditJSON.getFieldName()); fft.setFieldType(formEditJSON.getFieldType()); fft.setVisible(formEditJSON.isVisible() ? "Y" : "N"); fft.setDefaultValue(formEditJSON.getDefaultValue()); fft.setFieldDefaultSQL(formEditJSON.getFieldDefaultSQL()); fft.setFieldSQL(formEditJSON.getFieldSQL()); fft.setValidationType(formEditJSON.getValidationType()); fft.setGroupFormField(formEditJSON.isGroupFormField()); fft.setOrderBySeq(formEditJSON.getOrderSeq()); // clear predefined value PredefinedValueList predefinedValueList = new ObjectFactory().createPredefinedValueList(); fft.setPredefinedValueList(predefinedValueList); fft.setlastUpdatedFieldId("Y"); lastUpdateIdFlag = true; List predefList = formEditJSON.getPredefinedValueList(); if (predefList != null && predefList.size() > 0) { for (IdNameBooleanJSON item : predefList) { fft.getPredefinedValueList().getPredefinedValue().add(item.getId()); } } int cnt=0; for (FormFieldType fft1 : rdef.getFormFieldList().getFormField()) { if(fft1.getlastUpdatedFieldId().equals("Y")) { cnt++; } if(cnt >= 2) { for (FormFieldType fft2 : rdef.getFormFieldList().getFormField()) { fft2.setlastUpdatedFieldId("N"); } cnt = 0; } } } System.out.println(fft.getFieldId() + " " + fft.getFieldName() + " " + fft.getlastUpdatedFieldId() + " " + formEditJSON.getLastUpdatedFieldId() ); } } persistReportDefinition(request, rdef); messageJSON.setMessage("Success formfield Details of given report is saved in session."); messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB."); } else { messageJSON.setMessage("Report Definition is not in session"); messageJSON.setAnyStacktrace("Report Definition is not in session"); } } catch (Exception ex) { messageJSON.setMessage("Error occured while formfield details Tab"); messageJSON.setAnyStacktrace(getStackTrace(ex)); return messageJSON; } return messageJSON; } @PostMapping(value = "report/wizard/add_formfield_tab_data") public @ResponseBody MessageJSON addFFTabWiseData(@RequestBody FormEditJSON formEditJSON, HttpServletRequest request, HttpServletResponse response) { ReportDefinition rdef; rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); MessageJSON messageJSON = new MessageJSON(); try { if (rdef != null) { FormEditJSON wizardJSON = new FormEditJSON(); wizardJSON.setTabId("FormEdit"); wizardJSON.setTabName("Form Edit"); String fieldId =""; if(rdef.getFormFieldList()==null || rdef.getFormFieldList().getFormField()==null || rdef.getFormFieldList().getFormField().size()==0) fieldId = "ff1"; else { int maxFormFieldSeq = 0; for(FormFieldType ffType : rdef.getFormFieldList().getFormField()) { if(Integer.parseInt(ffType.getFieldId().substring(2)) > maxFormFieldSeq) { maxFormFieldSeq = Integer.parseInt(ffType.getFieldId().substring(2)); } } maxFormFieldSeq++; fieldId = "ff"+ maxFormFieldSeq; } FormFieldType currField = rdef.addFormFieldType(new ObjectFactory(), "", "", "", "", "", "", "", "", null, null, "",""); currField.setFieldId(fieldId); currField.setFieldName(formEditJSON.getFieldName()); currField.setFieldType(formEditJSON.getFieldType()==null?null:formEditJSON.getFieldType()); currField.setVisible(formEditJSON.isVisible()?"Y":"N"); currField.setDefaultValue(formEditJSON.getDefaultValue()); currField.setFieldDefaultSQL(formEditJSON.getFieldDefaultSQL()); currField.setFieldSQL(formEditJSON.getFieldSQL()); currField.setValidationType(formEditJSON.getValidationType()); currField.setGroupFormField(formEditJSON.isGroupFormField()); persistReportDefinition(request, rdef); messageJSON.setMessage("Success formfield Details of given report is saved in session."); messageJSON.setAnyStacktrace(rdef.getReportID() + " is added to session and DB."); } else { messageJSON.setMessage("Report Definition is not in session"); messageJSON.setAnyStacktrace("Report Definition is not in session"); } } catch (Exception ex) { messageJSON.setMessage("Error occured while formfield details Tab"); messageJSON.setAnyStacktrace(getStackTrace(ex)); return messageJSON; } return messageJSON; } @PostMapping(value = "report/wizard/save_col_tab_data") public @ResponseBody MessageJSON saveColTabWiseData(@RequestBody ColumnEditJSON columnEditJSON, HttpServletRequest request, HttpServletResponse response) { ReportDefinition rdef; rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); MessageJSON messageJSON = new MessageJSON(); try { if (rdef != null) { String colId = columnEditJSON.getColId(); List reportColumnList = rdef.getAllColumns(); rdef.setSemaphoreList(columnEditJSON.getSemaphoreList()); for (DataColumnType reportColumnType : reportColumnList) { if (reportColumnType.getColId().equals(colId)) { reportColumnType.setColName(columnEditJSON.getColName()); reportColumnType.setDependsOnFormField(columnEditJSON.getDepeondsOnForField()==null?"":columnEditJSON.getDepeondsOnForField()); reportColumnType.setColType(columnEditJSON.getDataType()==null?"":columnEditJSON.getDataType()); reportColumnType.setDbColName(columnEditJSON.getDataType()==null?"":columnEditJSON.getDataType()); reportColumnType.setGroupByPos(columnEditJSON.getGroupByPos()); reportColumnType.setSubTotalCustomText(columnEditJSON.getSubTotalCustomText()); reportColumnType.setHideRepeatedKey(columnEditJSON.isHideRepeatedKey()); reportColumnType.setLevel(columnEditJSON.getLevel()); reportColumnType.setColspan(columnEditJSON.getColspan()); reportColumnType.setDisplayName(columnEditJSON.getDisplayName()); reportColumnType.setDisplayWidthInPxls(columnEditJSON.getDisplayWidthInPixel()==null?null:String.valueOf(columnEditJSON.getDisplayWidthInPixel())); reportColumnType.setNowrap(columnEditJSON.getNoWrap()); reportColumnType.setIndentation(columnEditJSON.getIndentation()); reportColumnType.setDisplayAlignment(columnEditJSON.getDisplayAlignment()); reportColumnType.setDisplayHeaderAlignment(columnEditJSON.getDisplayHeaderAlignment()); reportColumnType.setIsSortable(columnEditJSON.isSortable()); reportColumnType.setVisible(columnEditJSON.isVisible()); reportColumnType.setDrillDownURL(columnEditJSON.getDrilldownURL()); reportColumnType.setDrillDownParams(columnEditJSON.getDrilldownParams()); reportColumnType.setDrillDownType(columnEditJSON.getDrilldownType()); if(columnEditJSON.getDisplayTotal()!=null) reportColumnType.setDisplayTotal(columnEditJSON.getDisplayTotal()); reportColumnType.setSemaphoreId(columnEditJSON.getSemaphoreId()); } } persistReportDefinition(request, rdef); messageJSON.setMessage("Success Column Details of given report is saved in session."); messageJSON.setAnyStacktrace(rdef.getReportID() + " is Modified and added to session and DB."); } else { messageJSON.setMessage("Report Definition is not in session"); messageJSON.setAnyStacktrace(""); } } catch (Exception ex) { messageJSON.setMessage("Error occured while saving column details Tab"); messageJSON.setAnyStacktrace(getStackTrace(ex)); return messageJSON; } return messageJSON; } @PostMapping(value = "report/wizard/save_def_tab_data/{id}") public @ResponseBody MessageJSON saveDefTabWiseData(@PathVariable("id") String id, @RequestBody DefinitionJSON definitionJSON, HttpServletRequest request, HttpServletResponse response) { ReportDefinition rdef; ReportRuntime rr; boolean newReport; MessageJSON messageJSON = new MessageJSON(); try { String copyReportEvent = (String)request.getSession().getAttribute("COPY_REPORT_EVENT"); if (id.equals("InSession") || "true".equals(copyReportEvent)) { rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); newReport = false; } else if (id.equals("Create")) { removeVariablesFromSession(request); rdef = (new ReportHandler()).loadReportDefinition(request, "-1"); newReport = true; System.out.println("&&&&&&&&&&&&&&&&&&&&&& CHECK Report Type " + (AppUtils.nvl(rdef.getReportType()).length() <= 0)); rdef.setReportType(definitionJSON.getReportType()); if (AppUtils.nvl(rdef.getReportType()).length() <= 0) { rdef.setReportType(AppConstants.RT_LINEAR); System.out.println("&&&&&&&&&&&&&&&&&&&&&& ADDED Report Type in session "); } } else if (AppUtils.nvl(id).length() > 0) { rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); if (rdef != null && !rdef.getReportID().equals(id)) { request.getSession().removeAttribute(AppConstants.SI_REPORT_DEFINITION); removeVariablesFromSession(request); rdef = (new ReportHandler()).loadReportDefinition(request, id); } else if (rr != null && !rr.getReportID().equals(id)) { request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME); removeVariablesFromSession(request); rdef = (new ReportHandler()).loadReportDefinition(request, id); } else if (rdef == null) { rdef = (new ReportHandler()).loadReportDefinition(request, id); } newReport = false; } else { rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); newReport = true; } // } if (rdef != null) { String reportName = definitionJSON.getReportName(); String errorString = ""; if (AppUtils.nvl(reportName).length() <= 0) errorString = "ReportName cannot be null;"; rdef.setReportName(reportName); rdef.setReportDescr(definitionJSON.getReportDescr()); rdef.setReportType(definitionJSON.getReportType()); rdef.setDataContainerHeight(definitionJSON.getDataContainerHeight()); rdef.setDataContainerWidth(definitionJSON.getDataContainerWidth()); if(definitionJSON.getAllowScheduler()!=null) rdef.setAllowSchedule(definitionJSON.getAllowScheduler().equals("Y")?"Y":"N"); if(rdef.getReportType().equals(AppConstants.RT_DASHBOARD)){ rdef.setDashboardLayoutHTML(definitionJSON.getDashboardLayoutHTML()); rdef.getCustomReport().setDashboardLayoutJSON(definitionJSON.getDashboardLayoutJSON()); rdef.getCustomReport().setDashBoardReports(definitionJSON.getDashboardReports()); } else { String dbInfo = definitionJSON.getDbInfo(); rdef.setDBInfo(dbInfo); //save dbType String schemaSql = Globals.getRemoteDbSchemaSqlWithWhereClause(); schemaSql = schemaSql.replace("[schema_id]", dbInfo); String dbType = null; DataSet ds = null; try { ds = DbUtils.executeQuery(schemaSql); String prefix = "", desc = ""; for (int i = 0; i < ds.getRowCount(); i++) { dbType = ds.getItem(i, 2); } } catch (Exception e) {} rdef.setDBType(dbType); String formHelpText = definitionJSON.getFormHelpText(); rdef.setFormHelpText(formHelpText); Integer pageSize = definitionJSON.getPageSize(); if(pageSize!=null) rdef.setPageSize(pageSize); List menuIds = definitionJSON.getDisplayArea(); if(menuIds!=null){ for (IdNameBooleanJSON menuId : menuIds) { if (menuId.isSelected()) { rdef.setMenuID(menuId.getName()); } } } Boolean hideFormFieldsAfterRun = definitionJSON.getHideFormFieldsAfterRun(); rdef.setHideFormFieldAfterRun(hideFormFieldsAfterRun==null?false:hideFormFieldsAfterRun); Integer maxRowsInExcelCSVDownload = definitionJSON.getMaxRowsInExcelCSVDownload(); if(maxRowsInExcelCSVDownload!=null) rdef.setMaxRowsInExcelDownload(maxRowsInExcelCSVDownload); Integer frozenColumns = definitionJSON.getFrozenColumns(); if(frozenColumns!=null) rdef.setFrozenColumns(frozenColumns); String dataGridAlign = definitionJSON.getDataGridAlign(); rdef.setDataGridAlign(dataGridAlign); String emptyMessage = definitionJSON.getEmptyMessage(); rdef.setEmptyMessage(emptyMessage); Boolean runtimeColSortDisabled = definitionJSON.getRuntimeColSortDisabled(); rdef.setRuntimeColSortDisabled(runtimeColSortDisabled==null?false:runtimeColSortDisabled); Integer numFormCols = definitionJSON.getNumFormCols(); if(numFormCols!=null) rdef.setNumFormCols(Integer.toString(numFormCols)); String reportTitle = definitionJSON.getReportTitle(); rdef.setReportTitle(reportTitle); String reportSubTitle = definitionJSON.getReportSubTitle(); rdef.setReportSubTitle(reportSubTitle); List displayOptions = definitionJSON.getDisplayOptions(); StringBuffer displayOptionStr = new StringBuffer("NNNNNNN"); if(displayOptions!=null){ for (NameBooleanJSON displayOption : displayOptions) { if (displayOption.isSelected()) { if (displayOption.getName().equals("HideFormFields")) { displayOptionStr.setCharAt(0, 'Y'); } else if (displayOption.getName().equals("HideChart")) { displayOptionStr.setCharAt(1, 'Y'); } else if (displayOption.getName().equals("HideReportData")) { displayOptionStr.setCharAt(2, 'Y'); } else if (displayOption.getName().equals("HideExcel")) { displayOptionStr.setCharAt(5, 'Y'); } else if (displayOption.getName().equals("HidePdf")) { displayOptionStr.setCharAt(6, 'Y'); } } } } if(displayOptionStr!=null) rdef.setDisplayOptions(displayOptionStr.toString()); if(definitionJSON.getSizedByContent()!=null) rdef.setSizedByContent(definitionJSON.getSizedByContent().equals("Y")?"Y":"N"); if(definitionJSON.getOneTimeRec()!=null) rdef.setIsOneTimeScheduleAllowed(definitionJSON.getOneTimeRec().equals("true")?"Y":"N"); if(definitionJSON.getHourlyRec()!=null) rdef.setIsHourlyScheduleAllowed(definitionJSON.getHourlyRec().equals("true")?"Y":"N"); if(definitionJSON.getDailyRec()!=null) rdef.setIsDailyScheduleAllowed(definitionJSON.getDailyRec().equals("true")?"Y":"N"); if(definitionJSON.getDailyMFRec()!=null) rdef.setIsDailyMFScheduleAllowed(definitionJSON.getDailyMFRec().equals("true")?"Y":"N"); if(definitionJSON.getWeeklyRec()!=null) rdef.setIsWeeklyScheduleAllowed(definitionJSON.getWeeklyRec().equals("true")?"Y":"N"); if(definitionJSON.getMonthlyRec()!=null) rdef.setIsMonthlyScheduleAllowed(definitionJSON.getMonthlyRec().equals("true")?"Y":"N"); } } if (id.equals("Create")) { rdef.persistReport(request); } else persistReportDefinition(request, rdef); messageJSON.setMessage("Success Definition of given report is saved in session."); messageJSON.setAnyStacktrace((newReport ? " New Report info is added to Session " : rdef.getReportID() + "- is Modified and added to session and DB.")); if(rdef.getReportType() != null) { if(rdef.getReportType().equals("Dashboard") && id.equals("Create")) { messageJSON.setAnyStacktrace(rdef.getReportID() + "- is Modified and added to session and DB."); } } if(request.getSession().getAttribute("COPY_REPORT_EVENT") == "true" || (rdef.getReportType().equals("Dashboard") && id.equals("Create")) ) { removeVariablesFromSession(request); request.getSession().setAttribute("COPY_REPORT_EVENT", ""); } } catch (Exception ex) { messageJSON.setMessage("Error occured while saving definition Tab"); messageJSON.setAnyStacktrace(getStackTrace(ex)); logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveTabWiseData].", ex); return messageJSON; } return messageJSON; } @GetMapping(value = { "/report/wizard/retrieve_form_tab_wise_data/{id}", "/report/wizard/retrieve_form_tab_wise_data/{id}/{action}" }) public @ResponseBody FormEditJSON retrieveFormTabWiseData(@PathVariable Map pathVariables, HttpServletRequest request, HttpServletResponse response) { ReportDefinition rdef; String id = ""; String action = ""; String detailId = ""; FormEditJSON wizardJSON = new FormEditJSON(); rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); if (pathVariables.containsKey("id")) { id = pathVariables.get("id"); } if (pathVariables.containsKey("action")) { action = pathVariables.get("action"); } ServletContext servletContext = request.getSession().getServletContext(); if (!Globals.isSystemInitialized()) { Globals.initializeSystem(servletContext); } wizardJSON.setTabId("FormEdit"); wizardJSON.setTabName("Form Edit"); FormFieldType currField = null; try { if (id.equals("add")) { currField = rdef.addFormFieldType(new ObjectFactory(), "", "", "", "", "", "", "", "", null, null, "", ""); wizardJSON.setFieldId(currField.getFieldId()); wizardJSON.setFieldName(currField.getFieldName()); wizardJSON.setFieldType(currField.getFieldType()); wizardJSON.setVisible(AppUtils.nvls(currField.getVisible(), "Y").toUpperCase().startsWith("Y")); wizardJSON.setDefaultValue(currField.getDefaultValue()); wizardJSON.setFieldDefaultSQL(currField.getFieldDefaultSQL()); wizardJSON.setFieldSQL(currField.getFieldSQL()); wizardJSON.setValidationType(currField.getValidationType()); persistReportDefinition(request, rdef); } else if (action.equals("delete")) { rdef.deleteFormField(id); persistReportDefinition(request, rdef); wizardJSON.setMessage("Formfield " + detailId + " Deleted"); } if (rdef.getFormFieldList() != null) { for (FormFieldType fft : rdef.getFormFieldList().getFormField()) { if (fft.getFieldId().equals(id)) { wizardJSON.setFieldId(fft.getFieldId()); wizardJSON.setFieldName(fft.getFieldName()); wizardJSON.setFieldType(fft.getFieldType()); wizardJSON.setVisible(fft.getVisible().toUpperCase().startsWith("Y")); wizardJSON.setDefaultValue(fft.getDefaultValue()); wizardJSON.setFieldDefaultSQL(fft.getFieldDefaultSQL()); wizardJSON.setFieldSQL(fft.getFieldSQL()); wizardJSON.setValidationType(fft.getValidationType()); wizardJSON.setGroupFormField(fft.isGroupFormField()); wizardJSON.setOrderSeq(fft.getOrderBySeq()); PredefinedValueList preDefined = fft.getPredefinedValueList(); if (preDefined != null) { List preDefinedList = new ArrayList<>(); IdNameBooleanJSON idNameBooleanJSON; for (String v : preDefined.getPredefinedValue()) { idNameBooleanJSON = new IdNameBooleanJSON(); idNameBooleanJSON.setId(v); idNameBooleanJSON.setName(v); preDefinedList.add(idNameBooleanJSON); } wizardJSON.setPredefinedValueList(preDefinedList); } } } } } catch (Exception ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveFormTabWiseData].", ex); ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime(); errorJSONRuntime.setErrormessage("Error occured while retreiving formedit definition Tab"); errorJSONRuntime.setStacktrace(getStackTrace(ex)); wizardJSON.setErrorMessage("Error occured while retreiving formedit definition Tab"); wizardJSON.setErrorStackTrace(getStackTrace(ex)); } return wizardJSON; } @GetMapping(value = { "/report/wizard/retrieve_col_tab_wise_data/{id}" }) public @ResponseBody ColumnEditJSON retrieveColTabWiseData(@PathVariable Map pathVariables, HttpServletRequest request, HttpServletResponse response) { ReportDefinition rdef; String id = ""; ColumnEditJSON wizardJSON = new ColumnEditJSON(); rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); if (pathVariables.containsKey("id")) { id = pathVariables.get("id"); } ServletContext servletContext = request.getSession().getServletContext(); if (!Globals.isSystemInitialized()) { Globals.initializeSystem(servletContext); } if (rdef != null) { if(rdef.getSemaphoreList() != null) { wizardJSON.setSemaphoreList(rdef.getSemaphoreList()); }else { wizardJSON.setSemaphoreList(new SemaphoreList()); } wizardJSON.setTabId("ColEdit"); wizardJSON.setTabName("Column Edit"); List reportColumnList = rdef.getAllColumns(); for (DataColumnType reportColumnType : reportColumnList) { if (reportColumnType.getColId().equals(id)) { wizardJSON.setColId(reportColumnType.getColId()); wizardJSON.setColName(reportColumnType.getColName()); wizardJSON.setDisplayAlignment(reportColumnType.getDisplayAlignment()); wizardJSON.setDisplayHeaderAlignment(reportColumnType.getDisplayHeaderAlignment()); wizardJSON.setSortable( reportColumnType.isIsSortable() == null ? false : reportColumnType.isIsSortable()); wizardJSON.setVisible(reportColumnType.isVisible()); wizardJSON.setDrilldownURL( reportColumnType.getDrillDownURL() == null ? "" : reportColumnType.getDrillDownURL()); wizardJSON.setDrilldownParams( reportColumnType.getDrillDownParams() == null ? "" : reportColumnType.getDrillDownParams()); wizardJSON.setDrilldownType( reportColumnType.getDrillDownType() == null ? "" : reportColumnType.getDrillDownType()); wizardJSON.setDataType(reportColumnType.getDbColType() == null ? "" :reportColumnType.getDbColType()); wizardJSON.setGroupByPos(reportColumnType.getGroupByPos()); wizardJSON.setLevel(reportColumnType.getLevel()); wizardJSON.setDisplayWidth(reportColumnType.getDisplayWidth()); wizardJSON.setNoWrap(reportColumnType.getNowrap() == null ? "" : reportColumnType.getNowrap()); wizardJSON.setIndentation(reportColumnType.getIndentation()); wizardJSON.setDepeondsOnForField(reportColumnType.getDependsOnFormField() ==null?"":reportColumnType.getDependsOnFormField()); wizardJSON.setSubTotalCustomText(reportColumnType.getSubTotalCustomText()==null?"":reportColumnType.getSubTotalCustomText()); wizardJSON.setHideRepeatedKey(reportColumnType.isHideRepeatedKey()==null?false:reportColumnType.isHideRepeatedKey()); wizardJSON.setColspan(reportColumnType.getColspan()==null?null:reportColumnType.getColspan()); wizardJSON.setDisplayName(reportColumnType.getDisplayName()); wizardJSON.setDisplayTotal(reportColumnType.getDisplayTotal()); wizardJSON.setSemaphoreId(reportColumnType.getSemaphoreId()); } } } else { wizardJSON.setErrorMessage("Report is not in session"); } return wizardJSON; } @GetMapping(value = { "/report/wizard/retrieve_sql_tab_wise_data/{id}", "/report/wizard/retrieve_sql_tab_wise_data/" }) public @ResponseBody QueryJSON retrieveSqlTabWiseData(@PathVariable Map pathVariables, HttpServletRequest request, HttpServletResponse response) throws RaptorException { ReportDefinition rdef = null; ReportRuntime rr; String id = ""; QueryJSON wizardJSON = new QueryJSON(); if (pathVariables.containsKey("id")) { id = pathVariables.get("id"); } ServletContext servletContext = request.getSession().getServletContext(); if (!Globals.isSystemInitialized()) { Globals.initializeSystem(servletContext); } if (id.equals("InSession") || AppUtils.nvl(id).length() <= 0) { rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); } else if (AppUtils.nvl(id).length() > 0) { rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); if (rdef != null && !rdef.getReportID().equals(id)) { request.getSession().removeAttribute(AppConstants.SI_REPORT_DEFINITION); removeVariablesFromSession(request); rdef = (new ReportHandler()).loadReportDefinition(request, id); } else if (rr != null && !rr.getReportID().equals(id)) { request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME); removeVariablesFromSession(request); rdef = (new ReportHandler()).loadReportDefinition(request, id); } else if (rdef == null) { rdef = (new ReportHandler()).loadReportDefinition(request, id); } } if (rdef != null) { wizardJSON.setTabId("Sql"); wizardJSON.setTabName("Sql"); wizardJSON.setQuery(rdef.getReportSQL()); } return wizardJSON; } @GetMapping(value = { "/report/wizard/retrieveTotalForTheColList" }) public @ResponseBody List getTotalForTheCol(HttpServletRequest request) { IdNameList idNameList = AppConstants.TOTAL_FUNCTIONS; List list = new ArrayList<>(); for(int i=0; i getReportUserList(HttpServletRequest request) throws RaptorException { List reportUserList = new ArrayList<>(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); Vector reportUsers = rdef.getReportUsers(request); for(Iterator iter=reportUsers.iterator(); iter.hasNext();) { SecurityEntry rUser = (SecurityEntry) iter.next(); reportUserList.add(rUser); } return reportUserList; }; @GetMapping(value = { "/report/wizard/security/retrieveReportRoleList" }) public @ResponseBody List getReportRoleList(HttpServletRequest request) throws RaptorException { List reportRoleList = new ArrayList<>(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); Vector reportRoles = rdef.getReportRoles(request); Vector remainingRoles = Utils.getRolesNotInList(reportRoles,request); for(int i=0; i> getReportUserListQuery(HttpServletRequest request) { List> reportUserList = new ArrayList(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); String reportId = rdef.getReportID(); Map params = new HashMap<>(); params.put("report_id", new Long(reportId)); List queriedUserList = getDataAccessService().executeNamedQuery("getReportSecurityUsers", params, null); for (int i=0; i reportUser = new HashMap<>(); reportUser.put("rep_id", queriedUserList.get(i).toString()); reportUser.put("order_no", queriedUserList.get(i).getOrderNo().toString()); reportUser.put("user_id", queriedUserList.get(i).getUserId().toString()); reportUser.put("role_id", queriedUserList.get(i).getRoleId().toString()); reportUser.put("read_only_yn", queriedUserList.get(i).getReadOnlyYn()); reportUserList.add(reportUser); } return reportUserList; }; @PostMapping(value = "/report/security/addReportUser") public @ResponseBody Map addSelectedReportUser( @RequestBody String userIdToAdd, HttpServletRequest request, HttpServletResponse response) { Map JsonResponse = new HashMap<>(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); try { JsonResponse.put("status","success"); JsonResponse.put("userId",userIdToAdd); String action = "Add User"; rdef.getReportSecurity().addUserAccess(userIdToAdd, "Y"); WizardSequence ws = rdef.getWizardSequence(); ws.performAction(action,rdef); return JsonResponse; } catch (Exception ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex); return null; } } @PostMapping(value = "/report/security/removeReportUser") public @ResponseBody Map removeSelectedReportUser( @RequestBody String userIdToRemove, HttpServletRequest request, HttpServletResponse response) { Map JsonResponse = new HashMap<>(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); try { JsonResponse.put("status","success"); JsonResponse.put("userId",userIdToRemove); String action = "Delete User"; rdef.getReportSecurity().removeUserAccess(userIdToRemove); rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); WizardSequence ws = rdef.getWizardSequence(); ws.performAction(action,rdef); return JsonResponse; } catch (Exception ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex); return null; } } @PostMapping(value = "/report/security/addReportRole") public @ResponseBody Map addSelectedReportRole( @RequestBody String roleIdToAdd, HttpServletRequest request, HttpServletResponse response) { Map JsonResponse = new HashMap<>(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); try { JsonResponse.put("status","success"); JsonResponse.put("roleId",roleIdToAdd); String action = "Add Role"; rdef.getReportSecurity().addRoleAccess(roleIdToAdd, "Y"); WizardSequence ws = rdef.getWizardSequence(); ws.performAction(action,rdef); return JsonResponse; } catch (Exception ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex); return null; } } @PostMapping(value = "/report/security/removeReportRole") public @ResponseBody Map removeSelectedReportRole( @RequestBody String roleIdToRemove, HttpServletRequest request, HttpServletResponse response) { Map JsonResponse = new HashMap<>(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); try { JsonResponse.put("status","success"); JsonResponse.put("roleId",roleIdToRemove); String action = "Delete Role"; rdef.getReportSecurity().removeRoleAccess(roleIdToRemove); WizardSequence ws = rdef.getWizardSequence(); ws.performAction(action,rdef); return JsonResponse; } catch (Exception ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex); return null; } } @PostMapping(value = "/report/security/updateReportSecurityInfo") public @ResponseBody Map updateReportSecurityInfo( @RequestBody Map securityInfo, HttpServletRequest request, HttpServletResponse response) { Map JsonResponse = new HashMap<>(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); try { JsonResponse.put("status","success"); String OwnerUserId = securityInfo.get("userId"); String isPublic = securityInfo.get("isPublic"); boolean rPublic = isPublic.equals("true"); rdef.getReportSecurity().setOwnerID(OwnerUserId); rdef.setPublic(rPublic); persistReportDefinition(request, rdef); return JsonResponse; } catch (Exception ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex); return null; } } @PostMapping(value = "/report/security/toggleUserEditAccess/{userID}") public @ResponseBody Map toggleUserEditAccess( @PathVariable("userID") String userId, @RequestBody String readOnly, HttpServletRequest request, HttpServletResponse response) { Map JsonResponse = new HashMap<>(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); try { String action =""; JsonResponse.put("status","success"); if (readOnly.equals("N")) { action = "Grant User Access"; } else { action = "Revoke User Access"; } rdef.getReportSecurity().updateUserAccess(userId, readOnly); WizardSequence ws = rdef.getWizardSequence(); ws.performAction(action,rdef); return JsonResponse; } catch (Exception ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex); return null; } }; @PostMapping(value = "/report/security/toggleRoleEditAccess/{roleID}") public @ResponseBody Map toggleRoleEditAccess( @PathVariable("roleID") String roleId, @RequestBody String readOnly, HttpServletRequest request, HttpServletResponse response) { Map JsonResponse = new HashMap<>(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); try { String action =""; JsonResponse.put("status","success"); if (readOnly.equals("N")) { action = "Grant Role Access"; } else { action = "Revoke Role Access"; } rdef.getReportSecurity().updateRoleAccess(roleId, readOnly); WizardSequence ws = rdef.getWizardSequence(); ws.performAction(action,rdef); return JsonResponse; } catch (Exception ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex); return null; } }; @GetMapping(value = { "/report/wizard/security/retrieveReportOwner" }) public @ResponseBody List getReportOwnerInList(HttpServletRequest request) throws RaptorException { ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); List UserList = new ArrayList<>(); List excludeValues = new java.util.ArrayList(); HttpSession session = request.getSession(); String query = Globals.getCustomizedScheduleQueryForUsers(); session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request)); String userId = AppUtils.getUserID(request); session.setAttribute("LOGGED_USERID", userId); String[] sessionParameters = Globals.getSessionParams().split(","); String param = ""; for (int i = 0; i < sessionParameters.length; i++) { param = (String) session.getAttribute(sessionParameters[0]); query = Utils.replaceInString(query, "[" + sessionParameters[i].toUpperCase() + "]", (String) session.getAttribute(sessionParameters[i])); } boolean isAdmin = AppUtils.isAdminUser(request); Vector allUsers = AppUtils.getAllUsers(query, param, isAdmin); for (Iterator iter = allUsers.iterator(); iter.hasNext();) { IdNameValue value = (IdNameValue) iter.next(); boolean exclude = false; for (Iterator iterE = excludeValues.iterator(); iterE.hasNext();) if (((IdNameValue) iterE.next()).getId().equals(value.getId())) { exclude = true; break; } // if if (!exclude) UserList.add(value); } // for return UserList; } @GetMapping(value = { "/report/wizard/security/getReportSecurityInfo" }) public @ResponseBody Map getReportSecurityInfo(HttpServletRequest request) { Map securityInfoMap = new HashMap<>(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); String isPublic = Boolean.toString(rdef.isPublic()); String createUser = AppUtils.getUserName(rdef.getCreateID()); String createDate = rdef.getCreateDate(); String updateUser = AppUtils.getUserName(rdef.getUpdateID()); String updateDate = rdef.getUpdateDate(); String ownerId = rdef.getOwnerID(); securityInfoMap.put("isPublic",isPublic); securityInfoMap.put("createdUser",createUser); securityInfoMap.put("createdDate",createDate); securityInfoMap.put("updateUser",updateUser); securityInfoMap.put("updatedDate",updateDate); securityInfoMap.put("ownerId",ownerId); return securityInfoMap; } @GetMapping(value = { "/report/wizard/security/getReportSecurityUsers" }) public @ResponseBody List getReportSecurityUsers(HttpServletRequest request) throws RaptorException { List reportUserMapList = new ArrayList<>(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); Vector reportUsers = rdef.getReportUsers(request); int iCount = 0; for(Iterator iter=reportUsers.iterator(); iter.hasNext(); iCount++) { Map reportUserMap = new HashMap<>(); SecurityEntry rUser = (SecurityEntry) iter.next(); reportUserMapList.add(rUser); } return reportUserMapList; } @GetMapping(value = { "/report/wizard/security/getReportSecurityRoles" }) public @ResponseBody List getReportSecurityRoles(HttpServletRequest request) throws RaptorException { List reportRoleList = new ArrayList<>(); ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); Vector reportRoles = rdef.getReportRoles(request); for(Iterator iter=reportRoles.iterator(); iter.hasNext(); ) { SecurityEntry rRole = (SecurityEntry) iter.next(); reportRoleList.add(rRole); } return reportRoleList; } @GetMapping(value = { "/report/wizard/retrieve_def_tab_wise_data/{id}", "/report/wizard/retrieve_def_tab_wise_data/{id}/{detailId}" }) public @ResponseBody DefinitionJSON retrieveDefTabWiseData(@PathVariable Map pathVariables, HttpServletRequest request, HttpServletResponse response) throws RaptorException { ReportDefinition rdef; ReportRuntime rr; String tabId = "Def"; String id = ""; if (pathVariables.containsKey("id")) { id = pathVariables.get("id"); } ServletContext servletContext = request.getSession().getServletContext(); if (!Globals.isSystemInitialized()) { Globals.initializeSystem(servletContext); } String copyReportEvent = (String)request.getSession().getAttribute("COPY_REPORT_EVENT"); if (tabId.equals("Def") && id.equals("InSession") || "true".equals(copyReportEvent)) { rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); } else if (tabId.equals("Def") && id.equals("Create")) { removeVariablesFromSession(request); rdef = (new ReportHandler()).loadReportDefinition(request, "-1"); rdef.setReportType(AppConstants.RT_LINEAR); } else if (tabId.equals("Def") && AppUtils.nvl(id).length() > 0) { rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); if (rdef != null && !rdef.getReportID().equals(id)) { request.getSession().removeAttribute(AppConstants.SI_REPORT_DEFINITION); removeVariablesFromSession(request); rdef = (new ReportHandler()).loadReportDefinition(request, id); request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef); } else if (rr != null && !rr.getReportID().equals(id)) { request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME); removeVariablesFromSession(request); rdef = (new ReportHandler()).loadReportDefinition(request, id); request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef); } else if (rdef == null) { rdef = (new ReportHandler()).loadReportDefinition(request, id); request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef); } } else { rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); } DefinitionJSON wizardJSON = new DefinitionJSON(); if (tabId.equals("Def")) { wizardJSON.setTabId("Def"); wizardJSON.setTabName("Definition"); wizardJSON.setChartType(rdef.getChartType()); wizardJSON.setReportId((rdef != null) ? rdef.getReportID() + "" : ""); wizardJSON.setReportName((rdef != null) ? rdef.getReportName() : ""); wizardJSON.setReportDescr((rdef != null) ? rdef.getReportDescr() : ""); wizardJSON.setReportType((rdef != null) ? rdef.getReportType() : AppConstants.RT_LINEAR); wizardJSON.setDataContainerHeight((rdef != null) ? rdef.getDataContainerHeight() : "600"); wizardJSON.setDataContainerWidth((rdef != null) ? rdef.getDataContainerWidth() : "900"); wizardJSON.setAllowScheduler((rdef != null) ? rdef.getAllowSchedule() : "false"); if(wizardJSON.getReportType().equals(AppConstants.RT_LINEAR)) { wizardJSON.setDbInfo((rdef != null) ? rdef.getDBInfo() : ""); wizardJSON.setFormHelpText((rdef != null) ? rdef.getFormHelpText() : ""); wizardJSON.setPageSize((rdef != null) ? rdef.getPageSize() : 50); List displayArea = new ArrayList<>(); IdNameBooleanJSON idNameJSON = new IdNameBooleanJSON(); String qMenu = ""; for (int i = 0; i < AppUtils.getQuickLinksMenuIDs().size(); i++) { idNameJSON = new IdNameBooleanJSON(); qMenu = (String) AppUtils.getQuickLinksMenuIDs().get(i); idNameJSON.setId(qMenu); idNameJSON.setName(qMenu); if (rdef != null && (rdef.getMenuID().equals(qMenu))) { idNameJSON.setSelected(true); } displayArea.add(idNameJSON); } wizardJSON.setDisplayArea(displayArea); wizardJSON.setHideFormFieldsAfterRun((rdef != null) ? rdef.isHideFormFieldAfterRun() : false); wizardJSON.setMaxRowsInExcelCSVDownload((rdef != null) ? rdef.getMaxRowsInExcelDownload() : 500); wizardJSON.setFrozenColumns((rdef != null) ? rdef.getFrozenColumns() : 0); wizardJSON.setDataGridAlign((rdef != null) ? rdef.getDataGridAlign() : "left"); wizardJSON.setEmptyMessage((rdef != null) ? rdef.getEmptyMessage() : "No records found"); List displayOptions = new ArrayList<>(); NameBooleanJSON nameBooleanJSON = new NameBooleanJSON(); nameBooleanJSON.setName("HideFormFields"); nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideForm() : false); displayOptions.add(nameBooleanJSON); nameBooleanJSON = new NameBooleanJSON(); nameBooleanJSON.setName("HideChart"); nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideChart() : false); displayOptions.add(nameBooleanJSON); nameBooleanJSON = new NameBooleanJSON(); nameBooleanJSON.setName("HideReportData"); nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideData() : false); displayOptions.add(nameBooleanJSON); nameBooleanJSON = new NameBooleanJSON(); nameBooleanJSON.setName("HideExcel"); nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHideExcelIcons() : false); displayOptions.add(nameBooleanJSON); nameBooleanJSON = new NameBooleanJSON(); nameBooleanJSON.setName("HidePdf"); nameBooleanJSON.setSelected((rdef != null) ? rdef.isDisplayOptionHidePDFIcons() : false); displayOptions.add(nameBooleanJSON); wizardJSON.setDisplayOptions(displayOptions); wizardJSON.setRuntimeColSortDisabled((rdef != null) ? rdef.isRuntimeColSortDisabled() : false); wizardJSON.setNumFormCols((rdef != null) ? rdef.getNumFormColsAsInt() : 1); wizardJSON.setReportTitle((rdef != null) ? rdef.getReportTitle() : ""); wizardJSON.setReportSubTitle((rdef != null) ? rdef.getReportSubTitle() : ""); String schemaSql = Globals.getRemoteDbSchemaSql(); DataSet ds = null; ArrayList dbInfoList = new ArrayList<>(); try { ds = DbUtils.executeQuery(schemaSql); String prefix = "", desc = ""; for (int i = 0; i < ds.getRowCount(); i++) { IdNameBooleanJSON dBNameJSON = new IdNameBooleanJSON(); dBNameJSON.setId(ds.getItem(i, 0)); dBNameJSON.setName(ds.getItem(i, 0)); dBNameJSON.setSelected(false); dbInfoList.add(dBNameJSON); } } catch (Exception e) {} wizardJSON.setDbInfoList(dbInfoList); /*Robert add*/ wizardJSON.setOneTimeRec((rdef != null) ? rdef.getIsOneTimeScheduleAllowed() : "false"); wizardJSON.setHourlyRec((rdef != null) ? rdef.getIsHourlyScheduleAllowed() : "false"); wizardJSON.setDailyRec((rdef != null) ? rdef.getIsDailyScheduleAllowed() : "false"); wizardJSON.setDailyMFRec((rdef != null) ? rdef.getIsDailyMFScheduleAllowed() : "false"); wizardJSON.setWeeklyRec((rdef != null) ? rdef.getIsWeeklyScheduleAllowed() : "false"); wizardJSON.setMonthlyRec((rdef != null) ? rdef.getIsMonthlyScheduleAllowed() : "false"); wizardJSON.setSizedByContent((rdef != null) ? rdef.getSizedByContentOption() : "false"); wizardJSON.setRepDefType(rdef.getReportDefType()); } else if(wizardJSON.getReportType().equals(AppConstants.RT_DASHBOARD)){ wizardJSON.setDashboardLayoutHTML((rdef != null) ? rdef.getCustomReport().getDashboardLayoutHTML() : null); wizardJSON.setDashboardLayoutJSON((rdef != null) ? rdef.getCustomReport().getDashboardLayoutJSON() : null); wizardJSON.setDashboardReports((rdef != null) ? rdef.getCustomReport().getDashBoardReports() : null); } } ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); return wizardJSON; } @PostMapping(value = "/report/wizard/retrieve_data/{validate}") public @ResponseBody RaptorResponse retrieveDataForGivenQuery(@PathVariable("validate") boolean validate, @RequestBody QueryJSON queryJSON, HttpServletRequest request, HttpServletResponse response) throws RaptorException { RaptorResponse raptorResponse = new RaptorResponse(); String sql = queryJSON.getQuery(); String jsonInString = ""; ServletContext servletContext = request.getSession().getServletContext(); if (!Globals.isSystemInitialized()) { Globals.initializeSystem(servletContext); } ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); if (rdef == null) { ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime(); errorJSONRuntime.setErrormessage("Report Definition is not in session;"); errorJSONRuntime.setStacktrace(""); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); try { jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime); raptorResponse.data().put("elements", jsonInString); return raptorResponse; } catch (Exception ex1) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex1); } } else { if (!sql.trim().toUpperCase().startsWith("SELECT")) { ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime(); errorJSONRuntime.setErrormessage("Invalid statement - the SQL must start with the keyword SELECT"); errorJSONRuntime.setStacktrace("SQL Error"); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); try { jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime); raptorResponse.data().put("elements", jsonInString); return raptorResponse; } catch (Exception ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex); } } else { DataSet ds = null; String remoteDb = request.getParameter("remoteDbPrefix"); // comment below two lines to test String remoteDbPrefix = (remoteDb != null && !remoteDb.equalsIgnoreCase("null")) ? remoteDb : rdef.getDBInfo(); String userId = AppUtils.getUserID(request); sql = Utils.replaceInString(sql, "[LOGGED_USERID]", userId); sql = Utils.replaceInString(sql, "[USERID]", userId); String[] reqParameters = Globals.getRequestParams().split(","); String[] sessionParameters = Globals.getSessionParams().split(","); javax.servlet.http.HttpSession session = request.getSession(); logger.debug(EELFLoggerDelegate.debugLogger, ("B4 testRunSQL " + sql)); if (request != null) { for (int i = 0; i < reqParameters.length; i++) { if (!reqParameters[i].startsWith("ff")) sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase() + "]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(),request.getParameter(reqParameters[i].toUpperCase()))); else sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase() + "]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(),request.getParameter(reqParameters[i]))); } } if (session != null) { for (int i = 0; i < sessionParameters.length; i++) { logger.debug(EELFLoggerDelegate.debugLogger, (" Session " + " sessionParameters[i] " + sessionParameters[i] + " " + (String) session.getAttribute(sessionParameters[i]))); sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase() + "]", (String) session.getAttribute(sessionParameters[i])); } } logger.debug(EELFLoggerDelegate.debugLogger, ("After testRunSQL " + sql)); try { response.setContentType("application/json"); ds = ConnectionUtils.getDataSet(sql, rdef.getDBInfo(), true); QueryResultJSON queryResultJSON = new QueryResultJSON(); queryResultJSON.setQuery(queryJSON.getQuery()); String query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery()); if(validate) { rdef.parseReportSQL(query,validate); } queryResultJSON.setQuery(query); queryResultJSON.setTotalRows(ds.getRowCount()); Map dvJSON; ArrayList colList = new ArrayList<>(); ArrayList> reportDataRows = new ArrayList<>(); if (!ds.isEmpty()) { for (int i = 0; i < ds.getColumnCount(); i++) { colList.add(ds.getColumnName(i)); } queryResultJSON.setReportDataColumns(colList); if (queryResultJSON.getTotalRows() > 0) { for (int r = 0; r < Math.min(ds.getRowCount(), 100); r++) { dvJSON = new HashMap<>(); for (int c = 0; c < ds.getColumnCount(); c++) { try { dvJSON.put(ds.getColumnName(c), ds.getString(r, c)); } catch (Exception ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex); } } reportDataRows.add(dvJSON); } } } queryResultJSON.setReportDataRows(reportDataRows); ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); if (validate) { query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery()); request.setAttribute("sqlValidated", "N"); rdef.parseReportSQL(query); request.setAttribute("sqlValidated", "Y"); persistReportDefinition(request, rdef); } try { jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(queryResultJSON); raptorResponse.data().put("elements", jsonInString); return raptorResponse; } catch (Exception ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery]. RaptorException: ", ex); } } catch (ReportSQLException ex) { ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime(); if (sql.contains("[")) { errorJSONRuntime.setErrormessage( "Formfield information is present in the query, hence couldn't execute"); errorJSONRuntime .setStacktrace("Formfield information is present in the query, hence couldn't execute"); if (validate) { String query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery()); request.setAttribute("sqlValidated", "N"); rdef.parseReportSQL(query); request.setAttribute("sqlValidated", "Y"); persistReportDefinition(request, rdef); } } else { errorJSONRuntime.setErrormessage(ex.getMessage()); errorJSONRuntime.setStacktrace(getStackTrace(ex)); } ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); try { jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(errorJSONRuntime); raptorResponse.data().put("elements", jsonInString); return raptorResponse; } catch (Exception ex1) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [retrieveDataForGivenQuery].", ex1); } } if (validate) { String query = XSSFilter.filterRequestOnlyScript(queryJSON.getQuery()); request.setAttribute("sqlValidated", "N"); rdef.parseReportSQL(query); request.setAttribute("sqlValidated", "Y"); persistReportDefinition(request, rdef); } } } raptorResponse.data().put("elements", jsonInString); return raptorResponse; } @GetMapping(value = "/report/wizard/get_report_log/{reportID}") public @ResponseBody ArrayList getLogs(@PathVariable("reportID") String reportId, HttpServletRequest request, HttpServletResponse ReportLogEntry) { ArrayList arrayList = new ArrayList<>(); try { Vector v = ReportLoader.loadReportLogEntries(reportId); for(ReportLogEntry r:v ){ arrayList.add(r); } } catch (RaptorException e) { logger.error(EELFLoggerDelegate.errorLogger, "RaptorControllerAsync getLogs.", e); } return arrayList; } @PostMapping(value = "save_chart") public void reportChartReceive(@RequestBody ChartJSON chartJSON, HttpServletRequest request, HttpServletResponse response) { //ReportRuntime reportRuntime; //reportRuntime = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); // changing ReportDefinition reportDefn; reportDefn = (ReportDefinition) request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION); // session // to // request String reportID = request.getParameter("c_master"); /* if (reportRuntime == null && AppUtils.nvl(reportID).length() > 0) { try { ReportHandler rh = new ReportHandler(); reportRuntime = rh.loadReportRuntime(request, reportID); } catch (RaptorException ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [reportChartReceive].", ex); } }*/ if (reportDefn != null) { String chartType = chartJSON.getChartType(); reportDefn.setChartType(chartJSON.getChartType()); reportDefn.setChartAnimate(chartJSON.isAnimation()); reportDefn.setChartWidth(chartJSON.getWidth()); reportDefn.setChartHeight(chartJSON.getHeight()); reportDefn.setShowChartTitle(chartJSON.isShowTitle()); String domainAxis = null; domainAxis = chartJSON.getDomainAxis(); List reportCols = reportDefn.getAllColumns(); for (Iterator iter = reportCols.iterator(); iter.hasNext();) { DataColumnType dct = iter.next(); if (dct.getColId().equals(domainAxis)) { dct.setColOnChart(AppConstants.GC_LEGEND); } else { dct.setColOnChart(null); } } CategoryAxisJSON categoryAxisJSON = chartJSON.getCategoryAxisJSON(); String categoryAxis; categoryAxis = (categoryAxisJSON != null ? categoryAxisJSON.getValue() : ""); reportCols = reportDefn.getAllColumns(); for (Iterator iter = reportCols.iterator(); iter.hasNext();) { DataColumnType dct = iter.next(); if (dct.getColId().equals(categoryAxis)) { dct.setChartSeries(true); } else { dct.setChartSeries(false); } } ArrayList rangeAxisList = chartJSON.getRangeAxisList(); int r = 0; HashSet removeRangeAxisMap = new HashSet<>(); for(RangeAxisJSON rangeAxis:chartJSON.getRangeAxisRemoveList()){ removeRangeAxisMap.add(rangeAxis.getRangeAxis()); } for (int i = 0; i < rangeAxisList.size(); i++) { RangeAxisJSON rangeAxisJSON = rangeAxisList.get(i); String rangeAxis = rangeAxisJSON.getRangeAxis(); String rangeYAxis = AppUtils.nvl(rangeAxisJSON.getRangeYAxis()); String rangeChartGroup = AppUtils.nvl(rangeAxisJSON.getRangeChartGroup()); String rangeColor = AppUtils.nvl(rangeAxisJSON.getRangeColor()); String rangeLineType = AppUtils.nvl(rangeAxisJSON.getRangeLineType()); rangefor: for (Iterator iterator = reportCols.iterator(); iterator.hasNext();) { DataColumnType dct = iterator.next(); if (dct.getColId().equals(rangeAxis)) { if(removeRangeAxisMap.contains(rangeAxis)) dct.setChartSeq(-1); // if we set it to -1, means this range axis will not be included else dct.setChartSeq(++r); if (!dct.getColId().equals(domainAxis)) { dct.setColOnChart("0"); }else{ dct.setChartSeq(-1); } dct.setYAxis(rangeYAxis); // +"|"+dct.getColId()); dct.setChartGroup(rangeChartGroup); // +"|"+dct.getColId()); dct.setChartColor(rangeColor); dct.setChartLineType(rangeLineType); if (chartType.equals(AppConstants.GT_ANNOTATION_CHART) || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) { if (rangeAxisJSON.isShowAsArea()) { dct.setIsRangeAxisFilled(true); } else { dct.setIsRangeAxisFilled(false); } } break rangefor; } } } reportDefn.setChartLeftAxisLabel(chartJSON.getPrimaryAxisLabel()); reportDefn.setChartRightAxisLabel(chartJSON.getSecondaryAxisLabel()); reportDefn.setRangeAxisLowerLimit(chartJSON.getMinRange()); reportDefn.setRangeAxisUpperLimit(chartJSON.getMaxRange()); if (chartType.equals(AppConstants.GT_ANNOTATION_CHART) || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) { if (chartJSON.getFlexTimeSeriesChartOptions() != null) { reportDefn.setZoomIn(chartJSON.getFlexTimeSeriesChartOptions().getZoomIn()); reportDefn.setTimeAxisType(chartJSON.getFlexTimeSeriesChartOptions().getTimeAxisType()); } } if (chartType.equals(AppConstants.GT_TIME_SERIES)) { if (chartJSON.getTimeSeriesChartOptions() != null) { reportDefn.setTimeSeriesRender(chartJSON.getTimeSeriesChartOptions().getLineChartRenderer()); reportDefn.setShowXAxisLabel(chartJSON.getTimeSeriesChartOptions().isShowXAxisLabel()); reportDefn.setAddXAxisTickers(chartJSON.getTimeSeriesChartOptions().isAddXAxisTicker()); reportDefn.setTimeAxis(chartJSON.getTimeSeriesChartOptions().isNonTimeAxis()); reportDefn.setMultiSeries(chartJSON.getTimeSeriesChartOptions().isMultiSeries()); } } if (chartType.equals(AppConstants.GT_BAR_3D)) { if (chartJSON.getBarChartOptions() != null) { reportDefn.setChartOrientation( chartJSON.getBarChartOptions().isVerticalOrientation() ? "vertical" : "horizontal"); reportDefn.setChartStacked(chartJSON.getBarChartOptions().isStackedChart()); reportDefn.setBarControls(chartJSON.getBarChartOptions().isDisplayBarControls()); reportDefn.setXAxisDateType(chartJSON.getBarChartOptions().isxAxisDateType()); reportDefn.setLessXaxisTickers(chartJSON.getBarChartOptions().isMinimizeXAxisTickers()); reportDefn.setTimeAxis(chartJSON.getBarChartOptions().isTimeAxis()); reportDefn.setLogScale(chartJSON.getBarChartOptions().isyAxisLogScale()); } } reportDefn.setLegendLabelAngle(chartJSON.getCommonChartOptions().getLegendLabelAngle()); reportDefn.setLegendPosition(chartJSON.getCommonChartOptions().getLegendPosition()); reportDefn.setChartLegendDisplay(chartJSON.getCommonChartOptions().isHideLegend() ? "Y" : "N"); reportDefn.setAnimateAnimatedChart(chartJSON.getCommonChartOptions().isAnimateAnimatedChart()); reportDefn.setTopMargin(chartJSON.getCommonChartOptions().getTopMargin()); reportDefn.setBottomMargin(chartJSON.getCommonChartOptions().getBottomMargin()); reportDefn.setLeftMargin(chartJSON.getCommonChartOptions().getLeftMargin()); reportDefn.setRightMargin(chartJSON.getCommonChartOptions().getRightMargin()); for (Iterator iterator = reportCols.iterator(); iterator.hasNext();) { DataColumnType dct = iterator.next(); if (!(AppUtils.nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND) || (dct.getChartSeq() != null && dct.getChartSeq() > 0) || dct.isChartSeries())) { dct.setChartSeq(-1); dct.setChartColor(null); dct.setColOnChart(null); dct.setCreateInNewChart(false); dct.setChartGroup(null); dct.setYAxis(null); } } try { //reportRuntime.persistLinearReport(request); //reportRuntime.persistReport(request); persistReportDefinition(request, reportDefn); } catch (Exception ex) { logger.error(EELFLoggerDelegate.errorLogger, "[Controller.processRequest]Invalid raptor action [reportChartReceive].", ex); } } } public String getViewName() { return viewName; } public void setViewName(String viewName) { this.viewName = viewName; } public String nvl(String s) { return (s == null) ? "" : s; } public String nvl(String s, String sDefault) { return nvl(s).equals("") ? sDefault : s; } public static String getStackTrace(Throwable aThrowable) { Writer result = new StringWriter(); PrintWriter printWriter = new PrintWriter(result); aThrowable.printStackTrace(printWriter); return result.toString(); } public void persistReportDefinition(HttpServletRequest request, ReportDefinition rdef) throws RaptorException { ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); if (rr != null && rr.getReportID().equals(rdef.getReportID())) request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME); rdef.persistReport(request); } // persistReportDefinition // Remove from session private void removeVariablesFromSession(HttpServletRequest request) { HttpSession session = request.getSession(); session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST); session.removeAttribute(AppConstants.DRILLDOWN_INDEX); session.removeAttribute(AppConstants.FORM_DRILLDOWN_INDEX); session.removeAttribute(AppConstants.SI_BACKUP_FOR_REP_ID); session.removeAttribute(AppConstants.SI_COLUMN_LOOKUP); session.removeAttribute(AppConstants.SI_DASHBOARD_REP_ID); session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP); session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME); session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP); session.removeAttribute(AppConstants.SI_DASHBOARD_CHARTDATA_MAP); session.removeAttribute(AppConstants.SI_DASHBOARD_DISPLAYTYPE_MAP); session.removeAttribute(AppConstants.SI_DATA_SIZE_FOR_TEXTFIELD_POPUP); session.removeAttribute(AppConstants.SI_MAP); session.removeAttribute(AppConstants.SI_MAP_OBJECT); session.removeAttribute(AppConstants.SI_REPORT_DEFINITION); session.removeAttribute(AppConstants.SI_REPORT_RUNTIME); session.removeAttribute(AppConstants.SI_REPORT_RUN_BACKUP); session.removeAttribute(AppConstants.SI_REPORT_SCHEDULE); session.removeAttribute(AppConstants.RI_REPORT_DATA); session.removeAttribute(AppConstants.RI_CHART_DATA); session.removeAttribute(AppConstants.SI_FORMFIELD_INFO); session.removeAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO); session.removeAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP); session.removeAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP); Enumeration enum1 = session.getAttributeNames(); String attributeName = ""; while (enum1.hasMoreElements()) { attributeName = enum1.nextElement(); if (attributeName.startsWith("parent_")) { session.removeAttribute(attributeName); } } } }