<p>// Import logging package and initialize a logger<br />importPackage(Packages.java.util.logging);<br /><br />var logger = Logger.getLogger("org.eclipse.birt.sample");<br /><br />// This array holds the rgb tuples for the datapoints<br />var datacolors = new Array();<br /><br />// This indicates whether report should be anonymized (one color for all users)<br />var isAnonymousReport = false;<br /><br />// Initialize the datacolors array based on the string array that is passed<br />// each string should look like "item-name,red-value,green-value,blue-value"<br />function initDataColors(dcp)<br />{<br /> for (i = 0; i < dcp.length; i++)<br /> {<br /> var tmp = dcp
;<br /> var str = tmp.split(",");<br /> datacolors[str[0]] = {red:str[1], green:str[2], blue:str[3]};<br /> // logger.severe("Created datacolor for item " + str[0] + " = " + datacolors[str[0]].red + "," + datacolors[str[0]].green + "," + datacolors[str[0]].blue);<br /> }<br /> <br /> datacolors["anonymous"] = {red:128, green:128, blue:128};<br /> datacolors["unknown"] = {red:255, green:255, blue:255};<br />}<br /><br />/**<br /> * Set the fill of a bar/legend depending on the datacolor array<br /> * Takes anonymous report-generation into consideration<br /> * <br /> * @param fill<br /> * Fill<br /> * @param key<br /> * String<br /> */<br />function setFill(fill, key)<br />{<br /> var r, g, b;<br /><br /> if (isAnonymousReport)<br /> {<br /> r = datacolors["anonymous"].red;<br /> g = datacolors["anonymous"].green;<br /> b = datacolors["anonymous"].blue;<br /> }<br /> else if (key in datacolors)<br /> {<br /> r = datacolors[key].red;<br /> g = datacolors[key].green;<br /> b = datacolors[key].blue;<br /> <br /> // logger.severe("key " + key + " = " + r + "," + g + "," + b);<br /> }<br /> else<br /> {<br /> r = datacolors["unknown"].red;<br /> g = datacolors["unknown"].green;<br /> b = datacolors["unknown"].blue;<br /> }<br /><br /> fill.set(r, g, b);<br />}<br /><br />/**<br /> * Called before generation of chart model to GeneratedChartState.<br /> * <br /> * @param chart<br /> * ChartWithAxesImpl<br /> * @param icsc<br /> * IChartScriptContext<br /> */<br /><br />function beforeGeneration( chart, icsc )<br />{<br /> logger.severe("beforeGeneration");<br /> <br /> var repcontext = icsc.getExternalContext().getScriptable();<br /> <br /> // initialize the data color items<br /> // the values expected here are strings in an array that<br /> // have the format "item-name,red-value,green-value,blue-value"<br /> initDataColors(repcontext.getParameterValue("data_colors"));<br /> <br /> // set the anonymous flag to generate an uncolorful chart<br /> var anonymous = repcontext.getParameterValue("anonymous");<br /> logger.severe("Setting isAnonymousReport to '" + anonymous + "'");<br /> if (anonymous.toString().toLowerCase() == "true")<br /> isAnonymousReport = true;<br />}<br /><br />/**<br /> * Called before drawing each datapoint graphical representation or marker.<br /> * <br /> * @param dph<br /> * DataPointHints<br /> * @param fill<br /> * Fill<br /> * @param icsc<br /> * IChartScriptContext<br /> */<br />function beforeDrawDataPoint( dph, fill, icsc )<br />{<br /> var seriesValue = dph.getSeriesValue();<br /> <br /> setFill(fill, seriesValue);<br />}<br /><br />/**<br /> * Called before drawing the legend item.<br /> * <br /> * @param lerh<br /> * LegendEntryRenderingHints<br /> * @param bounds<br /> * Bounds<br /> * @param icsc<br /> * IChartScriptContext<br /> * @since Version 2.2.0<br /> */<br /><br />function beforeDrawLegendItem( lerh, bounds, icsc )<br />{<br /> var fill = lerh.getFill();<br /><br /> var seriesValue = lerh.getLabel().getCaption().getValue();<br /> <br /> setFill(fill, seriesValue);<br />}</p>