[セットトップ]FusionChartsCreatorでレポートを作成する
11015 ワード
package com;
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.io.UnsupportedEncodingException; import java.net.URLEncoder;
/** * Contains methods to add no cache string to a url,creating the charts.<br> * This class can be used to create chart xml given the swf filename and other<br> * parameters.<br> * In order to use this class in your jsps,import this class and<br> * call the appropriate method directly as follows:<br> * FusionChartsCreator.createChart(...);<br> * * @author InfoSoft Global (P) Ltd. */ public class FusionChartsCreator {
/** * Adds additional string to the url to and encodes the parameters,<br> * so as to disable caching of data.<br> * @param strDataURL - * dataURL to be fed to chart * @param addNoCacheStr - * Whether to add aditional string to URL to disable * caching of data * @return cachedURL - URL with the additional string added */
public static String addCacheToDataURL(String strDataURL) { String cachedURL = strDataURL; // Add the no-cache string if required
// We add ?FCCurrTime=xxyyzz // If the dataURL already contains a ?, we add &FCCurrTime=xxyyzz // We replace : with _, as FusionCharts cannot handle : in URLs Calendar nowCal = Calendar.getInstance(); Date now = nowCal.getTime(); SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH_mm_ss a"); String strNow = sdf.format(now);
try {
if (strDataURL.indexOf("?") > 0) { cachedURL = strDataURL + "&FCCurrTime=" + URLEncoder.encode(strNow, "UTF-8"); } else { cachedURL = strDataURL + "?FCCurrTime=" + URLEncoder.encode(strNow, "UTF-8"); }
} catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); cachedURL = strDataURL + "?FCCurrTime=" + strNow; }
return cachedURL; }
/** * Creates the JavaScript + HTML code required to embed a chart.<br> * Uses the javascript FusionCharts class to create the chart by supplying <br> * the required parameters to it.<br> * Note: Only one of the parameters strURL or strXML has to be not null for this<br> * method to work. If both the parameters are provided then strURL is used for further processing.<br> * * @param chartSWF - * SWF File Name (and Path) of the chart which you intend * to plot * @param strURL - * If you intend to use dataURL method for this chart, * pass the URL as this parameter. Else, set it to "" (in * case of dataXML method) * @param strXML - * If you intend to use dataXML method for this chart, * pass the XML data as this parameter. Else, set it to "" * (in case of dataURL method) * @param chartId - * Id for the chart, using which it will be recognized in * the HTML page. Each chart on the page needs to have a * unique Id. * @param chartWidth - * Intended width for the chart (in pixels) * @param chartHeight - * Intended height for the chart (in pixels) * @param debugMode - * Whether to start the chart in debug mode * @param registerWithJS - * Whether to ask chart to register itself with * JavaScript */ public static String createChart(String chartSWF, String strURL, String strXML, String chartId, int chartWidth, int chartHeight, boolean debugMode, boolean registerWithJS) { StringBuffer strBuf = new StringBuffer(); // First we create a new DIV for each chart. We specify the name of DIV // as "chartId"Div. // DIV names are case-sensitive.
strBuf.append("/t/t<!-- START Script Block for Chart-->/n"); strBuf.append("/t/t<div id='" + chartId + "Div' align='center'>/n"); strBuf.append("/t/t/t/tChart./n");
/* * The above text "Chart" is shown to users before the chart has started * loading (if there is a lag in relaying SWF from server). This text is * also shown to users who do not have Flash Player installed. You can * configure it as per your needs. */
strBuf.append("/t/t</div>/n");
/* * Now, we create the chart using FusionCharts js class. Each chart's * instance (JavaScript) Id is named as chart_"chartId". */
strBuf.append("/t/t<script type='text/javascript'>/n"); // Instantiate the Chart Boolean registerWithJSBool = new Boolean(registerWithJS); Boolean debugModeBool = new Boolean(debugMode); int regWithJSInt = boolToNum(registerWithJSBool); int debugModeInt = boolToNum(debugModeBool);
strBuf.append("/t/t/t/tvar chart_" + chartId + " = new FusionCharts('" + chartSWF + "', '" + chartId + "', '" + chartWidth + "', '" + chartHeight + "', '" + debugModeInt + "', '" + regWithJSInt + "');/n"); // Check whether we've to provide data using dataXML method or dataURL // method if (strXML.equals("")) { strBuf.append("/t/t/t/t// Set the dataURL of the chart/n"); strBuf.append("/t/t/t/tchart_" + chartId + ".setDataURL(/"" + strURL + "/");/n"); } else { strBuf.append("/t/t/t/t// Provide entire XML data using dataXML method/n"); strBuf.append("/t/t/t/tchart_" + chartId + ".setDataXML(/"" + strXML + "/");/n"); } strBuf.append("/t/t/t/t// Finally, render the chart./n"); strBuf.append("/t/t/t/tchart_" + chartId + ".render(/"" + chartId + "Div/");/n"); strBuf.append("/t/t</script>/n"); strBuf.append("/t/t<!--END Script Block for Chart-->/n"); return strBuf.substring(0); }
/** * Creates the object tag required to embed a chart. * Generates the object tag to embed the swf directly into the html page.<br> * Note: Only one of the parameters strURL or strXML has to be not null for this<br> * method to work. If both the parameters are provided then strURL is used for further processing.<br> * * @param chartSWF - * SWF File Name (and Path) of the chart which you intend * to plot * @param strURL - * If you intend to use dataURL method for this chart, * pass the URL as this parameter. Else, set it to "" (in * case of dataXML method) * @param strXML - * If you intend to use dataXML method for this chart, * pass the XML data as this parameter. Else, set it to "" * (in case of dataURL method) * @param chartId - * Id for the chart, using which it will be recognized in * the HTML page. Each chart on the page needs to have a * unique Id. * @param chartWidth - * Intended width for the chart (in pixels) * @param chartHeight - * Intended height for the chart (in pixels) * @param debugMode - * Whether to start the chart in debug mode */ public static String createChartHTML(String chartSWF, String strURL, String strXML, String chartId, int chartWidth, int chartHeight, boolean debugMode) { /* * Generate the FlashVars string based * on whether dataURL has been provided * or dataXML. */ String strFlashVars = ""; Boolean debugModeBool = new Boolean(debugMode);
if (strXML.equals("")) { // DataURL Mode strFlashVars = "chartWidth=" + chartWidth + "&chartHeight=" + chartHeight + "&debugMode=" + boolToNum(debugModeBool) + "&dataURL=" + strURL + ""; } else { // DataXML Mode strFlashVars = "chartWidth=" + chartWidth + "&chartHeight=" + chartHeight + "&debugMode=" + boolToNum(debugModeBool) + "&dataXML=" + strXML + ""; } StringBuffer strBuf = new StringBuffer();
strBuf.append("/t/t<!--START Code Block for Chart-->/n"); strBuf .append("/t/t<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0' width='" + chartWidth + "' height='" + chartHeight + "' id='" + chartId + "'>/n"); strBuf.append("/t/t/t/t<param name='allowScriptAccess' value='always' />/n"); strBuf.append("/t/t/t/t<param name='movie' value='" + chartSWF + "'/>/n"); strBuf.append("/t/t/t/t<param name='FlashVars' value=/"" + strFlashVars + "/" />/n"); strBuf.append("/t/t/t/t<param name='quality' value='high' />/n"); strBuf .append("/t/t/t/t<embed src='" + chartSWF + "' FlashVars=/"" + strFlashVars + "/" quality='high' width='" + chartWidth + "' height='" + chartHeight + "' name='" + chartId + "' allowScriptAccess='always' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' />/n"); strBuf.append("/t/t</object>/n"); strBuf.append("/t/t<!--END Code Block for Chart-->/n"); return strBuf.substring(0); }
/** * Converts a Boolean value to int value<br> * * @param bool Boolean value which needs to be converted to int value * @return int value correspoding to the boolean : 1 for true and 0 for false */ public static int boolToNum(Boolean bool) { int num = 0; if (bool.booleanValue()) { num = 1; } return num; } }