package edu.sjtu.infosec.ismp.manager.AM.comm; import java.awt.Color; import java.awt.Font; import java.text.SimpleDateFormat; import java.util.Iterator; import java.util.List; import java.util.Map; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.labels.IntervalCategoryToolTipGenerator; import org.jfree.chart.labels.ItemLabelAnchor; import org.jfree.chart.labels.ItemLabelPosition; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.ui.TextAnchor; import edu.sjtu.infosec.ismp.manager.AM.model.DeviceChartVO; public class DeviceCountChart { public static CategoryDataset createDataset(List<DeviceChartVO> datas) throws Exception { SimpleDateFormat format = new SimpleDateFormat("yyyy年"); DefaultCategoryDataset dataset = new DefaultCategoryDataset(); if(datas != null && !datas.isEmpty()) { for(DeviceChartVO vo : datas) { Map map = vo.getDataMap(); Iterator it = map.keySet().iterator(); for(;it.hasNext();) { Integer key = (Integer)it.next(); Integer value = (Integer)map.get(key); if(key.equals(AssetConstant.NETWORK_DEVICE_TYPE)) dataset.addValue(value, "网络设备", format.format(vo.getYear())); if(key.equals(AssetConstant.SECURITY_DEVICE_TYPE)) dataset.addValue(value, "安全设备", format.format(vo.getYear())); if(key.equals(AssetConstant.SERVER_DEVICE_TYPE)) dataset.addValue(value, "服务器", format.format(vo.getYear())); if(key.equals(AssetConstant.TERMINAL_DEVICE_TYPE)) dataset.addValue(value, "终端PC", format.format(vo.getYear())); } } } return dataset; } public static JFreeChart createChart(CategoryDataset dataset) { JFreeChart chart = ChartFactory.createBarChart("资产设备历年统计", // chart title "年数", // domain axis label "设备数量", // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation true, // include legend false, // tooltips? false // URLs? ); Font font = new Font("宋体", Font.PLAIN, 14); chart.setBackgroundPaint(Color.white); chart.getTitle().setFont(font); CategoryPlot plot = (CategoryPlot) chart.getPlot(); CategoryAxis xAxis = plot.getDomainAxis(); xAxis.setLabelFont(font); xAxis.setTickLabelFont(font); ValueAxis yAxis = plot.getRangeAxis(); yAxis.setLabelFont(font); yAxis.setTickLabelFont(font); NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); chart.getLegend().setItemFont(font); BarRenderer renderer = (BarRenderer) plot.getRenderer(); renderer.setDrawBarOutline(false); renderer.setBaseItemLabelsVisible(true); renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setSeriesItemLabelsVisible(0, Boolean.TRUE); renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER)); renderer.setBaseToolTipGenerator(new IntervalCategoryToolTipGenerator("{0}", new SimpleDateFormat("yyyy"))); return chart; } }