/*
* Licensed Materials - Property of Perforce Software, Inc.
* © Copyright Perforce Software, Inc. 2014, 2021
* © Copyright IBM Corp. 2009, 2014
* © Copyright ILOG 1996, 2009
* All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* The Software and Documentation were developed at private expense and
* are "Commercial Items" as that term is defined at 48 CFR 2.101,
* consisting of "Commercial Computer Software" and
* "Commercial Computer Software Documentation", as such terms are
* used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
* as applicable.
*/
package imgmap;
import java.awt.Color;
import java.awt.Insets;
import java.util.Iterator;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.servlet.ServletContext;
import javax.swing.BorderFactory;
import org.xml.sax.InputSource;
import ilog.views.chart.IlvChart;
import ilog.views.chart.IlvChartLayout;
import ilog.views.chart.IlvChartRenderer;
import ilog.views.chart.IlvColor;
import ilog.views.chart.IlvLabelRenderer;
import ilog.views.chart.IlvLegend;
import ilog.views.chart.IlvLegendSeparator;
import ilog.views.chart.IlvStyle;
import ilog.views.chart.IlvValueFormat;
import ilog.views.chart.data.IlvDataSet;
import ilog.views.chart.data.xml.IlvXMLDataReader;
import ilog.views.chart.data.xml.IlvXMLDataSource;
import ilog.views.chart.faces.dhtml.IlvFacesChartImageMapGenerator;
import ilog.views.chart.faces.dhtml.interactor.IlvChartObjectSelectedFinder;
import ilog.views.chart.faces.servlet.IlvFacesChart;
import ilog.views.chart.faces.servlet.IlvFacesChartLegend;
import ilog.views.chart.graphic.IlvDataLabelAnnotation;
import ilog.views.chart.renderer.IlvPieChartRenderer;
import ilog.views.chart.renderer.IlvSinglePieRenderer;
import ilog.views.util.IlvResourceUtil;
/**
* The bean of the image map sample.
*/
public class ImageMapBean {
private IlvChart chart;
private static IlvFacesChartImageMapGenerator imapGenerator = new ImageMapAreaGenerator();
private static IlvChartObjectSelectedFinder finder = new ImageMapFinder();
/**
* Creates a new <code>ImageMapBean</code> instance.
*/
public ImageMapBean() {
chart = createChart();
}
/**
* Creates the pie chart to display.
*
* @return The Pie chart.
*/
protected IlvChart createChart() {
ServletContext context = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
// Create the IlvChart.
IlvChart chart = new IlvFacesChart(IlvChart.PIE);
chart.getChartArea().setMargins(new Insets(40, 40, 40, 40));
chart.set3D(true);
chart.get3DView().setDepth(10);
chart.setAntiAliasing(true);
chart.setAntiAliasingText(true);
chart.setBackground(Color.white);
chart.setOpaque(true);
Color borderColor = new Color(153, 153, 204);
chart.setBorder(BorderFactory.createLineBorder(borderColor, 2));
// Set the format for y-value
chart.setYValueFormat(0, new IlvValueFormat() {
java.text.NumberFormat fmt = new java.text.DecimalFormat("##.0");
Override
public String formatValue(double value) {
return fmt.format(value);
}
});
// Initialize a new XML data source.
IlvXMLDataSource ds = new IlvXMLDataSource();
IlvXMLDataReader reader = new IlvXMLDataReader();
// Register a custom IlvXMLPropertyReader subclass in order to read
// href element.
IlvXMLDataReader.registerPropertyReader(HREFPropertyReader.HREFS_TAG, new HREFPropertyReader());
reader.setValidating(true);
// Load the data.
try {
String url = context.getInitParameter("dataFile");
InputSource inputsrc = new InputSource(context.getResource(url).openStream());
// Bug with InputSource + custom EntityResolver : an URI needs to
// be defined, even if not used later
inputsrc.setSystemId("../");
ds.load(inputsrc, reader);
} catch (Exception e) {
e.printStackTrace();
String msg = IlvResourceUtil.getServerLocaleString(ImageMapBean.class, "notLoadFile");
System.err.println(msg);
}
chart.setDataSource(ds);
IlvPieChartRenderer r = (IlvPieChartRenderer) chart.getRenderer(0);
Iterator<IlvDataSet> ite = ds.getDataSetIterator();
while (ite.hasNext()) {
IlvDataSet dataSet = ite.next();
IlvSinglePieRenderer pie = r.getPie(dataSet);
int count = dataSet.getDataCount();
for (int i = 0; i < count; ++i) {
IlvStyle style = pie.getSliceStyle(i);
Color bg = style.getFillColor();
bg = (bg == null) ? Color.white : IlvColor.brighter(bg);
IlvLabelRenderer l = new IlvLabelRenderer(bg, Color.black);
pie.setAnnotation(dataSet, i, new IlvDataLabelAnnotation(l));
}
}
chart.getRenderer(0).setDataLabeling(IlvChartRenderer.PERCENT_LABEL);
chart.getRenderer(0).setDataLabelLayout(IlvChartRenderer.OUTSIDE_LABEL_LAYOUT);
IlvLegend legend = new IlvFacesChartLegend();
legend.setBorder(new IlvLegendSeparator(borderColor, 2, 3, 1));
chart.addLegend(legend, IlvChartLayout.WEST);
return chart;
}
/**
* Explodes the selected slice from the Pie.
*
* @param event
* The value change event that contains the slice selected.
*/
public void explode(ValueChangeEvent event) {
Integer explodedIdx = (Integer) event.getNewValue();
if (explodedIdx != null) {
int explodedDs = explodedIdx.intValue();
int count = chart.getDataSource().getDataSet(0).getDataCount();
IlvSinglePieRenderer pie = (IlvSinglePieRenderer) ((IlvPieChartRenderer) chart.getRenderer(0)).getChild(0);
for (int i = 0; i < count; ++i) {
pie.setExploded(i, explodedDs == i);
}
}
}
/**
* Returns the image map generator.
*
* @return The image map generator.
*/
public IlvFacesChartImageMapGenerator getImapGenerator() {
return imapGenerator;
}
/**
* Returns the chart to display.
*
* @return The chart to display.
*/
public IlvChart getChart() {
return chart;
}
/**
* Returns the finder that will return the value passed to the value change
* event.
*
* @return The finder.
*/
public IlvChartObjectSelectedFinder getFinder() {
return finder;
}
}