package com.github.wicketoracle.html.panel.dojo.chart.pie; import java.util.ArrayList; import java.util.List; import org.apache.wicket.AttributeModifier; import org.apache.wicket.markup.html.IHeaderContributor; import org.apache.wicket.markup.html.IHeaderResponse; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; import org.apache.wicket.ResourceReference; import org.codehaus.jackson.map.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.github.wicketoracle.oracle.dao.charting.ChartDatum; /** * Wrap up the Dojo Toolkits pie chart tool behind a panel, so that it can easily * be reused in any situation. * * @author Andrew Hall * */ public class Dojo2DPieChartPanel extends Panel implements IHeaderContributor { private static final long serialVersionUID = 1L; private static final Logger LOGGER = LoggerFactory.getLogger( Dojo2DPieChartPanel.class ); private DojoChartTheme dojoChartTheme; private boolean moveSlice = false; private boolean useToolTip = false; private int radius; private int labelOffset; private List<ChartDatum> data = new ArrayList<ChartDatum>(); /** * * @param pId * @param pPanelWidth * @param pPanelHeight * @param pDojoChartTheme * @param pMoveSlice * @param pUseToolTip * @param pRadius * @param pLabelOffset * @param pData */ public Dojo2DPieChartPanel( final String pId , final int pPanelWidth , final int pPanelHeight , final DojoChartTheme pDojoChartTheme , final boolean pMoveSlice , final boolean pUseToolTip , final int pRadius , final int pLabelOffset , final List<ChartDatum> pData ) { super( pId ); dojoChartTheme = pDojoChartTheme; moveSlice = pMoveSlice; useToolTip = pUseToolTip; radius = pRadius; labelOffset = pLabelOffset; data = pData; setOutputMarkupId( true ); add( new AttributeModifier( "style" , true , new Model<String>( "width:" + Integer.toString( pPanelWidth ) + "px;height:" + Integer.toString( pPanelHeight ) + "px;" ) ) ); } /** * Build some dynamic javascript in order to tailor this pie chart to our needs */ public final void renderHead( final IHeaderResponse response ) { String json = "[]"; try { json = new ObjectMapper().writeValueAsString( data ); response.renderJavascriptReference( new ResourceReference( Dojo2DPieChartPanel.class , "Dojo2DPieChartPanel.js" ) ); response.renderJavascript ( "dojo.addOnLoad(function(){" + "var json = " + json + ";" + "renderDojo2DPieChart( " + this.getMarkupId( true ) + " , json , " + dojoChartTheme.getDojoClass() + " , " + Boolean.toString( moveSlice ) + " , " + useToolTip + " , " + Integer.toString( radius ) + " , " + Integer.toString( labelOffset ) + " )});", "jsDojo2DPieChart" ); } catch ( Exception e ) { LOGGER.error( "JSON Exception :: {}" , e.toString() ); error( getLocalizer().getString( "MessageUnexpectedError" , this ) ); } } }