Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.jleaf.web.report.servlet;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.ObjectOutputStream;
- import java.io.OutputStream;
- import java.io.Reader;
- import java.io.StringWriter;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.nio.charset.Charset;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Map;
- import java.util.Properties;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import org.jleaf.core.CoreException;
- import org.jleaf.core.Dto;
- import org.jleaf.core.GeneralConstants;
- import org.jleaf.util.Base64;
- import org.jleaf.util.DateUtil;
- import org.jleaf.util.DtoUtil;
- import org.jleaf.web.ServiceProvider;
- import org.jleaf.web.WebUtil;
- import org.jleaf.web.audit.AuditReportApi;
- import org.jleaf.web.helper.ServiceResult;
- import org.jleaf.web.jsf.WebAppContext;
- import org.jleaf.web.jsf.WebJsfConstants;
- import org.jleaf.web.jsf.util.MessageUtil;
- import org.jleaf.web.report.ReportConfig;
- import org.jleaf.web.report.ReportConfigRepository;
- import org.jleaf.web.report.ReportConstants;
- import org.jleaf.web.report.ReportDataConnector;
- import org.jleaf.web.report.ReportDataConnectorFactory;
- import org.jleaf.web.report.excel.ExcelReportExporter;
- import org.jleaf.web.report.excel.NewExcelReportExporter;
- import org.jleaf.web.report.jasper.JasperReportExporter;
- import org.jleaf.web.report.jasper.ReportTypeFactory;
- import org.jleaf.web.util.DownloadReportUtil;
- import org.json.simple.JSONArray;
- import org.json.simple.JSONObject;
- import org.json.simple.JSONValue;
- import org.json.simple.parser.JSONParser;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
- import org.springframework.context.ApplicationContext;
- import org.springframework.core.io.Resource;
- import org.springframework.web.context.WebApplicationContext;
- import org.springframework.web.context.support.WebApplicationContextUtils;
- import simple.escp.data.DataSource;
- import simple.escp.data.EmptyDataSource;
- import simple.escp.data.JsonDataSource;
- import simple.escp.fill.FillJob;
- import simple.escp.json.JsonTemplate;
- /**
- * @author fredi, 22 feb 2016
- */
- public class DownloadReportFromProviderServlet extends HttpServlet {
- private static final long serialVersionUID = -3271390873558511409L;
- private static final Logger log = LoggerFactory.getLogger(DownloadReportFromProviderServlet.class);
- @Autowired
- private ApplicationContext applicationContext;
- @Autowired
- private ServiceProvider serviceProvider;
- public DownloadReportFromProviderServlet() {
- }
- public void init() {
- WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
- AutowireCapableBeanFactory bf = ctx.getAutowireCapableBeanFactory();
- bf.autowireBean(this);
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- filterDoRequest(request, response);
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- filterDoRequest(request, response);
- }
- protected void filterDoRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- log.info("Incoming report request.");
- // check CONFIG
- Properties prop = WebUtil.getGlobalProperties(this);
- if( prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_ACTIVE) != null
- && new Boolean(true).toString().equals( prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_ACTIVE).trim())
- && prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_HOST) != null
- && !prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_HOST).trim().isEmpty()
- && prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_PORT) != null
- && !prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_PORT).trim().isEmpty()
- && prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_DOWNLOAD_SERVLET) != null
- && !prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_DOWNLOAD_SERVLET).trim().isEmpty()
- && prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_DOWNLOAD_SERVLET) != null
- && !prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_DOWNLOAD_SERVLET).trim().isEmpty()
- ){
- String redirectHost = prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_HOST).trim();
- String redirectPort = prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_PORT).trim();
- String redirectDownloadServlet = prop.getProperty(WebJsfConstants.PROP_REPORT_REDIRECT_DOWNLOAD_SERVLET).trim();
- String reportName = request.getParameter("reportName");
- String type = request.getParameter("type");
- String inputEncoded = request.getParameter("input");
- String fileName = request.getParameter("fileName");
- log.debug("report name : " + reportName);
- log.debug("report type : " + type);
- log.debug("input encoded : " + inputEncoded);
- log.debug("redirectHost : "+redirectHost);
- String protocol = "http://";
- String baseUrl = protocol.concat( redirectHost )
- .concat(":").concat(redirectPort)
- .concat(redirectDownloadServlet);
- try{
- log.debug("base URL : "+baseUrl);
- DownloadReportUtil.dowloadReport(request, response,
- baseUrl,
- reportName,
- type,
- fileName,
- inputEncoded);
- } catch(Exception e){
- throw new ServletException(e.getMessage());
- }
- } else{
- doRequest(request, response);
- }
- }
- @SuppressWarnings({ "rawtypes" })
- protected void doRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- ReportConfigRepository reportConfigRepository = (ReportConfigRepository) WebAppContext.getInstance().getObject(WebJsfConstants.REPORT_CONFIG_REPOSITORY);
- String reportName = request.getParameter("reportName");
- String type = request.getParameter("type");
- String inputEncoded = request.getParameter("input");
- String fileName = request.getParameter("fileName");
- log.debug("report name : " + reportName);
- log.debug("report type : " + type);
- log.debug("input encoded : " + inputEncoded);
- String inputDecoded = new String(Base64.decode(inputEncoded));
- JSONParser parser = new JSONParser();
- JSONObject inputJson = new JSONObject();
- try{
- inputJson = (JSONObject)parser.parse(inputDecoded);
- } catch(Exception e){
- throw new ServletException("Error parsing report input");
- }
- //default case if null
- if (type == null) {
- log.warn("Type report file not set, setted to default " + ReportConstants.REPORT_TYPE_DEFAULT);
- type = ReportConstants.REPORT_TYPE_DEFAULT;
- }
- if (fileName == null) {
- log.warn("File name not set, setted to default " + ReportConstants.REPORT_FILE_NAME_DEFAULT);
- fileName = ReportConstants.REPORT_FILE_NAME_DEFAULT + "." + type;
- }else{
- fileName = fileName+"."+type;
- }
- //get report config
- log.debug("get report config");
- if(reportConfigRepository.getReportConfig(reportName)==null){
- throw new ServletException("Report config not found with name "+reportName);
- }
- ReportConfig reportConfig = reportConfigRepository.getReportConfig(reportName);
- List<Map> outputList = (List<Map>)reportConfig.getOutputList();
- //write byte report config
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ObjectOutputStream os = new ObjectOutputStream(baos);
- os.writeObject(reportConfig);
- os.close();
- String reportConfigObjectEncoded = Base64.encodeToString(baos.toByteArray(), false);
- //get data from provider
- Dto resultDto = null;
- log.debug("get data from provider");
- try {
- //create payload
- Dto headerRequestDto = populateRequestHeaderFromSession(request);
- Dto payloadRequestDto = new Dto();
- payloadRequestDto.put("input", inputEncoded);
- payloadRequestDto.put("config", reportConfigObjectEncoded);
- Dto paramConnector = new Dto();
- paramConnector.put("url", getDataProviderUrl());
- ReportDataConnector connector = ReportDataConnectorFactory.getConnector(reportConfig.getType(), paramConnector);
- log.debug("Execute request : ");
- log.debug("Header : "+headerRequestDto);
- log.debug("Payload : "+payloadRequestDto);
- Dto outputDto = connector.execute(payloadRequestDto, headerRequestDto);
- log.debug("outputDto : "+outputDto);
- String status = outputDto.getString("output.status");
- if (status != null) {
- if (status.equals(GeneralConstants.OK)) {
- resultDto = outputDto;
- // reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get(keyDataList));
- } else if (status.equals(GeneralConstants.FAIL)) {
- log.error("Error in service");
- log.error(outputDto.get("output.message")+"");
- throw new ServletException(outputDto.get("output.message")+"");
- }
- }
- } catch (Exception e) {
- log.error("Error in requesting services", e);
- throw new ServletException("Error in requesting data : "+ (e!=null?e.getMessage():e) );
- }
- if(resultDto!=null){
- Long userLoginId = Long.valueOf(request.getSession().getAttribute(WebJsfConstants.SESS_LOGGED_USER_ID).toString());
- Long roleLoginId = Long.valueOf(request.getSession().getAttribute(WebJsfConstants.SESS_LOGGED_CURRENT_ROLE).toString());
- Long tenantLoginId = Long.valueOf(request.getSession().getAttribute(WebJsfConstants.SESS_LOGGED_TENANT_ID).toString());
- log.info("Template type: " + reportConfig.getTemplateType());
- // Dec 16, adding support for excel template
- try{
- if(ReportConfig.TEMPLATE_TYPE_JASPER.equals(reportConfig.getTemplateType())){
- this.responseUsingTemplateJasper(response, request, reportConfig, outputList, resultDto, type, fileName, inputJson, tenantLoginId, roleLoginId, userLoginId);
- } else if(ReportConfig.TEMPLATE_TYPE_JXLS.equals(reportConfig.getTemplateType())){
- this.responseUsingTemplateJxls(response, request, reportConfig, outputList, resultDto, type, fileName, inputJson, tenantLoginId, roleLoginId, userLoginId );
- } else if(ReportConfig.TEMPLATE_TYPE_EXCEL.equals(reportConfig.getTemplateType())){
- this.responseUsingTemplateJxls(response, request, reportConfig, outputList, resultDto, type, fileName, inputJson, tenantLoginId, roleLoginId, userLoginId );
- } else if(ReportConfig.TEMPLATE_TYPE_JETT.equals(reportConfig.getTemplateType())){
- this.responseUsingTemplateJett(response, request, reportConfig, outputList, resultDto, type, fileName, inputJson, tenantLoginId, roleLoginId, userLoginId );
- } else if(ReportConfig.TEMPLATE_TYPE_ESCP.equals(reportConfig.getTemplateType())){
- this.responseUsingTemplateEscp(response, request, reportConfig, outputList, resultDto, type, fileName, inputJson, tenantLoginId, roleLoginId, userLoginId );
- }
- } catch(CoreException se){
- log.error("Error report", se);
- String errorKey = se.getErrorKey();
- Object[] args = se.getParamValues();
- if(args!=null){
- log.debug(Arrays.toString(args));
- }
- // response.addHeader("errorKey", MessageUtil.getInstance().getLabel(errorKey , args));
- // response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, errorKey);
- String message = MessageUtil.getInstance().getLabel(errorKey , args);
- log.debug("Servlet message from core exception : "+message);
- throw new ServletException(message);
- } catch (Exception e) {
- log.error("Error report", e);
- // response.addHeader("errorKey", e.getMessage());
- // response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
- throw new ServletException("Error generate report : "+e.getMessage());
- }
- }
- }
- /**
- * Diganti dengan yang ada parameter json input
- * @param response
- * @param reportConfig
- * @param outputList
- * @param resultDto
- * @param type
- * @param fileName
- * @throws IOException
- */
- @Deprecated
- private void responseUsingTemplateJasper(HttpServletResponse response, ReportConfig reportConfig, List<Map> outputList, Dto resultDto, String type, String fileName) throws IOException{
- String keyOutput = outputList.get(0).get(ReportConstants.KEY_CONFIG_OUTPUT_ITEM_NAME).toString();
- List<Dto> reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get("output.payload.detail."+keyOutput));
- Dto parametersDto = resultDto.getDto("output.payload.parameter");
- //generate report
- log.info("Generating report");
- log.debug("Loading layout : "+reportConfig.getLayout());
- Resource res = applicationContext.getResource( reportConfig.getLayout() );
- InputStream layoutStream = res.getInputStream();
- log.debug("Writing report");
- try {
- ByteArrayOutputStream bos = null;
- OutputStream osResponse = response.getOutputStream();
- //generate report file based on type
- log.debug("start ReportExporter");
- bos = JasperReportExporter.export(parametersDto, reportDataList, ReportTypeFactory.getReportType(type), layoutStream);
- log.debug("end ReportExporter");
- log.debug("start ContentDispositionFactory");
- ContentDispositionFactory.setContentDisposition(type, response, fileName);
- log.debug("end ContentDispositionFactory");
- bos.writeTo(osResponse);
- osResponse.close();
- }catch (Exception e) {
- log.error("Error in create report ", e);
- }
- }
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private void responseUsingTemplateJasper(HttpServletResponse response, ReportConfig reportConfig, List<Map> outputList, Dto resultDto, String type, String fileName, JSONObject jsonInput) throws IOException{
- String keyOutput = outputList.get(0).get(ReportConstants.KEY_CONFIG_OUTPUT_ITEM_NAME).toString();
- List<Dto> reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get("output.payload.detail."+keyOutput));
- Dto parametersDto = resultDto.getDto("output.payload.parameter");
- //generate report
- log.info("Generating report");
- String layout = reportConfig.getLayout(jsonInput);
- log.debug("Loading layout : "+layout);
- Resource res = applicationContext.getResource( layout );
- InputStream layoutStream = res.getInputStream();
- log.debug("Writing report");
- try {
- ByteArrayOutputStream bos = null;
- OutputStream osResponse = response.getOutputStream();
- //generate report file based on type
- log.debug("start ReportExporter");
- bos = JasperReportExporter.export(parametersDto, reportDataList, ReportTypeFactory.getReportType(type), layoutStream);
- log.debug("end ReportExporter");
- log.debug("start ContentDispositionFactory");
- ContentDispositionFactory.setContentDisposition(type, response, fileName);
- log.debug("end ContentDispositionFactory");
- bos.writeTo(osResponse);
- osResponse.close();
- }catch (Exception e) {
- log.error("Error in create report", e);
- }
- }
- /**
- * added audit report
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private void responseUsingTemplateJasper(HttpServletResponse response, HttpServletRequest request, ReportConfig reportConfig, List<Map> outputList, Dto resultDto, String type, String fileName, JSONObject jsonInput, Long tenantLoginId, Long roleLoginId, Long userLoginId) throws Exception{
- String keyOutput = outputList.get(0).get(ReportConstants.KEY_CONFIG_OUTPUT_ITEM_NAME).toString();
- List<Dto> reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get("output.payload.detail."+keyOutput));
- Dto parametersDto = resultDto.getDto("output.payload.parameter");
- //generate report
- log.info("Generating report");
- String layout = reportConfig.getLayout(jsonInput);
- log.debug("Loading layout : "+layout);
- Resource res = applicationContext.getResource( layout );
- InputStream layoutStream = res.getInputStream();
- log.debug("Writing report");
- ByteArrayOutputStream bos = null;
- try {
- OutputStream osResponse = response.getOutputStream();
- //generate report file based on type
- log.debug("start ReportExporter");
- bos = JasperReportExporter.export(parametersDto, reportDataList, ReportTypeFactory.getReportType(type), layoutStream);
- log.debug("end ReportExporter");
- log.debug("start ContentDispositionFactory");
- // caling report audit
- doAuditReport(reportConfig.getName(), jsonInput, tenantLoginId, roleLoginId, userLoginId, request);
- ContentDispositionFactory.setContentDisposition(type, response, fileName);
- log.debug("end ContentDispositionFactory");
- bos.writeTo(osResponse);
- osResponse.close();
- layoutStream.close();
- }catch (Exception e) {
- log.error("Error in create report", e);
- throw e;
- }finally{
- if(bos!=null){
- bos.flush();
- bos.close();
- }
- }
- }
- @Deprecated
- private void responseUsingTemplateJxls(HttpServletResponse response, ReportConfig reportConfig, List<Map> outputList, Dto resultDto, String type, String fileName) throws IOException{
- // Need to support multiple outputList
- Dto dataForReportDto = new Dto();
- for(int i=0; i<outputList.size(); i++){
- String keyOutput = outputList.get(i).get(ReportConstants.KEY_CONFIG_OUTPUT_ITEM_NAME).toString();
- List<Dto> reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get("output.payload.detail."+keyOutput));
- dataForReportDto.put("detail." + keyOutput, reportDataList);
- }
- Dto parametersDto = resultDto.getDto("output.payload.parameter");
- dataForReportDto.put("parameter", parametersDto);
- //generate report
- log.info("Generating report");
- log.debug("Loading layout : "+reportConfig.getLayout());
- Resource res = applicationContext.getResource(reportConfig.getLayout());
- InputStream layoutStream = res.getInputStream();
- log.debug("Writing report");
- try {
- ByteArrayOutputStream bos = null;
- OutputStream osResponse = response.getOutputStream();
- //generate report file based on type
- log.debug("start ReportExporter");
- bos = ExcelReportExporter.export(dataForReportDto, type, layoutStream);
- log.debug("end ReportExporter");
- log.debug("start ContentDispositionFactory");
- // For excel only few supported format
- // ReportConstants.REPORT_TYPE_PDF
- // ReportConstants.REPORT_TYPE_XLS
- ContentDispositionFactory.setContentDisposition(ReportConstants.REPORT_TYPE_XLSX, response, fileName);
- log.debug("end ContentDispositionFactory");
- bos.writeTo(osResponse);
- osResponse.close();
- }catch (Exception e) {
- log.error("Error in create report ", e);
- }
- }
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private void responseUsingTemplateJxls(HttpServletResponse response, ReportConfig reportConfig, List<Map> outputList, Dto resultDto, String type, String fileName, JSONObject jsonInput) throws IOException{
- // Need to support multiple outputList
- Dto dataForReportDto = new Dto();
- for(int i=0; i<outputList.size(); i++){
- String keyOutput = outputList.get(i).get(ReportConstants.KEY_CONFIG_OUTPUT_ITEM_NAME).toString();
- List<Dto> reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get("output.payload.detail."+keyOutput));
- dataForReportDto.put("detail." + keyOutput, reportDataList);
- }
- Dto parametersDto = resultDto.getDto("output.payload.parameter");
- dataForReportDto.put("parameter", parametersDto);
- //generate report
- log.info("Generating report");
- String layout = reportConfig.getLayout(jsonInput);
- log.debug("Loading layout : "+layout);
- Resource res = applicationContext.getResource(layout);
- InputStream layoutStream = res.getInputStream();
- log.debug("Writing report");
- try {
- ByteArrayOutputStream bos = null;
- OutputStream osResponse = response.getOutputStream();
- //generate report file based on type
- log.debug("start ReportExporter");
- bos = ExcelReportExporter.export(dataForReportDto, type, layoutStream);
- log.debug("end ReportExporter");
- log.debug("start ContentDispositionFactory");
- // For excel only few supported format
- // ReportConstants.REPORT_TYPE_PDF
- // ReportConstants.REPORT_TYPE_XLS
- ContentDispositionFactory.setContentDisposition(ReportConstants.REPORT_TYPE_XLSX, response, fileName);
- log.debug("end ContentDispositionFactory");
- bos.writeTo(osResponse);
- osResponse.close();
- }catch (Exception e) {
- log.error("Error in create report", e);
- }
- }
- /**
- * added report audit
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private void responseUsingTemplateJxls(HttpServletResponse response, HttpServletRequest request, ReportConfig reportConfig, List<Map> outputList, Dto resultDto, String type, String fileName, JSONObject jsonInput, Long tenantLoginId, Long roleLoginId, Long userLoginId) throws Exception{
- // Need to support multiple outputList
- Dto dataForReportDto = new Dto();
- for(int i=0; i<outputList.size(); i++){
- String keyOutput = outputList.get(i).get(ReportConstants.KEY_CONFIG_OUTPUT_ITEM_NAME).toString();
- List<Dto> reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get("output.payload.detail."+keyOutput));
- dataForReportDto.put("detail." + keyOutput, reportDataList);
- }
- Dto parametersDto = resultDto.getDto("output.payload.parameter");
- dataForReportDto.put("parameter", parametersDto);
- //generate report
- log.info("Generating report");
- String layout = reportConfig.getLayout(jsonInput);
- log.debug("Loading layout : "+layout);
- Resource res = applicationContext.getResource(layout);
- InputStream layoutStream = res.getInputStream();
- log.debug("Writing report");
- ByteArrayOutputStream bos = null;
- try {
- OutputStream osResponse = response.getOutputStream();
- //generate report file based on type
- log.debug("start ReportExporter");
- bos = ExcelReportExporter.export(dataForReportDto, type, layoutStream);
- log.debug("end ReportExporter");
- log.debug("start ContentDispositionFactory");
- // caling report audit
- doAuditReport(reportConfig.getName(), jsonInput, tenantLoginId, roleLoginId, userLoginId, request);
- // For excel only few supported format
- // ReportConstants.REPORT_TYPE_PDF
- // ReportConstants.REPORT_TYPE_XLS
- ContentDispositionFactory.setContentDisposition(ReportConstants.REPORT_TYPE_XLSX, response, fileName);
- log.debug("end ContentDispositionFactory");
- bos.writeTo(osResponse);
- osResponse.close();
- layoutStream.close();
- }catch (Exception e) {
- log.error("Error in create report", e);
- throw e;
- }finally{
- if(bos!=null){
- bos.flush();
- bos.close();
- }
- }
- }
- /**
- * Diganti dengan yang tambah paramater JSONInput
- *
- * @param response
- * @param reportConfig
- * @param outputList
- * @param resultDto
- * @param type
- * @param fileName
- * @throws IOException
- */
- @Deprecated
- private void responseUsingTemplateJett(HttpServletResponse response, ReportConfig reportConfig, List<Map> outputList, Dto resultDto, String type, String fileName) throws IOException{
- // Need to support multiple outputList
- Dto dataForReportDto = new Dto();
- for(int i=0; i<outputList.size(); i++){
- String keyOutput = outputList.get(i).get(ReportConstants.KEY_CONFIG_OUTPUT_ITEM_NAME).toString();
- List<Dto> reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get("output.payload.detail."+keyOutput));
- dataForReportDto.put("detail." + keyOutput, reportDataList);
- }
- Dto parametersDto = resultDto.getDto("output.payload.parameter");
- dataForReportDto.put("parameter", parametersDto);
- //generate report
- log.info("Generating report");
- log.debug("Loading layout : "+reportConfig.getLayout());
- Resource res = applicationContext.getResource(reportConfig.getLayout());
- InputStream layoutStream = res.getInputStream();
- log.debug("Writing report");
- try {
- ByteArrayOutputStream bos = null;
- OutputStream osResponse = response.getOutputStream();
- //generate report file based on type
- log.debug("start ReportExporter");
- bos = NewExcelReportExporter.export(dataForReportDto, type, layoutStream);
- log.debug("end ReportExporter");
- log.debug("start ContentDispositionFactory");
- // For excel only few supported format
- // ReportConstants.REPORT_TYPE_PDF
- // ReportConstants.REPORT_TYPE_XLS
- ContentDispositionFactory.setContentDisposition(ReportConstants.REPORT_TYPE_XLSX, response, fileName);
- log.debug("end ContentDispositionFactory");
- bos.writeTo(osResponse);
- osResponse.close();
- }catch (Exception e) {
- log.error("Error in create report ", e);
- }
- }
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private void responseUsingTemplateJett(HttpServletResponse response, ReportConfig reportConfig, List<Map> outputList, Dto resultDto, String type, String fileName, JSONObject jsonInput) throws IOException{
- // Need to support multiple outputList
- Dto dataForReportDto = new Dto();
- for(int i=0; i<outputList.size(); i++){
- String keyOutput = outputList.get(i).get(ReportConstants.KEY_CONFIG_OUTPUT_ITEM_NAME).toString();
- List<Dto> reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get("output.payload.detail."+keyOutput));
- dataForReportDto.put("detail." + keyOutput, reportDataList);
- }
- Dto parametersDto = resultDto.getDto("output.payload.parameter");
- dataForReportDto.put("parameter", parametersDto);
- //generate report
- log.info("Generating report");
- String layout = reportConfig.getLayout(jsonInput);
- log.debug("Loading layout : "+layout);
- Resource res = applicationContext.getResource(layout);
- InputStream layoutStream = res.getInputStream();
- log.debug("Writing report");
- try {
- ByteArrayOutputStream bos = null;
- OutputStream osResponse = response.getOutputStream();
- //generate report file based on type
- log.debug("start ReportExporter");
- bos = NewExcelReportExporter.export(dataForReportDto, type, layoutStream);
- log.debug("end ReportExporter");
- log.debug("start ContentDispositionFactory");
- // For excel only few supported format
- // ReportConstants.REPORT_TYPE_PDF
- // ReportConstants.REPORT_TYPE_XLS
- ContentDispositionFactory.setContentDisposition(ReportConstants.REPORT_TYPE_XLSX, response, fileName);
- log.debug("end ContentDispositionFactory");
- bos.writeTo(osResponse);
- osResponse.close();
- }catch (Exception e) {
- log.error("Error in create report", e);
- }
- }
- /**
- * Added report audit
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private void responseUsingTemplateJett(HttpServletResponse response, HttpServletRequest request, ReportConfig reportConfig, List<Map> outputList, Dto resultDto, String type, String fileName, JSONObject jsonInput, Long tenantLoginId, Long roleLoginId, Long userLoginId) throws Exception{
- // Need to support multiple outputList
- Dto dataForReportDto = new Dto();
- for(int i=0; i<outputList.size(); i++){
- String keyOutput = outputList.get(i).get(ReportConstants.KEY_CONFIG_OUTPUT_ITEM_NAME).toString();
- List<Dto> reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get("output.payload.detail."+keyOutput));
- dataForReportDto.put("detail." + keyOutput, reportDataList);
- }
- Dto parametersDto = resultDto.getDto("output.payload.parameter");
- dataForReportDto.put("parameter", parametersDto);
- //generate report
- log.info("Generating report");
- String layout = reportConfig.getLayout(jsonInput);
- log.debug("Loading layout : "+layout);
- Resource res = applicationContext.getResource(layout);
- InputStream layoutStream = res.getInputStream();
- log.debug("Writing report");
- ByteArrayOutputStream bos = null;
- try {
- OutputStream osResponse = response.getOutputStream();
- //generate report file based on type
- log.debug("start ReportExporter");
- bos = NewExcelReportExporter.export(dataForReportDto, type, layoutStream);
- log.debug("end ReportExporter");
- log.debug("start ContentDispositionFactory");
- // caling report audit
- doAuditReport(reportConfig.getName(), jsonInput, tenantLoginId, roleLoginId, userLoginId, request);
- // For excel only few supported format
- // ReportConstants.REPORT_TYPE_PDF
- // ReportConstants.REPORT_TYPE_XLS
- ContentDispositionFactory.setContentDisposition(ReportConstants.REPORT_TYPE_XLSX, response, fileName);
- log.debug("end ContentDispositionFactory");
- bos.writeTo(osResponse);
- osResponse.close();
- layoutStream.close();
- }catch (Exception e) {
- log.error("Error in create report", e);
- throw e;
- }finally{
- if(bos!=null){
- bos.flush();
- bos.close();
- }
- }
- }
- /**
- * Diganti dengan yang ditambah parameter JsonInput
- *
- * @param response
- * @param reportConfig
- * @param outputList
- * @param resultDto
- * @param type
- * @param fileName
- * @throws IOException
- */
- @Deprecated
- private void responseUsingTemplateEscp(HttpServletResponse response, ReportConfig reportConfig, List<Map> outputList, Dto resultDto, String type, String fileName) throws IOException{
- // Need to support multiple outputList
- Dto dataForReportDto = new Dto();
- for(int i=0; i<outputList.size(); i++){
- String keyOutput = outputList.get(i).get(ReportConstants.KEY_CONFIG_OUTPUT_ITEM_NAME).toString();
- List<Dto> reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get("output.payload.detail."+keyOutput));
- dataForReportDto.put(keyOutput, reportDataList);
- }
- Dto parametersDto = resultDto.getDto("output.payload.parameter");
- dataForReportDto.put("parameter", parametersDto);
- //generate report
- log.info("Generating report");
- log.debug("Loading layout : "+reportConfig.getLayout());
- Resource res = applicationContext.getResource(reportConfig.getLayout());
- InputStream layoutStream = res.getInputStream();
- log.debug("Writing report");
- try {
- ByteArrayOutputStream bos = null;
- OutputStream osResponse = response.getOutputStream();
- //generate report file based on type
- log.debug("start ReportExporter escp");
- JsonTemplate template = new JsonTemplate( layoutStream );
- String jsonSource = dataForReportDto.toString();
- DataSource ds = "".equals(jsonSource) ? new EmptyDataSource() : new JsonDataSource(jsonSource);
- Charset charset = Charset.isSupported("ISO-8859-1") ? Charset.forName("ISO-8859-1") :
- Charset.forName("US-ASCII");
- FillJob fillJob = new FillJob(template.parse(), ds);
- byte[] datas = fillJob.fill().getBytes(charset);
- bos = new ByteArrayOutputStream(datas.length);
- bos.write(datas, 0, datas.length);
- log.debug("end ReportExporter");
- log.debug("start ContentDispositionFactory");
- ContentDispositionFactory.setContentDisposition(ReportConstants.REPORT_TYPE_ESCP, response, fileName);
- log.debug("end ContentDispositionFactory");
- bos.writeTo(osResponse);
- osResponse.close();
- }catch (Exception e) {
- log.error("Error in create report");
- log.error(e+"");
- e.printStackTrace();
- }
- }
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private void responseUsingTemplateEscp(HttpServletResponse response, ReportConfig reportConfig, List<Map> outputList, Dto resultDto, String type, String fileName, JSONObject jsonInput) throws IOException{
- // Need to support multiple outputList
- Dto dataForReportDto = new Dto();
- for(int i=0; i<outputList.size(); i++){
- String keyOutput = outputList.get(i).get(ReportConstants.KEY_CONFIG_OUTPUT_ITEM_NAME).toString();
- List<Dto> reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get("output.payload.detail."+keyOutput));
- dataForReportDto.put(keyOutput, reportDataList);
- }
- Dto parametersDto = resultDto.getDto("output.payload.parameter");
- dataForReportDto.put("parameter", parametersDto);
- //generate report
- log.info("Generating report");
- String layout = reportConfig.getLayout(jsonInput);
- log.debug("Loading layout : "+layout);
- Resource res = applicationContext.getResource(layout);
- InputStream layoutStream = res.getInputStream();
- log.debug("Writing report");
- try {
- ByteArrayOutputStream bos = null;
- OutputStream osResponse = response.getOutputStream();
- //generate report file based on type
- log.debug("start ReportExporter escp");
- JsonTemplate template = new JsonTemplate( layoutStream );
- String jsonSource = dataForReportDto.toString();
- DataSource ds = "".equals(jsonSource) ? new EmptyDataSource() : new JsonDataSource(jsonSource);
- Charset charset = Charset.isSupported("ISO-8859-1") ? Charset.forName("ISO-8859-1") :
- Charset.forName("US-ASCII");
- FillJob fillJob = new FillJob(template.parse(), ds);
- byte[] datas = fillJob.fill().getBytes(charset);
- bos = new ByteArrayOutputStream(datas.length);
- bos.write(datas, 0, datas.length);
- log.debug("end ReportExporter");
- log.debug("start ContentDispositionFactory");
- ContentDispositionFactory.setContentDisposition(ReportConstants.REPORT_TYPE_ESCP, response, fileName);
- log.debug("end ContentDispositionFactory");
- bos.writeTo(osResponse);
- osResponse.close();
- }catch (Exception e) {
- log.error("Error in create report", e);
- }
- }
- /**
- * Added report audit
- */
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private void responseUsingTemplateEscp(HttpServletResponse response, HttpServletRequest request, ReportConfig reportConfig, List<Map> outputList, Dto resultDto, String type, String fileName, JSONObject jsonInput, Long tenantLoginId, Long roleLoginId, Long userLoginId) throws Exception{
- // Need to support multiple outputList
- Dto dataForReportDto = new Dto();
- for(int i=0; i<outputList.size(); i++){
- String keyOutput = outputList.get(i).get(ReportConstants.KEY_CONFIG_OUTPUT_ITEM_NAME).toString();
- List<Dto> reportDataList = (List<Dto>)DtoUtil.convertToArray(resultDto.get("output.payload.detail."+keyOutput));
- dataForReportDto.put(keyOutput, reportDataList);
- }
- Dto parametersDto = resultDto.getDto("output.payload.parameter");
- dataForReportDto.put("parameter", parametersDto);
- //generate report
- log.info("Generating report");
- String layout = reportConfig.getLayout(jsonInput);
- log.debug("Loading layout : "+layout);
- Resource res = applicationContext.getResource(layout);
- InputStream layoutStream = res.getInputStream();
- log.debug("Writing report");
- ByteArrayOutputStream bos = null;
- try {
- OutputStream osResponse = response.getOutputStream();
- //generate report file based on type
- log.debug("start ReportExporter escp");
- JsonTemplate template = new JsonTemplate( layoutStream );
- String jsonSource = dataForReportDto.toString();
- DataSource ds = "".equals(jsonSource) ? new EmptyDataSource() : new JsonDataSource(jsonSource);
- Charset charset = Charset.isSupported("ISO-8859-1") ? Charset.forName("ISO-8859-1") :
- Charset.forName("US-ASCII");
- FillJob fillJob = new FillJob(template.parse(), ds);
- byte[] datas = fillJob.fill().getBytes(charset);
- bos = new ByteArrayOutputStream(datas.length);
- bos.write(datas, 0, datas.length);
- log.debug("end ReportExporter");
- log.debug("start ContentDispositionFactory");
- // caling report audit
- doAuditReport(reportConfig.getName(), jsonInput, tenantLoginId, roleLoginId, userLoginId, request);
- ContentDispositionFactory.setContentDisposition(ReportConstants.REPORT_TYPE_ESCP, response, fileName);
- log.debug("end ContentDispositionFactory");
- bos.writeTo(osResponse);
- osResponse.close();
- layoutStream.close();
- }catch (Exception e) {
- log.error("Error in create report", e);
- throw e;
- }finally{
- if(bos!=null){
- bos.flush();
- bos.close();
- }
- }
- }
- private Dto populateRequestHeaderFromSession(HttpServletRequest request){
- Dto header = new Dto();
- header.put(WebJsfConstants.SERVICE_HEADER_SESSION_ID, request.getSession().getId());
- header.put(WebJsfConstants.SERVICE_HEADER_USER_LOGIN_ID, request.getSession().getAttribute(WebJsfConstants.SESS_LOGGED_USER_ID));
- header.put(WebJsfConstants.SERVICE_HEADER_ROLE_LOGIN_ID, request.getSession().getAttribute(WebJsfConstants.SESS_LOGGED_CURRENT_ROLE));
- header.put(WebJsfConstants.SERVICE_HEADER_TENANT_LOGIN_ID, request.getSession().getAttribute(WebJsfConstants.SESS_LOGGED_TENANT_ID));
- header.put(WebJsfConstants.SERVICE_HEADER_TENANT_KEY, request.getSession().getAttribute(WebJsfConstants.SESS_LOGGED_TENANT_KEY));
- header.put(WebJsfConstants.SERVICE_HEADER_SECURE_KEY, request.getSession().getAttribute(WebJsfConstants.SESS_LOGGED_SECURE_KEY));
- return header;
- }
- private String getDataProviderUrl() throws IOException{
- Properties prop = WebUtil.getGlobalProperties(this);
- String host = prop.getProperty(ReportConstants.KEY_JASPER_PROXY_HOST);
- String port = prop.getProperty(ReportConstants.KEY_JASPER_PROXY_PORT);
- String servletName = prop.getProperty(ReportConstants.KEY_JASPER_PROXY_SERVLET);
- String protocol = "http://";
- return protocol+host+":"+port+servletName;
- }
- // private String parseLayout(ReportConfig reportConfig, String inputEncoded){
- // String layout = reportConfig.getLayout();
- //
- // try{
- // String inputDecoded = new String(Base64.decode(inputEncoded));
- // JSONParser parser = new JSONParser();
- // JSONObject inputJson = (JSONObject)parser.parse(inputDecoded);
- //
- // layout = VarUtil.sourceReplacer(layout, inputJson).toString();
- //
- // } catch(Exception e){
- // log.warn("Warning decode input report, ignore, use layput default");
- // }
- //
- // return layout;
- // }
- @SuppressWarnings("unchecked")
- public JSONObject executeService(HttpServletRequest request, String serviceName, JSONObject json) throws Exception {
- HttpSession session = request.getSession();
- String humanTask = "";
- log.debug("Production service context: " + serviceName);
- if (json == null) {
- json = new JSONObject();
- }
- String url = "";
- String moduleName = "jleaf";
- int idx = serviceName.indexOf('#');
- if (idx != -1) {
- moduleName = serviceName.substring(0, idx);
- serviceName = serviceName.substring(idx + 1);
- }
- // In new version using human task serviceName is contains of humanTask#serviceName
- idx = serviceName.indexOf('#');
- if(idx!=-1){
- humanTask = serviceName.substring(0,idx);
- serviceName = serviceName.substring(idx+1);
- }
- if (serviceName.equals("authenticate")) {
- // Perform authenticate
- url = getAuthenticateUrl();
- } else if (serviceName.equals("reauthenticate")) {
- url = getReauthenticateUrl();
- } else if (serviceName.equals("logout")) {
- return null;
- } else if (serviceName.equals("addUserAudit")) {
- url = getUserAuditUrl();
- } else {
- // Other task
- url = getTaskUrl();
- }
- JSONObject header = new JSONObject();
- JSONObject input = new JSONObject();
- // header.put(WebJsfConstants.SERVICE_HEADER_SESSION_ID,
- // session.getId());
- header.put(WebJsfConstants.SERVICE_HEADER_SESSION_ID, session.getId());
- if (session.getAttribute(WebJsfConstants.SESS_LOGGED_USER_ID) == null) {
- header.put(WebJsfConstants.SERVICE_HEADER_USER_LOGIN_ID, -1L);
- } else {
- header.put(WebJsfConstants.SERVICE_HEADER_USER_LOGIN_ID, session.getAttribute(WebJsfConstants.SESS_LOGGED_USER_ID));
- }
- if (session.getAttribute(WebJsfConstants.SESS_LOGGED_CURRENT_ROLE) == null) {
- header.put(WebJsfConstants.SERVICE_HEADER_ROLE_LOGIN_ID, -1L);
- } else {
- header.put(WebJsfConstants.SERVICE_HEADER_ROLE_LOGIN_ID, session.getAttribute(WebJsfConstants.SESS_LOGGED_CURRENT_ROLE));
- }
- if (session.getAttribute(WebJsfConstants.SESS_LOGGED_TENANT_ID) == null) {
- header.put(WebJsfConstants.SERVICE_HEADER_TENANT_LOGIN_ID, -1L);
- } else {
- header.put(WebJsfConstants.SERVICE_HEADER_TENANT_LOGIN_ID, session.getAttribute(WebJsfConstants.SESS_LOGGED_TENANT_ID));
- }
- if (session.getAttribute(WebJsfConstants.SESS_LOGGED_TENANT_KEY) == null) {
- header.put(WebJsfConstants.SERVICE_HEADER_TENANT_KEY, GeneralConstants.EMPTY_VALUE);
- } else {
- header.put(WebJsfConstants.SERVICE_HEADER_TENANT_KEY, session.getAttribute(WebJsfConstants.SESS_LOGGED_TENANT_KEY));
- }
- if (session.getAttribute(WebJsfConstants.SESS_LOGGED_SECURE_KEY) == null) {
- header.put(WebJsfConstants.SERVICE_HEADER_SECURE_KEY, GeneralConstants.EMPTY_VALUE);
- } else {
- header.put(WebJsfConstants.SERVICE_HEADER_SECURE_KEY, session.getAttribute(WebJsfConstants.SESS_LOGGED_SECURE_KEY));
- }
- header.put(WebJsfConstants.SERVICE_HEADER_MODULE, moduleName);
- header.put(WebJsfConstants.SERVICE_HEADER_DATETIME, DateUtil.dateTimeNow());
- if(humanTask.equals("")){
- // Need to support older version
- input.put("version", WebJsfConstants.VERSION_1_0);
- header.put(WebJsfConstants.SERVICE_HEADER_TASK_NAME, serviceName);
- } else {
- // New version use human task to authorize
- input.put("version", WebJsfConstants.VERSION_1_1);
- header.put(WebJsfConstants.SERVICE_HEADER_TASK_NAME, humanTask);
- header.put(WebJsfConstants.SERVICE_HEADER_SERVICE_NAME, serviceName);
- }
- // Since 1.1.8 adding some HTTP Information
- header.put(WebJsfConstants.SERVICE_HEADER_HTTP_REMOTE_ADDR, request.getRemoteAddr());
- header.put(WebJsfConstants.SERVICE_HEADER_HTTP_REMOTE_HOST, request.getRemoteHost());
- header.put(WebJsfConstants.SERVICE_HEADER_HTTP_REMOTE_PORT, request.getRemotePort());
- header.put(WebJsfConstants.SERVICE_HEADER_HTTP_REMOTE_USER, request.getRemoteUser());
- header.put(WebJsfConstants.SERVICE_HEADER_HTTP_USER_AGENT, request.getHeader("User-Agent"));
- input.put("header", header);
- input.put("payload", json);
- JSONObject send = new JSONObject();
- send.put("input", input);
- log.debug("Json Input: " + input);
- final String data = send.toJSONString();
- log.debug("Goto URL: " + url);
- URL anUrl = new URL(url);
- HttpURLConnection conn = (HttpURLConnection) anUrl.openConnection();
- conn.setRequestMethod("POST");
- conn.setDoOutput(true);
- conn.setDoInput(true);
- conn.setUseCaches(false);
- conn.setAllowUserInteraction(false);
- conn.setRequestProperty("Content-type", "application/json");
- OutputStream out = conn.getOutputStream();
- out.write(data.getBytes());
- out.close();
- if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
- InputStream in = conn.getInputStream();
- StringWriter w = new StringWriter();
- Reader reader = new InputStreamReader(in);
- char[] buf = new char[1024];
- int read = 0;
- while ((read = reader.read(buf)) >= 0) {
- w.append(new String(buf).substring(0, read));
- }
- in.close();
- conn.disconnect();
- String output = w.toString();
- log.debug("Json output: " + output);
- JSONObject jsonOutput = (JSONObject) JSONValue.parse(output);
- return jsonOutput;
- } else {
- throw new Exception("HTTP Error: " + conn.getResponseCode());
- }
- }
- private String getAuthenticateUrl() {
- return ServiceProvider.BASIC_PROTOCOL + getServiceProvider().getConfig(ServiceProvider.AUTH_PROXY);
- }
- private String getReauthenticateUrl() {
- return ServiceProvider.BASIC_PROTOCOL + getServiceProvider().getConfig(ServiceProvider.REAUTHENTICATE_PROXY);
- }
- private String getUserAuditUrl() {
- return ServiceProvider.BASIC_PROTOCOL + getServiceProvider().getConfig(ServiceProvider.USER_AUDIT_PROXY);
- }
- private String getTaskUrl() {
- return ServiceProvider.BASIC_PROTOCOL + getServiceProvider().getConfig(ServiceProvider.TASK_PROXY);
- }
- private ServiceProvider getServiceProvider() {
- return this.serviceProvider;
- }
- @SuppressWarnings("unchecked")
- private void doAuditReport(String reportName, JSONObject inputDto, Long tenantLoginId, Long roleLoginId, Long userLoginId, HttpServletRequest request) throws Exception{
- log.debug("Do audit report");
- // check setting, if not active skip
- HttpSession session = request.getSession();
- if(! GeneralConstants.YES.equals(session.getAttribute(WebJsfConstants.SESS_LOGGED_AUDIT_REPORT_ACTIVE)) ){
- return;
- }
- Long userId = userLoginId;
- Long roleId = roleLoginId;
- String ipAddress = request.getRemoteAddr();
- JSONObject inputAddAudit = new JSONObject();
- inputAddAudit.put("userLoginId", userLoginId);
- inputAddAudit.put("tenantLoginId", tenantLoginId);
- inputAddAudit.put("roleLoginId", roleLoginId);
- inputAddAudit.put("datetime", DateUtil.dateTimeNow());
- inputAddAudit.put("userId", userId);
- inputAddAudit.put("roleId", roleId);
- inputAddAudit.put("activityDatetime", DateUtil.dateTimeNow());
- inputAddAudit.put("reportConfigName", reportName);
- inputAddAudit.put("ipAddress", ipAddress);
- inputAddAudit.put("reportParameter", inputDto.toString());
- log.debug("Start calling report audit with input : "+inputAddAudit);
- JSONObject outputAudit = executeService(request, AuditReportApi.ADD_AUDIT_REPORT, inputAddAudit);
- if(ServiceResult.isFail(outputAudit)){
- JSONObject result = (JSONObject)outputAudit.get("result");
- String errorKey = (String) result.get("errorKey");
- JSONArray arr = (JSONArray) JSONValue.parse(result.get("args").toString());
- log.debug("Json ARR : "+arr);
- // log.debug("ARR : "+Arrays.toString(arr.toArray()));
- throw new CoreException(errorKey, arr!=null?arr.toArray():null);
- }
- log.debug("Finish report audit with result : "+outputAudit);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement