1 package net.sf.statcvs.charts; 2 3 import java.awt.Color; 4 import java.awt.Dimension; 5 import java.text.NumberFormat; 6 import java.util.ArrayList; 7 import java.util.Iterator; 8 import java.util.List; 9 10 import net.sf.statcvs.model.Module; 11 import net.sf.statcvs.output.ReportConfig; 12 import net.sf.statcvs.util.IntegerMap; 13 14 import org.jfree.chart.ChartFactory; 15 import org.jfree.chart.JFreeChart; 16 import org.jfree.chart.plot.PiePlot; 17 import org.jfree.chart.title.TextTitle; 18 import org.jfree.data.general.DefaultPieDataset; 19 20 /** 21 * Class for producing directory pie charts 22 * @author jentzsch 23 * @author Richard Cyganiak (richard@cyganiak.de) 24 * @version $Id: ModuleSizePieChartMaker.java,v 1.2 2009/08/31 19:16:35 benoitx Exp $ 25 */ 26 public class ModuleSizePieChartMaker { 27 private static final int SLICE_MIN_PERCENT = 5; 28 29 private final ReportConfig config; 30 private final String title; 31 private final String subTitle; 32 private final String fileName; 33 private final List files = new ArrayList(); 34 private final String chartName; 35 36 /** 37 * Creates a new PieChartMaker 38 * @param config The report configuration to use 39 * @param directories The set of directories to consider 40 * @param title The chart title 41 * @param fileName The file name for chart 42 */ 43 public ModuleSizePieChartMaker(final String chartName, final ReportConfig config, final String title, final String subTitle, final String fileName) { 44 this.chartName = chartName; 45 this.config = config; 46 this.title = title; 47 this.subTitle = subTitle; 48 this.fileName = fileName; 49 } 50 51 public ChartImage toFile() { 52 final DefaultPieDataset data = new DefaultPieDataset(); 53 54 final IntegerMap dirSizes = new IntegerMap(); 55 Iterator it = config.getRepository().getModules().values().iterator(); 56 int total = 0; 57 while (it.hasNext()) { 58 final Module module = (Module) it.next(); 59 60 dirSizes.addInt(module.getName(), module.getCurrentLinesOfCode()); 61 total += module.getCurrentLinesOfCode(); 62 } 63 it = dirSizes.iteratorSortedByValue(); 64 final NumberFormat nf = NumberFormat.getNumberInstance(); 65 final NumberFormat nf2 = NumberFormat.getPercentInstance(); 66 while (it.hasNext()) { 67 final String modName = (String) it.next(); 68 final Integer loc = dirSizes.getInteger(modName); 69 final double percent = (double) loc.intValue() / (double) total; 70 final String dirName = modName + " = " + nf.format(loc) + " (" + nf2.format(percent) + ")"; 71 data.setValue(dirName, loc); 72 } 73 74 final JFreeChart chart = ChartFactory.createPieChart(this.config.getProjectName() + ": " + title, data, false, false, false); 75 final ArrayList arrayList = new ArrayList(); 76 arrayList.add(new TextTitle(subTitle)); 77 chart.setSubtitles(arrayList); 78 final PiePlot plot = (PiePlot) chart.getPlot(); 79 plot.setShadowPaint(null); 80 plot.setLabelShadowPaint(null); 81 plot.setLabelOutlinePaint(Color.LIGHT_GRAY); 82 plot.setForegroundAlpha(0.8f); 83 plot.setSectionOutlinePaint(Color.BLACK); 84 85 plot.setBackgroundPaint(ChartConfigUtil.getPlotColor(chartName)); 86 chart.setBackgroundPaint(ChartConfigUtil.getBackgroundColor(chartName)); 87 ChartConfigUtil.configureCopyrightNotice(chartName, chart); 88 ChartConfigUtil.configureChartBackgroungImage(chartName, chart); 89 ChartConfigUtil.configurePlotImage(chartName, chart); 90 91 final Dimension dim = ChartConfigUtil.getDimension(chartName, config.getLargeChartSize()); 92 93 return this.config.createChartImage(this.fileName, this.title, chart, dim); 94 } 95 }