001: /*
002: * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
003: * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to license terms.
004: */
005: package com.sun.portal.ubt.report.view.chart;
006:
007: import org.jfree.chart.JFreeChart;
008: import org.jfree.chart.StandardLegend;
009: import org.jfree.chart.renderer.xy.XYItemRenderer;
010: import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
011: import org.jfree.chart.renderer.category.BarRenderer;
012: import org.jfree.chart.labels.StandardPieItemLabelGenerator;
013: import org.jfree.chart.labels.StandardCategoryLabelGenerator;
014: import org.jfree.chart.plot.Plot;
015: import org.jfree.chart.plot.CategoryPlot;
016: import org.jfree.chart.plot.PiePlot;
017: import org.jfree.chart.plot.XYPlot;
018: import org.jfree.chart.axis.NumberAxis;
019: import org.jfree.chart.axis.CategoryLabelPositions;
020: import org.jfree.chart.axis.DateAxis;
021: import org.jfree.util.Rotation;
022: import org.jfree.ui.Spacer;
023: import org.jfree.data.time.TimeSeriesCollection;
024: import org.jfree.data.time.Minute;
025: import org.jfree.data.time.Hour;
026: import org.jfree.data.category.DefaultCategoryDataset;
027:
028: import java.awt.*;
029: import java.text.NumberFormat;
030: import java.text.SimpleDateFormat;
031:
032: /**
033: *
034: */
035: public class UBTChartUtil {
036: public static void customizeChart(JFreeChart chart) {
037: chart.setBackgroundPaint(new Color(0xffffff));
038: Plot plot = chart.getPlot();
039: if (plot instanceof CategoryPlot) {
040: if (((CategoryPlot) plot).getDataset(0) instanceof DefaultCategoryDataset) { //we always use DefaultIntervalCategoryDataset otherwise
041: chart.setLegend(null);
042: final BarRenderer renderer = (BarRenderer) ((CategoryPlot) plot)
043: .getRenderer();
044: renderer.setDrawBarOutline(false);
045:
046: final NumberFormat labelFormatter = NumberFormat
047: .getIntegerInstance();
048: renderer
049: .setLabelGenerator(new StandardCategoryLabelGenerator(
050: "{2}", labelFormatter));
051: renderer.setItemLabelsVisible(true);
052: }
053: ((NumberAxis) ((CategoryPlot) plot).getRangeAxis())
054: .setStandardTickUnits(NumberAxis
055: .createIntegerTickUnits());
056: ((CategoryPlot) plot)
057: .getDomainAxis()
058: .setCategoryLabelPositions(
059: CategoryLabelPositions
060: .createUpRotationLabelPositions(Math.PI / 4.0));
061: } else if (plot instanceof PiePlot) {
062: ((PiePlot) plot).setStartAngle(225);
063: ((PiePlot) plot).setDirection(Rotation.CLOCKWISE);
064: ((PiePlot) plot)
065: .setLabelGenerator(new StandardPieItemLabelGenerator(
066: "{0} ({1}) ({2})", NumberFormat
067: .getNumberInstance(), NumberFormat
068: .getPercentInstance()));
069:
070: } else if (plot instanceof XYPlot) {
071: StandardLegend sl = (StandardLegend) chart.getLegend();
072: sl.setDisplaySeriesShapes(true);
073: ((XYPlot) plot).setBackgroundPaint(Color.lightGray);
074: ((XYPlot) plot).setDomainGridlinePaint(Color.white);
075: ((XYPlot) plot).setRangeGridlinePaint(Color.white);
076: ((XYPlot) plot).setAxisOffset(new Spacer(Spacer.ABSOLUTE,
077: 5.0, 5.0, 5.0, 5.0));
078: ((XYPlot) plot).setDomainCrosshairVisible(true);
079: ((XYPlot) plot).setRangeCrosshairVisible(true);
080: ((NumberAxis) ((XYPlot) plot).getRangeAxis())
081: .setStandardTickUnits(NumberAxis
082: .createIntegerTickUnits());
083: XYItemRenderer renderer = ((XYPlot) plot).getRenderer();
084: if (renderer instanceof StandardXYItemRenderer) {
085: StandardXYItemRenderer rr = (StandardXYItemRenderer) renderer;
086: rr.setPlotShapes(true);
087: rr.setShapesFilled(true);
088: }
089: DateAxis axis = (DateAxis) ((XYPlot) plot).getDomainAxis();
090:
091: if (((XYPlot) plot).getDataset() instanceof TimeSeriesCollection) {
092: if (((TimeSeriesCollection) ((XYPlot) plot)
093: .getDataset()).getSeriesCount() == 1) {
094: chart.setLegend(null);
095: }
096: if (((TimeSeriesCollection) ((XYPlot) plot)
097: .getDataset()).getSeriesCount() >= 1) {
098: if (((TimeSeriesCollection) ((XYPlot) plot)
099: .getDataset()).getSeries(0)
100: .getTimePeriodClass().equals(Minute.class)) {
101: axis
102: .setDateFormatOverride(new SimpleDateFormat(
103: "hh:mm, MMM d, ''yy"));
104: } else if (((TimeSeriesCollection) ((XYPlot) plot)
105: .getDataset()).getSeries(0)
106: .getTimePeriodClass().equals(Hour.class)) {
107: axis
108: .setDateFormatOverride(new SimpleDateFormat(
109: "hh, MMM d, ''yy"));
110: } else {
111: axis
112: .setDateFormatOverride(new SimpleDateFormat(
113: "MMM d, ''yy"));
114: }
115: }
116: } else {
117: axis.setDateFormatOverride(new SimpleDateFormat(
118: "dd-MMM-yy"));
119: }
120: }
121: }
122:
123: }
|