<% /** * Copyright (c) 2009 Infosoft Global Private Limited * */ /** * ChangeLog / Version History: * ---------------------------- * * 1.0 [ 19 February 2009 ] * - Added encoders * - can save as JPG/PNG/GIF * ----- General Comments ---- * This jsp uses the exportBean present in the request scope to get the values required for image generation. * Encoder is chosen based on the requested image format (JPG, PNG, GIF). * The StringBuffer err_warn_Codes contains the error codes if any, during the execution. * In case of "save" action, if the file already exists in the specified, if overwrite is off, * and Intelligent File Naming is on, * A new unique filename is created and data is saved to that file. * Finally, if there are any errors, the request is forwarded to the error page. */ %><%@page import="java.util.HashMap" %><%@page import="java.io.OutputStream" %><%@ page import="javax.imageio.ImageIO"%><%@ page import="java.awt.image.BufferedImage"%><%@ page import="javax.imageio.stream.FileImageOutputStream"%><%@page import="java.util.Iterator" %><%@page import="java.io.File" %><%@ page import="com.fusioncharts.exporter.generators.ImageGenerator"%><%@ page import="com.fusioncharts.exporter.encoders.JPEGEncoder"%><%@ page import="com.fusioncharts.exporter.encoders.BasicEncoder"%><%@ page import="com.fusioncharts.exporter.beans.ChartMetadata"%><%@page import="com.fusioncharts.exporter.FusionChartsExportHelper"%><%@ page import="com.fusioncharts.exporter.ErrorHandler"%><% String action= (String)exportBean.getExportParameterValue("exportaction"); String exportFormat = (String)exportBean.getExportParameterValue("exportformat"); String exportTargetWindow = (String)exportBean.getExportParameterValue("exporttargetwindow"); String fileNameWithoutExt = (String)exportBean.getExportParameterValue("exportfilename"); String extension = FusionChartsExportHelper.getExtensionFor(exportFormat.toLowerCase());; String fileName = fileNameWithoutExt+"."+ extension; String stream = (String)exportBean.getStream(); ChartMetadata metadata= exportBean.getMetadata(); boolean isHTML = false; if(action.equals("download")) isHTML=true; StringBuffer err_warn_Codes = new StringBuffer(); BufferedImage chartImage = ImageGenerator.getChartImage(stream,metadata); String noticeMessage = ""; String meta_values= exportBean.getMetadataAsQueryString(null,false,isHTML); if(!action.equals("download")){ noticeMessage = "¬ice="; // For servlet api before 2.1 use the following //String requestURL = HttpUtils.getRequestURL(request).toString(); // in servlet api 2.1 use the following //String requestURL = request.getRequestURL().toString(); String pathToWebAppRoot = getServletContext().getRealPath("/"); String pathToSaveFolder = pathToWebAppRoot+File.separator+FusionChartsExportHelper.SAVEPATH; File saveFolder = new File(pathToSaveFolder); String completeFilePath = pathToSaveFolder + File.separator + fileName; String completeFilePathWithoutExt = pathToSaveFolder + File.separator + fileNameWithoutExt; File saveFile = new File(completeFilePath); if(saveFile.exists()) { noticeMessage+=ErrorHandler.getErrorForCode("W509"); if(!FusionChartsExportHelper.OVERWRITEFILE){ if(FusionChartsExportHelper.INTELLIGENTFILENAMING) { noticeMessage+=ErrorHandler.getErrorForCode("W514"); completeFilePath= FusionChartsExportHelper.getUniqueFileName(completeFilePathWithoutExt,extension); File tempFile= new File(completeFilePath); fileName = tempFile.getName(); noticeMessage+=ErrorHandler.getErrorForCode("W515")+ fileName; err_warn_Codes.append("W515,"); } } } // In Save mode, send back Successful response back to chart // In save mode, isHTML is false String pathToDisplay=FusionChartsExportHelper.HTTP_URI+"/"+fileName; if (FusionChartsExportHelper.HTTP_URI.endsWith("/")) { pathToDisplay=FusionChartsExportHelper.HTTP_URI+fileName; } meta_values =exportBean.getMetadataAsQueryString(pathToDisplay,false,isHTML); // Now encode and save to file FileImageOutputStream fios = new FileImageOutputStream(new File(completeFilePath)); if( exportFormat.toLowerCase().equalsIgnoreCase("jpg") || exportFormat.toLowerCase().equalsIgnoreCase("jpeg")){ JPEGEncoder jpegEncoder = new JPEGEncoder(); try { jpegEncoder.encode(chartImage,fios); }catch(Throwable e){ //TODO Unable to encode the buffered image err_warn_Codes.append("E516,"); } chartImage=null; } else { BasicEncoder basicEncoder = new BasicEncoder(); try { basicEncoder.encode(chartImage,fios,1F,exportFormat.toLowerCase()); }catch(Throwable e){ System.out.println(" Unable to encode the buffered image"); err_warn_Codes.append("E516,"); } chartImage=null; } if(err_warn_Codes.indexOf("E")<0){ // if there are no errors out.print(meta_values+noticeMessage+"&statusCode=1&statusMessage=successful"); } } else{ response.setContentType(FusionChartsExportHelper.getMimeTypeFor(exportFormat.toLowerCase())); OutputStream os = response.getOutputStream(); if(exportTargetWindow.equalsIgnoreCase("_self")){ response.addHeader("Content-Disposition", "attachment; filename=\""+fileName+"\""); //response.addHeader("Content-length",""+ios.length()); } else { response.addHeader("Content-Disposition", "inline; filename=\""+fileName+"\""); } if( exportFormat.toLowerCase().equalsIgnoreCase("jpg") || exportFormat.toLowerCase().equalsIgnoreCase("jpeg")){ JPEGEncoder jpegEncoder = new JPEGEncoder(); try { jpegEncoder.encode(chartImage,os); os.flush(); }catch(Throwable e){ //Unable to encode the buffered image System.out.println("Unable to (JPEG) encode the buffered image"); err_warn_Codes.append("E516,"); //os.flush(); // Note forward will not work in this case, as the output stream has already been opened // Hence we have to output the error directly. meta_values =exportBean.getMetadataAsQueryString(null,true,isHTML); // Reset the response to set new content type and use out instead of outputstream response.reset(); response.setContentType("text/html"); out.print(meta_values+noticeMessage+ErrorHandler.buildResponse(err_warn_Codes.toString(),isHTML)); return; } chartImage=null; } else { BasicEncoder basicEncoder = new BasicEncoder(); try { basicEncoder.encode(chartImage,os,1F,exportFormat.toLowerCase()); os.flush(); }catch(Throwable e){ System.out.println("Unable to encode the buffered image"); err_warn_Codes.append("E516,"); //os.flush(); // Note forward will not work in this case, as the output stream has already been opened // Hence we have to output the error directly. meta_values =exportBean.getMetadataAsQueryString(null,true,isHTML); // Reset the response to set new content type and use out instead of outputstream response.reset(); response.setContentType("text/html"); out.print(meta_values+noticeMessage+ErrorHandler.buildResponse(err_warn_Codes.toString(),isHTML)); return; } chartImage=null; } // Don't close the servlet output stream //os.close(); } if(err_warn_Codes.indexOf("E") != -1) { meta_values =exportBean.getMetadataAsQueryString(null,true,isHTML); %> <% return;}// end of if error%>