%/**
*
* FusionCharts Exporter is a jsp that handles
* FusionCharts (since v3.1) Server Side Export feature.
* This in conjuncture with other resource jsps and classes would
* process FusionCharts Export Data POSTED to it from FusionCharts
* and convert the data to image or PDF and subsequently save to the
* server or response back as http response to client side as download.
*
* This jsp might be called as the FusionCharts Exporter - main module
*
* @author InfoSoft Global (P) Ltd.
* @description FusionCharts Exporter (Server-Side - JSP)
* @version 1.0 [ 18 February 2009 ]
*
*/
/**
* ChangeLog / Version History:
* ----------------------------
*
* 1.0 [ 18 February 2009 ]
* - Integrated with new Export feature of FusionCharts 3.1
* - can save to server side directory
* - can provide download or open in browser window/frame other than _self
* - can report back to chart
* - can save as PDF/JPG/PNG/GIF
*
*/
/**
* Copyright (c) 2009 Infosoft Global Private Limited
*
*/
/**
* GENERAL NOTES
* -------------
*
* Chart would POST export data (which consists of encoded image data stream,
* width, height, background color and various other export parameters like
* exportFormat, exportFileName, exportAction, exportTargetWindow) to this script.
*
* The script would process this data using appropriate resource files build
* export binary (PDF/image)
*
* It either saves the binary as file to a server side directory or push it as
* Download or open in a new browser window/frame.
*
*
* ISSUES
* ------
* Q> What if someone wishes to open in the same page where the chart existed as postback
* replacing the old page?
*
* A> Not directly supported using any chart attribute or parameter but can do by
* removing/commenting the line containing request.setHeader("content-disposition ...'
*
*/
/**
* @requires FCExporter_{format}.jsp as export resouce for the specific format
* e.g. FCExporter_PDF.jsp (containing PDF Releated Export resource functionality)
* FCExporter_IMG.jsp (containing JPEG/PNG/GIF Releated Export resource functionality)
*
* Details
* -------
* Based on the format, the request would be forwarded to appropriate resource jsp
*
* FusionChartsExportHelper contains the following, which will be used by these resources.
* @see com.fusioncharts.exporter.FusionChartsExportHelper
*
* a) a HashMap - MIMETYPES contains key as a format name specified in the
* handlerAssociationsMap. The associated value
* would be the mimetype for the specified format.
*
* e.g. "jpg=image/jpeg,jpeg=image/jpeg,png=image/png,gif=image/gif"
*
*
* b) a HashMap - EXTENSIONS that contains key value pair. Each key would again be the
* format name and the extension would be the file extension.
*
* e.g. "jpg=jpg,jpeg=jpg,png=png,gif=gif"
*
*
* c) a HashMap -handlerAssociationsMap Contains key as format name and value as associated Handler suffix.
*
* e.g. "JPG=IMG,PDF=PDF, GIF=IMG"
*
* d) FusionChartsExportHelper also contains constants whose values can be modified from fusioncharts_export.properties file
* which should be present in the classpath if you want to modify the default values.
*
*/
%>
<%@page import="java.util.HashMap" %>
<%@page import="java.util.Iterator" %>
<%@page import="java.io.File" %>
<%@page import="java.util.StringTokenizer" %>
<%@page import="com.fusioncharts.exporter.FusionChartsExportHelper" %>
<%@page import="com.fusioncharts.exporter.beans.ExportBean" %>
<%@page import="com.fusioncharts.exporter.ErrorHandler" %>
<%
/*
FCExporter.jsp has logic to validate the parameters, putting default values for missing parameters and
then forwarding the request to appropriate jsp based on the requested export format.
*/
StringBuffer err_warn_Codes = new StringBuffer();
String WEB_ROOT_PATH = application.getRealPath("/");
String pathSeparator = File.separator; // will return either "\" or "/", depends on OS
String validation_def_filepath = WEB_ROOT_PATH+pathSeparator+FusionChartsExportHelper.RESOURCEPATH+"validation_def.jsp";
String relativePathToValidationDef = FusionChartsExportHelper.RESOURCEPATH+"validation_def.jsp";
/* ToDo - Not complete */
File f = new File(validation_def_filepath);
if(f.exists()) {
// include this file
%>
<%}
ExportBean localExportBean=FusionChartsExportHelper.parseExportRequestStream(request);
String exportFormat = (String)localExportBean.getExportParameterValue("exportformat");
String exporterFilePath = FusionChartsExportHelper.getExporterFilePath(exportFormat);
String exportTargetWindow = (String)localExportBean.getExportParameterValue("exporttargetwindow");
if (localExportBean.getMetadata().getWidth() == -1 || localExportBean.getMetadata().getHeight() == -1 ||
localExportBean.getMetadata().getWidth() == 0 || localExportBean.getMetadata().getHeight() == 0 ) {
//If Width/Height parameter is not sent, the ChartMetadata will have width/height as -1
//Raise Error E101 - Width/Height not found
err_warn_Codes.append("E101,");
}
if (localExportBean.getMetadata().getBgColor() == null) {
//Background color not available
err_warn_Codes.append("W513,");
}
if (localExportBean.getStream() == null ) {
//If image data not available
//Raise Error E100
err_warn_Codes.append("E100,");
}
String exportAction = (String)localExportBean.getExportParameterValue("exportaction");
boolean isHTML = false;
if(exportAction.equals("download"))
isHTML=true;
if(!exportAction.equals("download")) {
String fileNameWithoutExt = (String)localExportBean.getExportParameterValue("exportfilename");
String extension = FusionChartsExportHelper.getExtensionFor(exportFormat.toLowerCase());;
String fileName = fileNameWithoutExt+"."+ extension;
err_warn_Codes.append(ErrorHandler.checkServerSaveStatus(WEB_ROOT_PATH,fileName));
}
if(err_warn_Codes.indexOf("E") != -1) {
String meta_values= localExportBean.getMetadataAsQueryString(null,true,isHTML);
%>
<%
return;
}
//Now include the jsp for this file format
//Check if this file exists before including
%>
<% File exporter = new File(WEB_ROOT_PATH+pathSeparator+exporterFilePath);
if(exporter.exists()){%>
<% }else {/* exception*/}%>