*
*/
protected JFreeChart createMeterChart() throws JRException
{
// Start by creating the plot that will hold the meter
MeterPlot chartPlot = new MeterPlot((ValueDataset)getDataset());
JRMeterPlot jrPlot = (JRMeterPlot)getPlot();
// Set the shape
MeterShapeEnum shape = jrPlot.getShapeValue() == null ? MeterShapeEnum.DIAL : jrPlot.getShapeValue();
switch(shape)
{
case CHORD:
chartPlot.setDialShape(DialShape.CHORD);
break;
case PIE:
chartPlot.setDialShape(DialShape.PIE);
break;
case CIRCLE:
chartPlot.setDialShape(DialShape.CIRCLE);
break;
case DIAL:
default:
return createDialChart();
}
chartPlot.setDialOutlinePaint(Color.BLACK);
int meterAngle = jrPlot.getMeterAngleInteger() == null ? 180 : jrPlot.getMeterAngleInteger().intValue();
// Set the size of the meter
chartPlot.setMeterAngle(meterAngle);
// Set the spacing between ticks. I hate the name "tickSize" since to me it
// implies I am changing the size of the tick, not the spacing between them.
double tickInterval = jrPlot.getTickIntervalDouble() == null ? 10.0 : jrPlot.getTickIntervalDouble().doubleValue();
chartPlot.setTickSize(tickInterval);
JRFont tickLabelFont = jrPlot.getTickLabelFont();
Integer defaultBaseFontSize = (Integer)getDefaultValue(defaultChartPropertiesMap, ChartThemesConstants.BASEFONT_SIZE);
Font themeTickLabelFont = getFont((JRFont)getDefaultValue(defaultPlotPropertiesMap, ChartThemesConstants.PLOT_TICK_LABEL_FONT), tickLabelFont, defaultBaseFontSize);
chartPlot.setTickLabelFont(themeTickLabelFont);
Color tickColor = jrPlot.getTickColor() == null ? Color.BLACK : jrPlot.getTickColor();
chartPlot.setTickPaint(tickColor);
int dialUnitScale = 1;
Range range = convertRange(jrPlot.getDataRange());
if(range != null)
{
// Set the meter's range
chartPlot.setRange(range);
double bound = Math.max(Math.abs(range.getUpperBound()), Math.abs(range.getLowerBound()));
dialUnitScale = ChartThemesUtilities.getScale(bound);
if((range.getLowerBound() == (int)range.getLowerBound() &&
range.getUpperBound() == (int)range.getUpperBound() &&
tickInterval == (int)tickInterval) ||
dialUnitScale > 1
)
{
chartPlot.setTickLabelFormat(new DecimalFormat("#,##0"));
}
else if(dialUnitScale == 1)
{
chartPlot.setTickLabelFormat(new DecimalFormat("#,##0.0"));
}
else if(dialUnitScale <= 0)
{
chartPlot.setTickLabelFormat(new DecimalFormat("#,##0.00"));
}
}
chartPlot.setTickLabelsVisible(true);
// Set all the colors we support
Paint backgroundPaint = jrPlot.getOwnBackcolor() == null ? ChartThemesConstants.TRANSPARENT_PAINT : jrPlot.getOwnBackcolor();
chartPlot.setBackgroundPaint(backgroundPaint);
GradientPaint gp =
new GradientPaint(
new Point(), Color.LIGHT_GRAY,
new Point(), Color.BLACK,
false
);
if(jrPlot.getMeterBackgroundColor() != null)
{
chartPlot.setDialBackgroundPaint(jrPlot.getMeterBackgroundColor());
}
else
{
chartPlot.setDialBackgroundPaint(gp);
}
//chartPlot.setForegroundAlpha(1f);
Paint needlePaint = jrPlot.getNeedleColor() == null ? new Color(191, 48, 0) : jrPlot.getNeedleColor();
chartPlot.setNeedlePaint(needlePaint);
JRValueDisplay display = jrPlot.getValueDisplay();
if(display != null)
{
Color valueColor = display.getColor() == null ? Color.BLACK : display.getColor();
chartPlot.setValuePaint(valueColor);
String pattern = display.getMask() != null ? display.getMask() : "#,##0.####";
if(pattern != null)
chartPlot.setTickLabelFormat( new DecimalFormat(pattern));
JRFont displayFont = display.getFont();
Font themeDisplayFont = getFont((JRFont)getDefaultValue(defaultPlotPropertiesMap, ChartThemesConstants.PLOT_DISPLAY_FONT), displayFont, defaultBaseFontSize);
if (themeDisplayFont != null)
{
chartPlot.setValueFont(themeDisplayFont);
}
}
String label = getChart().hasProperties() ?
getChart().getPropertiesMap().getProperty(DefaultChartTheme.PROPERTY_DIAL_LABEL) : null;
if(label != null)
{
if(dialUnitScale < 0)
label = new MessageFormat(label).format(new Object[]{String.valueOf(Math.pow(10, dialUnitScale))});
else if(dialUnitScale < 3)
label = new MessageFormat(label).format(new Object[]{"1"});
else
label = new MessageFormat(label).format(new Object[]{String.valueOf((int)Math.pow(10, dialUnitScale-2))});
}
// Set the units - this is just a string that will be shown next to the
// value
String units = jrPlot.getUnits() == null ? label : jrPlot.getUnits();
if (units != null && units.length() > 0)
chartPlot.setUnits(units);
chartPlot.setTickPaint(Color.BLACK);
// Now define all of the intervals, setting their range and color
List intervals = jrPlot.getIntervals();
if (intervals != null && intervals.size() > 0)
{
int size = Math.min(3, intervals.size());
int colorStep = 0;
if(size > 3)
colorStep = 255 / (size - 3);
for(int i = 0; i < size; i++)
{
JRMeterInterval interval = (JRMeterInterval)intervals.get(i);
Color color = i < 3
? (Color)ChartThemesConstants.AEGEAN_INTERVAL_COLORS.get(i)
: new Color(255 - colorStep * (i - 3), 0 + colorStep * (i - 3), 0);
interval.setBackgroundColor(color);
interval.setAlpha(new Double(1.0));
chartPlot.addInterval(convertInterval(interval));
}
}
// Actually create the chart around the plot
JFreeChart jfreeChart =