Browse Source

Merge branch 'master' of bjorn/finekit into master

master
richie 5 years ago committed by Gogs
parent
commit
a05b5e17dc
  1. 7
      docs/claim.md
  2. 72
      src/main/java/com/fanruan/api/design/chart/BaseChartTypeUI.java
  3. 27
      src/main/java/com/fanruan/api/design/chart/BaseDataPane.java
  4. 32
      src/main/java/com/fanruan/api/design/chart/BaseOtherPane.java
  5. 129
      src/main/java/com/fanruan/api/design/chart/DefaultTypePane.java
  6. 19
      src/main/java/com/fanruan/api/design/chart/SingleDataPane.java
  7. 95
      src/main/java/com/fanruan/api/design/chart/field/BaseCellDataFieldsPane.java
  8. 118
      src/main/java/com/fanruan/api/design/chart/field/BaseDataSetFieldsPane.java
  9. 31
      src/main/java/com/fanruan/api/design/ui/component/UIButtonGroup.java
  10. 59
      src/main/java/com/fanruan/api/design/ui/component/chart/CalculateComboBox.java
  11. 65
      src/main/java/com/fanruan/api/design/ui/component/chart/DataFunctionType.java
  12. 43
      src/main/java/com/fanruan/api/engine/chart/BaseChartType.java
  13. 71
      src/main/java/com/fanruan/api/engine/chart/BaseChartWithData.java
  14. 12
      src/main/java/com/fanruan/api/engine/chart/field/BaseColumnFieldCollection.java
  15. 14
      src/main/java/com/fanruan/api/util/IOKit.java

7
docs/claim.md

@ -42,6 +42,8 @@ com.fr.web.struct.category.ScriptPath
com.fr.web.struct.category.StylePath com.fr.web.struct.category.StylePath
com.fr.js.NameJavaScriptGroup
## 设计器类别 ## 设计器类别
com.fr.design.beans.BasicBeanPane com.fr.design.beans.BasicBeanPane
@ -54,9 +56,11 @@ com.fr.design.dialog.BasicPane
com.fr.design.dialog.DialogActionAdapter com.fr.design.dialog.DialogActionAdapter
## 图表类别
com.fr.chart.ChartWebPara
## 图表类别 com.fr.chartx.data.field.ColumnField
## 报表类别 ## 报表类别
@ -65,3 +69,4 @@ com.fr.report.cell.cellattr.highlight.AbstractHighlight
com.fr.report.cell.cellattr.highlight.AbstractStyleHighlightAction com.fr.report.cell.cellattr.highlight.AbstractStyleHighlightAction
## BI类别 ## BI类别

72
src/main/java/com/fanruan/api/design/chart/BaseChartTypeUI.java

@ -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();
}

27
src/main/java/com/fanruan/api/design/chart/BaseDataPane.java

@ -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();
}

32
src/main/java/com/fanruan/api/design/chart/BaseOtherPane.java

@ -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();
}
}

129
src/main/java/com/fanruan/api/design/chart/DefaultTypePane.java

@ -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;
}
}

19
src/main/java/com/fanruan/api/design/chart/SingleDataPane.java

@ -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);
}
}

95
src/main/java/com/fanruan/api/design/chart/field/BaseCellDataFieldsPane.java

@ -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);
}
}

118
src/main/java/com/fanruan/api/design/chart/field/BaseDataSetFieldsPane.java

@ -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);
}
}
}

31
src/main/java/com/fanruan/api/design/ui/component/UIButtonGroup.java

@ -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);
}
}

59
src/main/java/com/fanruan/api/design/ui/component/chart/CalculateComboBox.java

@ -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;
}
}

65
src/main/java/com/fanruan/api/design/ui/component/chart/DataFunctionType.java

@ -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;
}
}

43
src/main/java/com/fanruan/api/engine/chart/BaseChartType.java

@ -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();
}

71
src/main/java/com/fanruan/api/engine/chart/BaseChartWithData.java

@ -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);
}
}

12
src/main/java/com/fanruan/api/engine/chart/field/BaseColumnFieldCollection.java

@ -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 {
}

14
src/main/java/com/fanruan/api/util/IOKit.java

@ -4,8 +4,7 @@ import com.fr.general.CommonIOUtils;
import com.fr.general.IOUtils; import com.fr.general.IOUtils;
import com.fr.io.utils.ResourceIOUtils; import com.fr.io.utils.ResourceIOUtils;
import javax.swing.*; import javax.swing.Icon;
import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -15,6 +14,7 @@ import java.io.UnsupportedEncodingException;
import java.io.Writer; import java.io.Writer;
import java.nio.channels.Channel; import java.nio.channels.Channel;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.awt.image.BufferedImage;
/** /**
* @author richie * @author richie
@ -173,6 +173,16 @@ public class IOKit {
return IOUtils.readImage(resource); return IOUtils.readImage(resource);
} }
/**
* 直接从磁盘中读取图片,并对图片进行缓存
*
* @param resource 图片的路径
* @return 图片
*/
public static BufferedImage readImageWithCache(String resource) {
return IOUtils.readImageWithCache(resource);
}
/** /**
* 读取图标该方法启用了缓存 * 读取图标该方法启用了缓存
* *

Loading…
Cancel
Save