帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

134 lines
5.7 KiB

package com.fr.van.chart.custom;
import com.fr.chart.chartattr.Plot;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.mainframe.chart.gui.ChartDataPane;
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane;
import com.fr.design.mainframe.chart.gui.data.table.CategoryPlotTableDataContentPane;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.chart.PiePlot4VanChart;
import com.fr.plugin.chart.attr.plot.VanChartAxisPlot;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
import com.fr.plugin.chart.bubble.VanChartBubblePlot;
import com.fr.plugin.chart.custom.CustomPlotFactory;
import com.fr.plugin.chart.custom.type.CustomPlotType;
import com.fr.plugin.chart.gauge.VanChartGaugePlot;
import com.fr.plugin.chart.radar.VanChartRadarPlot;
import com.fr.plugin.chart.scatter.VanChartScatterPlot;
import com.fr.van.chart.bubble.data.VanChartBubblePlotTableDataContentPane;
import com.fr.van.chart.custom.component.CustomPlotLocationPane;
import com.fr.van.chart.designer.style.VanChartStylePane;
import com.fr.van.chart.designer.style.axis.VanChartAxisPane;
import com.fr.van.chart.designer.style.axis.gauge.VanChartGaugeAxisPane;
import com.fr.van.chart.scatter.data.VanChartScatterPlotTableDataContentPane;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Mitisky on 16/6/23.
*/
public class CustomPlotDesignerPaneFactory {
//图表类型对应数据配置界面
private static Map<Class<? extends Plot>, Class<? extends AbstractTableDataContentPane>> plotTableDataContentPaneMap = new HashMap<Class<? extends Plot>, Class<? extends AbstractTableDataContentPane>>();
//图表类型对应的位置面板
private static Map<Class<? extends Plot>, Class<? extends BasicBeanPane<Plot>>> plotPositionMap = new HashMap<Class<? extends Plot>, Class<? extends BasicBeanPane<Plot>>>();
static {
plotPositionMap.put(PiePlot4VanChart.class, CustomPlotLocationPane.class);
plotPositionMap.put(VanChartRadarPlot.class, CustomPlotLocationPane.class);
plotPositionMap.put(VanChartGaugePlot.class, CustomPlotLocationPane.class);
}
/**
* 根据图表类型创建位置面板
* @param plot 图表
* @return 位置面板
*/
public static BasicBeanPane<Plot> createCustomPlotPositionPane(Plot plot) {
Class<? extends Plot> key = plot.getClass();
if(plotPositionMap.containsKey(key)){
try{
Class<? extends BasicBeanPane<Plot>> cl = plotPositionMap.get(key);
Constructor<? extends BasicBeanPane<Plot> > constructor = cl.getConstructor();
return constructor.newInstance();
} catch (Exception e){
FineLoggerFactory.getLogger().error(e.getMessage());
}
}
return null;
}
/**
* 每种类型对应的数据配置界面
* @return
*/
static {
plotTableDataContentPaneMap.put(VanChartScatterPlot.class, VanChartScatterPlotTableDataContentPane.class);
plotTableDataContentPaneMap.put(VanChartBubblePlot.class, VanChartBubblePlotTableDataContentPane.class);
}
/**
* 根据图表类型创建数据配置
* @param plot 图表
* @param parent
* @return 数据配置界面
*/
public static AbstractTableDataContentPane createCustomPlotTableDataContentPane(Plot plot, ChartDataPane parent) {
Class<? extends Plot> key = plot.getClass();
if(plotTableDataContentPaneMap.containsKey(key)){
try{
Class<? extends AbstractTableDataContentPane> cl = plotTableDataContentPaneMap.get(key);
Constructor<? extends AbstractTableDataContentPane > constructor = cl.getConstructor(ChartDataPane.class);
return constructor.newInstance(parent);
} catch (Exception e){
FineLoggerFactory.getLogger().error(e.getMessage());
}
}
return new CategoryPlotTableDataContentPane(parent);
}
/**
* plotType是否需要建立新的坐标系面板
*/
private static Map<CustomPlotType, Class<? extends VanChartAxisPane>> diffAxisMap = new HashMap<CustomPlotType, Class<? extends VanChartAxisPane>>();
static {
diffAxisMap.put(CustomPlotType.POINTER_360, VanChartGaugeAxisPane.class);
diffAxisMap.put(CustomPlotType.POINTER_180, VanChartGaugeAxisPane.class);
diffAxisMap.put(CustomPlotType.RING, VanChartGaugeAxisPane.class);
diffAxisMap.put(CustomPlotType.SLOT, VanChartGaugeAxisPane.class);
diffAxisMap.put(CustomPlotType.CUVETTE, VanChartGaugeAxisPane.class);
diffAxisMap.put(CustomPlotType.RADAR, null);//默认的为null,直接new,不用反射
diffAxisMap.put(CustomPlotType.STACK_RADAR, null);
}
public static Boolean isUseDiffAxisPane(VanChartPlot plot){
CustomPlotType customPlotType = CustomPlotFactory.getCustomType(plot);
return diffAxisMap.containsKey(customPlotType);
}
public static VanChartAxisPane createAxisPane(VanChartAxisPlot plot, VanChartStylePane parent) {
CustomPlotType key = CustomPlotFactory.getCustomType((VanChartPlot)plot);
if(diffAxisMap.containsKey(key)){
try{
Class<? extends VanChartAxisPane> cl = diffAxisMap.get(key);
if(cl != null) {
Constructor<? extends VanChartAxisPane> constructor = cl.getConstructor(VanChartAxisPlot.class, VanChartStylePane.class);
return constructor.newInstance(plot, parent);
}
} catch (Exception e){
FineLoggerFactory.getLogger().error(e.getMessage());
}
}
return new VanChartAxisPane(plot,parent);
}
}