=== modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/impl/DefaultChartService.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/impl/DefaultChartService.java 2013-04-30 12:40:20 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/impl/DefaultChartService.java 2013-05-02 12:31:26 +0000 @@ -68,6 +68,7 @@ import org.jfree.chart.plot.PiePlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.ValueMarker; +import org.jfree.chart.renderer.category.AreaRenderer; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.chart.renderer.category.CategoryItemRenderer; import org.jfree.chart.renderer.category.LineAndShapeRenderer; @@ -483,6 +484,23 @@ } /** + * Returns an area renderer. + * + * TODO centralize these renderer methods. + */ + private AreaRenderer getAreaRenderer() + { + AreaRenderer renderer = new AreaRenderer(); + + for ( int i = 0; i < colors.length; i++ ) + { + renderer.setSeriesPaint( i, colors[i] ); + } + + return renderer; + } + + /** * Returns a horizontal line marker for the given x value and label. */ private Marker getMarker( Double value, String label ) @@ -513,7 +531,7 @@ CategoryDataset[] dataSets = getCategoryDataSet( chart ); - if ( chart.isType( TYPE_LINE ) || chart.isType( TYPE_AREA ) ) + if ( chart.isType( TYPE_LINE ) ) { plot = new CategoryPlot( dataSets[0], new CategoryAxis(), new NumberAxis(), lineRenderer ); plot.setOrientation( PlotOrientation.VERTICAL ); @@ -528,6 +546,10 @@ plot = new CategoryPlot( dataSets[0], new CategoryAxis(), new NumberAxis(), barRenderer ); plot.setOrientation( PlotOrientation.HORIZONTAL ); } + else if ( chart.isType( TYPE_AREA ) ) + { + return getAreaChart( chart, dataSets[0] ); + } else if ( chart.isType( TYPE_PIE ) ) { return getMultiplePieChart( chart, dataSets ); @@ -591,6 +613,28 @@ return jFreeChart; } + private JFreeChart getAreaChart( Chart chart, CategoryDataset dataSet ) + { + JFreeChart areaChart = ChartFactory.createAreaChart( chart.getName(), chart.getDomainAxisLabel(), + chart.getRangeAxisLabel(), dataSet, PlotOrientation.VERTICAL, true, false, false ); + + CategoryPlot plot = (CategoryPlot) areaChart.getPlot(); + plot.setBackgroundPaint( Color.WHITE ); + plot.setOutlinePaint( Color.WHITE ); + plot.setOrientation( PlotOrientation.VERTICAL ); + plot.setRenderer( getAreaRenderer() ); + + CategoryAxis xAxis = plot.getDomainAxis(); + xAxis.setCategoryLabelPositions( CategoryLabelPositions.UP_45 ); + xAxis.setLabelFont( labelFont ); + + areaChart.getTitle().setFont( titleFont ); + areaChart.addSubtitle( getSubTitle( chart ) ); + areaChart.setAntiAlias( true ); + + return areaChart; + } + private JFreeChart getStackedBarChart( Chart chart, CategoryDataset dataSet, boolean horizontal ) { JFreeChart stackedBarChart = null;