forked from fanruan/finekit
15 changed files with 792 additions and 4 deletions
@ -0,0 +1,72 @@ |
|||||||
|
package com.fanruan.api.design.chart; |
||||||
|
|
||||||
|
import com.fr.design.chart.fun.impl.AbstractChartTypeUI; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-19 |
||||||
|
*/ |
||||||
|
public abstract class BaseChartTypeUI extends AbstractChartTypeUI { |
||||||
|
|
||||||
|
/** |
||||||
|
* 定义图表类型选择界面 |
||||||
|
* |
||||||
|
* @return 类型选择界面 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public DefaultTypePane getPlotTypePane() { |
||||||
|
return new DefaultTypePane(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 定义图表数据配置界面 |
||||||
|
* |
||||||
|
* @return 数据配置界面 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public abstract BaseDataPane getChartDataPane(AttributeChangeListener listener); |
||||||
|
|
||||||
|
/** |
||||||
|
* 定义其他界面 |
||||||
|
* |
||||||
|
* @return 其他界面集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public abstract BaseOtherPane[] getAttrPaneArray(AttributeChangeListener listener); |
||||||
|
|
||||||
|
/** |
||||||
|
* 定义图表类型选择界面子类型的名称 |
||||||
|
* |
||||||
|
* @return 图表子类型名称集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public String[] getSubName() { |
||||||
|
return super.getSubName(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 定义图表的icon图片路径 |
||||||
|
* |
||||||
|
* @return icon图片路径 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public abstract String getIconPath(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 定义图表图表类型选择界面的类型名称 |
||||||
|
* |
||||||
|
* @return 图表类型名称 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public abstract String getName(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 定义图表类型选择界面子类型的示例图片路径 |
||||||
|
* |
||||||
|
* @return 图表子类型图片路径集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public abstract String[] getDemoImagePath(); |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
package com.fanruan.api.design.chart; |
||||||
|
|
||||||
|
import com.fr.design.chartx.impl.AbstractDataPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-18 |
||||||
|
*/ |
||||||
|
public abstract class BaseDataPane extends AbstractDataPane { |
||||||
|
|
||||||
|
/** |
||||||
|
* 构造函数 |
||||||
|
*/ |
||||||
|
public BaseDataPane(AttributeChangeListener listener) { |
||||||
|
super(listener); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 创建数据配置面板 |
||||||
|
* |
||||||
|
* @return 数据配置面板 |
||||||
|
*/ |
||||||
|
protected abstract SingleDataPane createSingleDataPane(); |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package com.fanruan.api.design.chart; |
||||||
|
|
||||||
|
import com.fanruan.api.engine.chart.BaseChartWithData; |
||||||
|
import com.fr.design.chartx.impl.AbstractOtherPane; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-17 |
||||||
|
*/ |
||||||
|
public abstract class BaseOtherPane<T extends BaseChartWithData> extends AbstractOtherPane<T> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建内容面板 |
||||||
|
* |
||||||
|
* @return 面板 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected abstract JPanel createContentPane(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 界面标题 |
||||||
|
* |
||||||
|
* @return 标题 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return super.title4PopupWindow(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,129 @@ |
|||||||
|
package com.fanruan.api.design.chart; |
||||||
|
|
||||||
|
import com.fanruan.api.engine.chart.BaseChartWithData; |
||||||
|
import com.fr.chart.charttypes.ChartTypeManager; |
||||||
|
import com.fr.chartx.attr.ChartProvider; |
||||||
|
import com.fr.design.ChartTypeInterfaceManager; |
||||||
|
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane; |
||||||
|
import com.fr.design.mainframe.chart.gui.type.ChartImagePane; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-18 |
||||||
|
*/ |
||||||
|
public class DefaultTypePane<T extends BaseChartWithData> extends AbstractChartTypePane<T> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取图表类型界面图表选择子类型的缩略图路径,默认使用UI界面插入图表时子类型的图片路径 |
||||||
|
* |
||||||
|
* @return 图片路径集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected String[] getTypeIconPath() { |
||||||
|
return ChartTypeInterfaceManager.getInstance().getDemoImagePath(getPlotID()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取图表类型界面图表选择子类型的缩略图提示内容,默认使用UI界面插入图表时的图表子类型名称 |
||||||
|
* |
||||||
|
* @return 提示内容集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected String[] getTypeTipName() { |
||||||
|
return ChartTypeInterfaceManager.getInstance().getSubName(getPlotID()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取图表子类型对象,默认使用AbstractChartType.getChartTypes()返回的第一个对象 |
||||||
|
* |
||||||
|
* @return 图表对象 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public ChartProvider getDefaultChart() { |
||||||
|
return ChartTypeManager.getInstance().getChartTypes(getPlotID())[0]; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取图表类型界面切换图表类型名称。默认使用UI界面插入图表时的图表名称。 |
||||||
|
* |
||||||
|
* @return 图表名称 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return ChartTypeInterfaceManager.getInstance().getName(getPlotID()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据图表对象返回该图表对象的所对应的子类型序号,默认返回0 |
||||||
|
* |
||||||
|
* @return 子类型序号 |
||||||
|
*/ |
||||||
|
protected int getSelectIndexInChart(T chart) { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据图表子类型序号,还原图表对象对应的属性。 |
||||||
|
*/ |
||||||
|
protected void setSelectIndexInChart(T chart, int index) { |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 通过图表对象的属性,还原选择的图表类型 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public void populateBean(T ob) { |
||||||
|
if (getTypeIconPath().length > 0) { |
||||||
|
for (ChartImagePane imagePane : typeDemo) { |
||||||
|
imagePane.isPressing = false; |
||||||
|
} |
||||||
|
typeDemo.get(getSelectIndexInChart(ob)).isPressing = true; |
||||||
|
checkDemosBackground(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据所选择的图表类型,还原图表类型的属性。 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public void updateBean(T ob) { |
||||||
|
if (getTypeIconPath().length > 0) { |
||||||
|
for (int index = 0, len = typeDemo.size(); index < len; index++) { |
||||||
|
if (typeDemo.get(index).isPressing) { |
||||||
|
setSelectIndexInChart(ob, index); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 构建类型选择面板的组件。 |
||||||
|
* |
||||||
|
* @return 面板组件集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected Component[][] getPaneComponents(JPanel typePane) { |
||||||
|
return super.getPaneComponents(typePane); |
||||||
|
} |
||||||
|
|
||||||
|
//TODO 已经在父类中加了默认实现,jar包更新后直接删除
|
||||||
|
@Override |
||||||
|
protected String[] getTypeLayoutPath() { |
||||||
|
return new String[0]; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String[] getTypeLayoutTipName() { |
||||||
|
return new String[0]; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String getPlotTypeID() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package com.fanruan.api.design.chart; |
||||||
|
|
||||||
|
import com.fanruan.api.design.chart.field.BaseCellDataFieldsPane; |
||||||
|
import com.fanruan.api.design.chart.field.BaseDataSetFieldsPane; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-18 |
||||||
|
*/ |
||||||
|
public class SingleDataPane extends com.fr.design.chartx.single.SingleDataPane { |
||||||
|
|
||||||
|
/** |
||||||
|
* 构造函数,组合数据集数据源配置面板和单元格数据源配置面板 |
||||||
|
*/ |
||||||
|
public SingleDataPane(BaseDataSetFieldsPane dataSetFieldsPane, BaseCellDataFieldsPane cellDataFieldsPane) { |
||||||
|
super(dataSetFieldsPane, cellDataFieldsPane); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,95 @@ |
|||||||
|
package com.fanruan.api.design.chart.field; |
||||||
|
|
||||||
|
import com.fanruan.api.design.ui.component.formula.UIFormulaTextField; |
||||||
|
import com.fanruan.api.engine.chart.field.BaseColumnFieldCollection; |
||||||
|
import com.fr.chartx.data.field.ColumnField; |
||||||
|
import com.fr.design.chartx.fields.AbstractCellDataFieldsPane; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-17 |
||||||
|
*/ |
||||||
|
public abstract class BaseCellDataFieldsPane<T extends BaseColumnFieldCollection> extends AbstractCellDataFieldsPane<T> { |
||||||
|
|
||||||
|
/** |
||||||
|
* 初始化面板布局,默认会加载北部、中部和南部的面板 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected void initComponents() { |
||||||
|
super.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建中部位置的面板,默认会通过所有的组件和组件名称生成面板。 |
||||||
|
* |
||||||
|
* @return 面板 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected JPanel createCenterPane() { |
||||||
|
return super.createCenterPane(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建北部位置的面板,默认生成空面板 |
||||||
|
* |
||||||
|
* @return 面板 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected JPanel createNorthPane() { |
||||||
|
return super.createNorthPane(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建南部位置的面板,默认生成空面板 |
||||||
|
* |
||||||
|
* @return 面板 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected JPanel createSouthPane() { |
||||||
|
return super.createSouthPane(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 面板中所有组件,默认会去获取所有公式组件 |
||||||
|
* |
||||||
|
* @return 所有组件的集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected Component[] fieldComponents() { |
||||||
|
return super.fieldComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 面板中所有组件的名称 |
||||||
|
* |
||||||
|
* @return 所有组件的名称集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected abstract String[] fieldLabels(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 面板中的公式组件 |
||||||
|
* |
||||||
|
* @return 公式组件的集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected abstract UIFormulaTextField[] formulaPanes(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据字段对象的属性,更新公式组件的值 |
||||||
|
*/ |
||||||
|
protected void populateField(UIFormulaTextField formulaPane, ColumnField field) { |
||||||
|
AbstractCellDataFieldsPane.populateField(formulaPane, field); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据公式组件的值,更新字段对象的属性 |
||||||
|
*/ |
||||||
|
protected void updateField(UIFormulaTextField formulaPane, ColumnField field) { |
||||||
|
AbstractCellDataFieldsPane.updateField(formulaPane, field); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,118 @@ |
|||||||
|
package com.fanruan.api.design.chart.field; |
||||||
|
|
||||||
|
import com.fanruan.api.design.ui.component.UIComboBox; |
||||||
|
import com.fanruan.api.design.ui.component.chart.CalculateComboBox; |
||||||
|
import com.fanruan.api.engine.chart.field.BaseColumnFieldCollection; |
||||||
|
import com.fr.chartx.data.field.ColumnField; |
||||||
|
import com.fr.design.chartx.fields.AbstractDataSetFieldsPane; |
||||||
|
import com.fr.general.GeneralUtils; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-17 |
||||||
|
*/ |
||||||
|
public abstract class BaseDataSetFieldsPane<T extends BaseColumnFieldCollection> extends AbstractDataSetFieldsPane<T> { |
||||||
|
/** |
||||||
|
* 初始化面板布局,默认会加载北部、中部和南部的面板 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected void initComponents() { |
||||||
|
super.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建中部位置的面板,默认会通过所有的组件和组件名称生成面板。 |
||||||
|
* |
||||||
|
* @return 面板 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected JPanel createCenterPane() { |
||||||
|
return super.createCenterPane(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建北部位置的面板,默认生成空面板 |
||||||
|
* |
||||||
|
* @return 面板 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected JPanel createNorthPane() { |
||||||
|
return super.createNorthPane(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建南部位置的面板,默认生成空面板 |
||||||
|
* |
||||||
|
* @return 面板 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected JPanel createSouthPane() { |
||||||
|
return super.createSouthPane(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 面板中所有组件,默认会去获取所有下拉框组件 |
||||||
|
* |
||||||
|
* @return 所有组件的集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected Component[] fieldComponents() { |
||||||
|
return super.fieldComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 面板中所有组件的名称 |
||||||
|
* |
||||||
|
* @return 所有组件的名称集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected abstract String[] fieldLabels(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 面板中的下拉框组件 |
||||||
|
* |
||||||
|
* @return 下拉框组件的集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
protected abstract UIComboBox[] filedComboBoxes(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据字段对象的属性,更新下拉选择组件的值 |
||||||
|
*/ |
||||||
|
protected void populateField(UIComboBox comboBox, ColumnField field) { |
||||||
|
AbstractDataSetFieldsPane.populateField(comboBox, field); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据下拉选择组件的值,更新字段对象的属性 |
||||||
|
*/ |
||||||
|
protected void updateField(UIComboBox comboBox, ColumnField field) { |
||||||
|
AbstractDataSetFieldsPane.updateField(comboBox, field); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据字段对象的属性,更新下拉选择组件和汇总方式选择组件的值 |
||||||
|
*/ |
||||||
|
protected void populateFunctionField(UIComboBox comboBox, CalculateComboBox calculateComboBox, ColumnField field) { |
||||||
|
comboBox.setSelectedItem(field.getFieldName()); |
||||||
|
if (calculateComboBox != null) { |
||||||
|
calculateComboBox.populateBean(field.getDataFunction()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据下拉选择组件和汇总方式选择组件的值,更新字段对象的属性 |
||||||
|
*/ |
||||||
|
protected void updateFunctionField(UIComboBox comboBox, CalculateComboBox calculateComboBox, ColumnField field) { |
||||||
|
field.setFieldName(GeneralUtils.objectToString(comboBox.getSelectedItem())); |
||||||
|
if (calculateComboBox != null) { |
||||||
|
field.setDataFunction(calculateComboBox.updateBean()); |
||||||
|
} else { |
||||||
|
field.setDataFunction(null); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
package com.fanruan.api.design.ui.component; |
||||||
|
|
||||||
|
import javax.swing.Icon; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-19 |
||||||
|
*/ |
||||||
|
public class UIButtonGroup<T> extends com.fr.design.gui.ibutton.UIButtonGroup<T> { |
||||||
|
|
||||||
|
public UIButtonGroup(String[] textArray) { |
||||||
|
super(textArray); |
||||||
|
} |
||||||
|
|
||||||
|
public UIButtonGroup(Icon[] iconArray) { |
||||||
|
super(iconArray); |
||||||
|
} |
||||||
|
|
||||||
|
public UIButtonGroup(Icon[][] iconArray) { |
||||||
|
super(iconArray); |
||||||
|
} |
||||||
|
|
||||||
|
public UIButtonGroup(Icon[] iconArray, T[] objects) { |
||||||
|
super(iconArray, objects); |
||||||
|
} |
||||||
|
|
||||||
|
public UIButtonGroup(Icon[][] iconArray, T[] objects) { |
||||||
|
super(iconArray, objects); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,59 @@ |
|||||||
|
package com.fanruan.api.design.ui.component.chart; |
||||||
|
|
||||||
|
import com.fanruan.api.design.ui.component.UIComboBox; |
||||||
|
import com.fr.data.util.function.DataFunction; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-23 |
||||||
|
*/ |
||||||
|
public class CalculateComboBox extends UIComboBox { |
||||||
|
|
||||||
|
private static String[] functionName = initItem(); |
||||||
|
|
||||||
|
private static String[] initItem() { |
||||||
|
String[] functionLocaleNames = DataFunctionType.getFunctionLocaleNames(); |
||||||
|
for (int i = 0; i < functionLocaleNames.length; i++) { |
||||||
|
functionLocaleNames[i] = Toolkit.i18nText(functionLocaleNames[i]); |
||||||
|
} |
||||||
|
return functionLocaleNames; |
||||||
|
} |
||||||
|
|
||||||
|
public CalculateComboBox() { |
||||||
|
super(functionName); |
||||||
|
setSelectedIndex(0); |
||||||
|
} |
||||||
|
|
||||||
|
public void reset() { |
||||||
|
this.setSelectedItem(0); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 通过公式对象,更新界面的公式选择 |
||||||
|
*/ |
||||||
|
public void populateBean(DataFunction function) { |
||||||
|
int index = DataFunctionType.getIndexByFunction(function); |
||||||
|
if (index > 0) { |
||||||
|
this.setSelectedIndex(index); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 根据界面选择的公式,返回公式对象 |
||||||
|
*/ |
||||||
|
public DataFunction updateBean() { |
||||||
|
try { |
||||||
|
int selectIndex = getSelectedIndex(); |
||||||
|
DataFunction functionByIndex = DataFunctionType.getFunctionByIndex(selectIndex); |
||||||
|
return functionByIndex; |
||||||
|
} catch (InstantiationException e) { |
||||||
|
FineLoggerFactory.getLogger().error("Function Error"); |
||||||
|
} catch (IllegalAccessException e) { |
||||||
|
FineLoggerFactory.getLogger().error("Function Error"); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,65 @@ |
|||||||
|
package com.fanruan.api.design.ui.component.chart; |
||||||
|
|
||||||
|
import com.fr.data.util.function.AverageFunction; |
||||||
|
import com.fr.data.util.function.CountFunction; |
||||||
|
import com.fr.data.util.function.DataFunction; |
||||||
|
import com.fr.data.util.function.MaxFunction; |
||||||
|
import com.fr.data.util.function.MinFunction; |
||||||
|
import com.fr.data.util.function.NoneFunction; |
||||||
|
import com.fr.data.util.function.SumFunction; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-24 |
||||||
|
*/ |
||||||
|
public enum DataFunctionType { |
||||||
|
|
||||||
|
NONE_FUNCTION("Fine-Design_Chart_Data_Function_None", NoneFunction.class), |
||||||
|
SUM_FUNCTION("Fine-Design_Chart_Data_Function_Sum", SumFunction.class), |
||||||
|
AVERAGE_FUNCTION("Fine-Design_Chart_Data_Function_Average", AverageFunction.class), |
||||||
|
MAX_FUNCTION("Fine-Design_Chart_Data_Function_Max", MaxFunction.class), |
||||||
|
MIN_FUNCTION("Fine-Design_Chart_Data_Function_Min", MinFunction.class), |
||||||
|
COUNT_FUNCTION("Fine-Design_Chart_Data_Function_Count", CountFunction.class); |
||||||
|
|
||||||
|
String functionLocaleName; |
||||||
|
|
||||||
|
Class functionClass; |
||||||
|
|
||||||
|
public static final int NONE_FUNCTION_INDEX = 0; |
||||||
|
|
||||||
|
DataFunctionType(String functionLocaleName, Class functionClass) { |
||||||
|
this.functionLocaleName = functionLocaleName; |
||||||
|
this.functionClass = functionClass; |
||||||
|
} |
||||||
|
|
||||||
|
public static int getIndexByFunction(DataFunction function) { |
||||||
|
if (function == null) { |
||||||
|
return NONE_FUNCTION_INDEX; |
||||||
|
} |
||||||
|
for (DataFunctionType dataFunctionType : DataFunctionType.values()) { |
||||||
|
if (ComparatorUtils.equals(dataFunctionType.functionClass, function.getClass())) { |
||||||
|
return dataFunctionType.ordinal(); |
||||||
|
} |
||||||
|
} |
||||||
|
return NONE_FUNCTION_INDEX; |
||||||
|
} |
||||||
|
|
||||||
|
public static DataFunction getFunctionByIndex(int index) throws IllegalAccessException, InstantiationException { |
||||||
|
DataFunctionType[] values = DataFunctionType.values(); |
||||||
|
if (index < values.length) { |
||||||
|
return (DataFunction) values[index].functionClass.newInstance(); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public static String[] getFunctionLocaleNames() { |
||||||
|
DataFunctionType[] values = DataFunctionType.values(); |
||||||
|
String[] functionLocaleNames = new String[values.length]; |
||||||
|
for (int i = 0; i < values.length; i++) { |
||||||
|
functionLocaleNames[i] = values[i].functionLocaleName; |
||||||
|
} |
||||||
|
return functionLocaleNames; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,43 @@ |
|||||||
|
package com.fanruan.api.engine.chart; |
||||||
|
|
||||||
|
import com.fr.chart.impl.AbstractChartType; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-17 |
||||||
|
*/ |
||||||
|
public abstract class BaseChartType extends AbstractChartType { |
||||||
|
|
||||||
|
/** |
||||||
|
* 该种图表所有的图表对象实例,比如柱形图就有堆积柱形图,百分比堆积柱形图等等 |
||||||
|
* |
||||||
|
* @return 图表所有的对象实例 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public abstract BaseChartWithData[] getChartTypes(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 图表在web端展现时需要的JS文件路径 |
||||||
|
* |
||||||
|
* @return JS文件路径数组 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public abstract String[] getRequiredJS(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 图表在web端展现时需要的CSS文件路径 |
||||||
|
* |
||||||
|
* @return CSS文件路径数组 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public abstract String[] getRequiredCss(); |
||||||
|
|
||||||
|
/** |
||||||
|
* JS对象名,该对象一般是一个函数,执行后会在给定的dom中绘制图表 |
||||||
|
* |
||||||
|
* @return JS对象名 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public abstract String getWrapperName(); |
||||||
|
} |
@ -0,0 +1,71 @@ |
|||||||
|
package com.fanruan.api.engine.chart; |
||||||
|
|
||||||
|
import com.fanruan.api.engine.chart.field.BaseColumnFieldCollection; |
||||||
|
import com.fr.base.chart.cross.FormulaProcessor; |
||||||
|
import com.fr.chart.ChartWebPara; |
||||||
|
import com.fr.chart.impl.AbstractChartWithData; |
||||||
|
import com.fr.js.NameJavaScriptGroup; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
|
||||||
|
import java.awt.Image; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-17 |
||||||
|
*/ |
||||||
|
public abstract class BaseChartWithData extends AbstractChartWithData { |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取所有的超链 |
||||||
|
* |
||||||
|
* @return 超链集合 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public NameJavaScriptGroup getHotHyperlink(String linkKey) { |
||||||
|
return super.getHotHyperlink(linkKey); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 处理公式,调用formulaProcessor.dealWith方法,覆写该方法需要调用父类的方法。 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public void dealFormula(FormulaProcessor formulaProcessor) { |
||||||
|
super.dealFormula(formulaProcessor); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 生成设计器中显示的图片,默认返回一个饼图的图片 |
||||||
|
* |
||||||
|
* @return 图片 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public Image toImage(int width, int height, int resolution, ChartWebPara chartWebPara) { |
||||||
|
return super.toImage(width, height, resolution, chartWebPara); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 生成图表预览的options |
||||||
|
* |
||||||
|
* @return JSON对象 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public abstract JSONObject createAttributeConfig(ChartWebPara chartWebPara); |
||||||
|
|
||||||
|
/** |
||||||
|
* 定义图表的ID,与plugin.xml中的chartID对应 |
||||||
|
* |
||||||
|
* @return ID |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public abstract String getID(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取字段集合对象 |
||||||
|
* |
||||||
|
* @return 字段集合对象 |
||||||
|
*/ |
||||||
|
public <T extends BaseColumnFieldCollection> T getColumnFieldCollection(Class<T> var1) { |
||||||
|
return super.getFieldCollection(var1); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package com.fanruan.api.engine.chart.field; |
||||||
|
|
||||||
|
import com.fr.chartx.data.field.AbstractColumnFieldCollection; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-17 |
||||||
|
*/ |
||||||
|
public class BaseColumnFieldCollection extends AbstractColumnFieldCollection { |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue