/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package hudson.plugins.disk_usage;
import hudson.util.Graph;
import hudson.util.ShiftedCategoryAxis;
import java.awt.BasicStroke;
import java.awt.Color;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.ui.RectangleEdge;
/**
*
* @author jbrazdil
*/
public class DiskUsageGraph extends Graph{
CategoryDataset dataset;
CategoryDataset workspaceDataset;
String unit;
String workspaceUnit;
public DiskUsageGraph(CategoryDataset dataset, String unit, CategoryDataset workspaceDataset, String workspaceUnit){
super(-1,350,150);
this.workspaceDataset = workspaceDataset;
this.dataset = dataset;
this.unit = unit;
this.workspaceUnit = workspaceUnit;
}
@Override
protected JFreeChart createGraph() {
final JFreeChart chart = ChartFactory.createAreaChart(
null, // chart title
null, // unused
Messages.ProjectDiskUsage() + " (" + unit + ")", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips
false // urls
);
final LegendTitle legend = chart.getLegend();
legend.setPosition(RectangleEdge.RIGHT);
chart.setBackgroundPaint(Color.white);
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.WHITE);
plot.setOutlinePaint(null);
plot.setRangeGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.black);
CategoryAxis domainAxis = new ShiftedCategoryAxis(null);
plot.setDomainAxis(domainAxis);
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
domainAxis.setLowerMargin(0.0);
domainAxis.setUpperMargin(0.0);
// voodoo for better spacing between labels with many columns
domainAxis.setCategoryMargin(-((double) dataset.getColumnCount() / 10.0));
ValueAxis axis = new NumberAxis();
plot.setDataset(1, workspaceDataset);
LineAndShapeRenderer renderer = new LineAndShapeRenderer();
renderer.setBaseShapesVisible(false);
renderer.setSeriesStroke(0, new BasicStroke(4f, BasicStroke.JOIN_ROUND, BasicStroke.JOIN_BEVEL));
renderer.setSeriesStroke(1, new BasicStroke(4f, BasicStroke.JOIN_ROUND, BasicStroke.JOIN_BEVEL));
plot.setRenderer(1, renderer);
ValueAxis rangeAxis = new NumberAxis(Messages.ProjectDiskUsage() + " (" + workspaceUnit + ")");
plot.setRangeAxis(1, rangeAxis);
plot.mapDatasetToRangeAxis(1, 1);
setColorForArea(plot.getRenderer(), dataset.getRowCount()>2);
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
renderer.setSeriesPaint(1, new Color(255,204,0));
return chart;
}
public void setColorForArea(CategoryItemRenderer renderer, boolean global){
if(global){
renderer.setSeriesPaint(0, Color.LIGHT_GRAY);
renderer.setSeriesPaint(1, new Color(60,179,113));
renderer.setSeriesPaint(2, new Color(106,90,205));
}
else{
renderer.setSeriesPaint(0, new Color(60,179,113));
renderer.setSeriesPaint(1, new Color(106,90,205));
}
}
}