1 23 package org.hammurapi.inspectors.metrics.reporting; 24 25 import java.awt.Color ; 26 import java.awt.GradientPaint ; 27 28 import org.hammurapi.inspectors.metrics.statistics.DescriptiveStatistic; 29 import org.hammurapi.inspectors.metrics.statistics.IntVector; 30 import org.jfree.chart.ChartFactory; 31 import org.jfree.chart.ChartPanel; 32 import org.jfree.chart.JFreeChart; 33 import org.jfree.chart.axis.NumberAxis; 34 import org.jfree.chart.axis.ValueAxis; 35 import org.jfree.chart.plot.PlotOrientation; 36 import org.jfree.chart.plot.XYPlot; 37 import org.jfree.chart.renderer.xy.XYItemRenderer; 38 import org.jfree.data.DomainOrder; 39 import org.jfree.data.general.AbstractDataset; 40 import org.jfree.data.general.DatasetChangeListener; 41 import org.jfree.data.xy.IntervalXYDataset; 42 import org.jfree.ui.ApplicationFrame; 43 import org.jfree.ui.RefineryUtilities; 44 45 46 public class LocCharts extends ApplicationFrame { 48 49 private IntVector locList = new IntVector(); 50 IntVector distinctValues = new IntVector(); 51 IntVector frequencies = new IntVector(); 52 String chartName = "NA"; 53 private int defectCriteria = 120; 54 private int graphicDimX = 500; 55 private int graphicDimY = 300; 56 private Integer chartDebugWindow; 57 58 public LocCharts( String _chartName, int _defectCriteria, IntVector _locList, Integer _chartDebugWindow) { 59 super(_chartName); 61 chartName = _chartName; 62 63 defectCriteria = _defectCriteria; 64 locList = _locList; 65 chartDebugWindow = _chartDebugWindow; 66 } 67 68 public JFreeChart generateChart() { 69 JFreeChart chart; 70 71 new DescriptiveStatistic().frequencies(locList, distinctValues, frequencies); 72 chart = this.copyDeepXYSeries(distinctValues, frequencies); 74 customizeChartBars(chart); 77 this.pack(); 78 79 if ( chartDebugWindow.intValue() > 0){ 80 RefineryUtilities.centerFrameOnScreen(this); 81 this.setVisible(true); 82 } 83 return chart; 84 } 85 private void customizeChartBars(JFreeChart chart) { 86 chart.setBackgroundPaint(new Color (0xBBBBDD)); 89 XYPlot plot = chart.getXYPlot(); 91 NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); 93 rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); 94 XYItemRenderer renderer = (XYItemRenderer) plot.getRenderer(); 96 GradientPaint gp1 = new GradientPaint (0.0f, 0.0f, Color.green, 0.0f, 0.0f, Color.lightGray); 98 GradientPaint gp2 = new GradientPaint (0.0f, 0.0f, Color.red, 0.0f, 0.0f, Color.lightGray); 99 renderer.setSeriesPaint(0, gp1); 100 renderer.setSeriesPaint(1, gp2); 101 ValueAxis domainAxis = plot.getDomainAxis(); 102 } 106 107 108 109 private JFreeChart copyDeepXYSeries(IntVector distinctValues, IntVector frequencies) { 110 IntervalXYDataset dataset = new LocIntervalXYDataset(); 111 JFreeChart chart = ChartFactory.createXYBarChart(chartName, "NCSS", "Occurance", dataset, PlotOrientation.VERTICAL, true, true, false); 119 XYPlot plot = chart.getXYPlot(); 121 plot.setDomainAxis(new NumberAxis("Not Commented Source Statements")); 122 ChartPanel chartPanel = new ChartPanel(chart); 124 chartPanel.setPreferredSize(new java.awt.Dimension (graphicDimX, graphicDimY)); 125 setContentPane(chartPanel); 126 return chart; 127 } 128 129 130 class LocIntervalXYDataset extends AbstractDataset implements IntervalXYDataset { 131 private int barWidth = -1; 132 135 public LocIntervalXYDataset() { 136 super(); 137 } 138 143 public int getSeriesCount() { 144 return 2; 145 } 146 154 public String getSeriesName(int series) { 155 if (series == 0) { 156 return "Good"; 157 } else if (series == 1) { 158 return "Defect"; 159 } 160 return "N/A"; 161 } 162 170 public int getItemCount(int series) { 171 return distinctValues.size(); 172 } 173 186 public double getXValue(int series, int item) { 187 if (series == 0 && distinctValues.elementAt(item) < defectCriteria) { 188 return distinctValues.elementAt(item); 190 } else if (series == 1 && distinctValues.elementAt(item) > defectCriteria) { 191 return distinctValues.elementAt(item); 193 } 194 return 0; 195 } 196 206 public double getYValue(int series, int item) { 207 if (series == 0 && distinctValues.elementAt(item) < defectCriteria) { 209 return frequencies.elementAt(item); 211 } else if (series == 1 && distinctValues.elementAt(item) >= defectCriteria) { 212 return frequencies.elementAt(item); 214 } 215 return 0; 216 } 217 227 public double getStartXValue(int series, int item) { 228 if (series == 0 && distinctValues.elementAt(item) < defectCriteria) { 230 return distinctValues.elementAt(item); 232 } else if (series == 1 && distinctValues.elementAt(item) > defectCriteria) { 233 return distinctValues.elementAt(item); 235 } 236 return 0; 237 } 238 248 public double getEndXValue(int series, int item) { 249 barWidth = computeBarWidth(); 250 251 if (series == 0 && distinctValues.elementAt(item) < defectCriteria) { 253 return distinctValues.elementAt(item) + barWidth; 255 } else if (series == 1 && distinctValues.elementAt(item) > defectCriteria) { 256 return distinctValues.elementAt(item) + barWidth; 258 } 259 return 0; 260 } 261 266 public int computeBarWidth() { 267 282 283 return 1; 284 } 285 295 public double getStartYValue(int series, int item) { 296 if (series == 0 && distinctValues.elementAt(item) < defectCriteria) { 298 return frequencies.elementAt(item); 300 } else if (series == 1 && distinctValues.elementAt(item) > defectCriteria) { 301 return frequencies.elementAt(item); 303 } 304 return 0; 305 } 306 316 public double getEndYValue(int series, int item) { 317 if (series == 0 && distinctValues.elementAt(item) < defectCriteria) { 319 return frequencies.elementAt(item); 321 } else if (series == 1 && distinctValues.elementAt(item) > defectCriteria) { 322 return frequencies.elementAt(item); 324 } 325 return 0; 326 } 327 333 public void addChangeListener(DatasetChangeListener listener) { 334 } 335 341 public void removeChangeListener(DatasetChangeListener listener) { 342 343 } 344 345 public Number getStartX(int series, int item) { 346 return new Double (getStartXValue(series, item)); 347 } 348 349 public Number getEndX(int series, int item) { 350 return new Double (getEndXValue(series, item)); 351 } 352 353 public Number getStartY(int series, int item) { 354 return new Double (getStartYValue(series, item)); 355 } 356 357 public Number getEndY(int series, int item) { 358 return new Double (getEndYValue(series, item)); 359 } 360 361 public DomainOrder getDomainOrder() { 362 return DomainOrder.ASCENDING; 363 } 364 365 public Number getX(int series, int item) { 366 return new Double (getXValue(series, item)); 367 } 368 369 public Number getY(int series, int item) { 370 return new Double (getYValue(series, item)); 371 } 372 373 } 374 377 public int getGraphicDimX() { 378 return graphicDimX; 379 } 380 383 public void setGraphicDimX(int graphicDimX) { 384 this.graphicDimX = graphicDimX; 385 } 386 389 public int getGraphicDimY() { 390 return graphicDimY; 391 } 392 395 public void setGraphicDimY(int graphicDimY) { 396 this.graphicDimY = graphicDimY; 397 } 398 401 public String getChartName() { 402 return chartName; 403 } 404 407 public int getDefectCriteria() { 408 return defectCriteria; 409 } 410 413 public IntVector getDistinctValues() { 414 return distinctValues; 415 } 416 419 public IntVector getFrequencies() { 420 return frequencies; 421 } 422 425 public IntVector getLocList() { 426 return locList; 427 } 428 429 } 430 | Popular Tags |