帆软报表设计器源代码。
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.
 
 
 
 

177 lines
8.1 KiB

package com.fr.design.chart;
import com.fr.chart.chartattr.Area3DPlot;
import com.fr.chart.chartattr.AreaPlot;
import com.fr.chart.chartattr.Bar2DPlot;
import com.fr.chart.chartattr.Bar3DPlot;
import com.fr.chart.chartattr.BubblePlot;
import com.fr.chart.chartattr.CustomPlot;
import com.fr.chart.chartattr.FunnelPlot;
import com.fr.chart.chartattr.GanttPlot;
import com.fr.chart.chartattr.LinePlot;
import com.fr.chart.chartattr.MapPlot;
import com.fr.chart.chartattr.MeterBluePlot;
import com.fr.chart.chartattr.MeterPlot;
import com.fr.chart.chartattr.Pie3DPlot;
import com.fr.chart.chartattr.PiePlot;
import com.fr.chart.chartattr.Plot;
import com.fr.chart.chartattr.RadarPlot;
import com.fr.chart.chartattr.RangePlot;
import com.fr.chart.chartattr.StockPlot;
import com.fr.chart.chartattr.XYScatterPlot;
import com.fr.design.chart.axis.BinaryChartStyleAxisPane;
import com.fr.design.chart.axis.ChartStyleAxisPane;
import com.fr.design.chart.axis.CustomChartStyleAxisPane;
import com.fr.design.chart.axis.GanntChartStyleAxisPane;
import com.fr.design.chart.axis.RadarChartStyleAxisPane;
import com.fr.design.chart.axis.TernaryChartStyleAxisPane;
import com.fr.design.chart.axis.ValueChartStyleAxisPane;
import com.fr.design.chart.axis.XYChartStyleAxisPane;
import com.fr.design.chart.series.SeriesCondition.dlp.AreaDataLabelPane;
import com.fr.design.chart.series.SeriesCondition.dlp.Bar2DDataLabelPane;
import com.fr.design.chart.series.SeriesCondition.dlp.BubbleDataLabelPane;
import com.fr.design.chart.series.SeriesCondition.dlp.DataLabelPane;
import com.fr.design.chart.series.SeriesCondition.dlp.FunnelDataLabelPane;
import com.fr.design.chart.series.SeriesCondition.dlp.LineDataLabelPane;
import com.fr.design.chart.series.SeriesCondition.dlp.MapDataLabelPane;
import com.fr.design.chart.series.SeriesCondition.dlp.MeterDataLabelPane;
import com.fr.design.chart.series.SeriesCondition.dlp.PieDataLabelPane;
import com.fr.design.chart.series.SeriesCondition.dlp.RadarDataLabelPane;
import com.fr.design.chart.series.SeriesCondition.dlp.RangeDataLabelPane;
import com.fr.design.chart.series.SeriesCondition.dlp.StockDataLabelPane;
import com.fr.design.chart.series.SeriesCondition.dlp.XYDataLabelPane;
import com.fr.design.mainframe.chart.gui.style.axis.ChartAxisUsePane;
import com.fr.design.mainframe.chart.gui.style.axis.ChartCategoryNoFormulaPane;
import com.fr.design.mainframe.chart.gui.style.axis.ChartCategoryPane;
import com.fr.design.mainframe.chart.gui.style.axis.ChartPercentValueNoFormulaPane;
import com.fr.design.mainframe.chart.gui.style.axis.ChartPercentValuePane;
import com.fr.design.mainframe.chart.gui.style.axis.ChartSecondValueNoFormulaPane;
import com.fr.design.mainframe.chart.gui.style.axis.ChartSecondValuePane;
import com.fr.design.mainframe.chart.gui.style.axis.ChartValueNoFormulaPane;
import com.fr.design.mainframe.chart.gui.style.axis.ChartValuePane;
import com.fr.log.FineLoggerFactory;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;
/**
* Created by IntelliJ IDEA.
* Author : Richer
* Version: 6.5.6
* Date : 11-12-2
* Time : 上午11:27
*/
public class ChartPlotFactory {
private static Map<String, FactoryObject> map = new HashMap<String, FactoryObject>();
private static Map<String, Class> axisPane = new HashMap<String, Class>(){
{
put(ChartValuePane.class.getName(), ChartValueNoFormulaPane.class);
put(ChartSecondValuePane.class.getName(), ChartSecondValueNoFormulaPane.class);
put(ChartPercentValuePane.class.getName(), ChartPercentValueNoFormulaPane.class);
put(ChartCategoryPane.class.getName(), ChartCategoryNoFormulaPane.class);
}
};
static {
map.put(AreaPlot.class.getName(), new FactoryObject()
.setDataLabelPaneClass(AreaDataLabelPane.class));
map.put(Area3DPlot.class.getName(), new FactoryObject()
.setDataLabelPaneClass(AreaDataLabelPane.class));
map.put(Bar2DPlot.class.getName(), new FactoryObject()
.setDataLabelPaneClass(Bar2DDataLabelPane.class));
map.put(Bar3DPlot.class.getName(), new FactoryObject()
.setDataLabelPaneClass(Bar2DDataLabelPane.class));
map.put(BubblePlot.class.getName(), new FactoryObject()
.setAxisPaneCls(XYChartStyleAxisPane.class)
.setDataLabelPaneClass(BubbleDataLabelPane.class));
map.put(CustomPlot.class.getName(), new FactoryObject()
.setAxisPaneCls(CustomChartStyleAxisPane.class)
.setDataLabelPaneClass(Bar2DDataLabelPane.class));
map.put(GanttPlot.class.getName(), new FactoryObject()
.setAxisPaneCls(GanntChartStyleAxisPane.class));
map.put(LinePlot.class.getName(), new FactoryObject()
.setDataLabelPaneClass(LineDataLabelPane.class));
map.put(MapPlot.class.getName(), new FactoryObject()
.setDataLabelPaneClass(MapDataLabelPane.class));
map.put(MeterBluePlot.class.getName(), new FactoryObject()
.setDataLabelPaneClass(MeterDataLabelPane.class));
map.put(MeterPlot.class.getName(), new FactoryObject()
.setDataLabelPaneClass(MeterDataLabelPane.class));
map.put(PiePlot.class.getName(), new FactoryObject()
.setDataLabelPaneClass(PieDataLabelPane.class));
map.put(Pie3DPlot.class.getName(), new FactoryObject()
.setDataLabelPaneClass(PieDataLabelPane.class));
map.put(RadarPlot.class.getName(), new FactoryObject()
.setAxisPaneCls(RadarChartStyleAxisPane.class)
.setDataLabelPaneClass(RadarDataLabelPane.class));
map.put(StockPlot.class.getName(), new FactoryObject()
.setAxisPaneCls(TernaryChartStyleAxisPane.class)
.setDataLabelPaneClass(StockDataLabelPane.class));
map.put(RangePlot.class.getName(), new FactoryObject()
.setDataLabelPaneClass(RangeDataLabelPane.class)
.setAxisPaneCls(ValueChartStyleAxisPane.class));
map.put(XYScatterPlot.class.getName(), new FactoryObject()
.setAxisPaneCls(XYChartStyleAxisPane.class)
.setDataLabelPaneClass(XYDataLabelPane.class));
map.put(FunnelPlot.class.getName(), new FactoryObject()
.setDataLabelPaneClass(FunnelDataLabelPane.class));
}
private ChartPlotFactory() {
}
/**
* 创建对应的坐标轴界面
* @param plot plot类型
* @return 返回坐标轴界面
*/
public static ChartStyleAxisPane createChartStyleAxisPaneByPlot(Plot plot) {
FactoryObject factoryObject = map.get(plot.getClass().getName());
if (factoryObject != null && factoryObject.getAxisPaneClass() != null) {
try {
Constructor<? extends ChartStyleAxisPane> c = factoryObject.getAxisPaneClass().getConstructor(Plot.class);
return c.newInstance(plot);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
return new BinaryChartStyleAxisPane(plot);
}
/**
* 创建对应的标签Plot
* @param plotClass plot的类
* @return 对应的标签界面
*/
public static DataLabelPane createDataLabelPane4Plot(Class plotClass) {
FactoryObject factoryObject = map.get(plotClass.getName());
if (factoryObject != null && factoryObject.getDataLabelPaneClass() != null) {
try {
Constructor c = factoryObject.getDataLabelPaneClass().getConstructor();
return (DataLabelPane) c.newInstance();
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
return new DataLabelPane();
}
public static ChartAxisUsePane getNoFormulaPane(ChartAxisUsePane pane){
Class aClass = axisPane.get(pane.getClass().getName());
if(aClass != null){
try {
Constructor c = aClass.getConstructor();
return (ChartAxisUsePane) c.newInstance();
}catch (Exception e){
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
return pane;
}
}