commit
a195714a2f
27 changed files with 82415 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||||||
|
*.iml |
||||||
|
.idea/ |
||||||
|
lib/report/*.jar |
||||||
|
.DS_Store |
||||||
|
.classpath |
@ -0,0 +1,128 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||||
|
<project basedir="." default="jar" name="plugin"> |
||||||
|
<!-- JDK路径,根据自己机器上实际位置修改--> |
||||||
|
<property name="jdk.home" value="/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home"/> |
||||||
|
|
||||||
|
<property name="libs" value="${basedir}/lib"/> |
||||||
|
<property name="publicLibs" value=""/> |
||||||
|
<property name="reportLibs" value="${basedir}/lib/report"/> |
||||||
|
<property name="destLoc" value="."/> |
||||||
|
<property name="classes" value="classes"/> |
||||||
|
<xmlproperty file="${basedir}/plugin.xml"/> |
||||||
|
<property name="plugin.version" value="1.0.0"/> |
||||||
|
<property name="plugin.name" value="DEMO_CHART"/> |
||||||
|
<property name="current-version" value="${plugin.version}"/> |
||||||
|
|
||||||
|
<!-- 插件版本--> |
||||||
|
<property name="plugin-version" value="${current-version}"/> |
||||||
|
<!-- 插件名字--> |
||||||
|
<property name="plugin-name" value="extendedCharts"/> |
||||||
|
<property name="plugin-jar" value="fr-plugin-${plugin-name}-${plugin-version}.jar"/> |
||||||
|
|
||||||
|
<target name="prepare"> |
||||||
|
<delete dir="${classes}"/> |
||||||
|
<delete dir="fr-plugin-${plugin-name}-${plugin-version}"/> |
||||||
|
<xmlproperty file="${basedir}/plugin.xml"/> |
||||||
|
<delete dir="${destLoc}/${plugin.name}"/> |
||||||
|
</target> |
||||||
|
<path id="compile.classpath"> |
||||||
|
<fileset dir="${libs}"> |
||||||
|
<include name="**/*.jar"/> |
||||||
|
</fileset> |
||||||
|
<fileset dir="${publicLibs}"> |
||||||
|
<include name="**/*.jar"/> |
||||||
|
</fileset> |
||||||
|
<!--<fileset dir="${reportLibs}">--> |
||||||
|
<!--<include name="**/*.jar"/>--> |
||||||
|
<!--</fileset>--> |
||||||
|
</path> |
||||||
|
<patternset id="resources4Jar"> |
||||||
|
<exclude name="**/.settings/**"/> |
||||||
|
<exclude name=".classpath"/> |
||||||
|
<exclude name=".project"/> |
||||||
|
|
||||||
|
<exclude name="**/*.java"/> |
||||||
|
<exclude name="**/*.db"/> |
||||||
|
<exclude name="**/*.g"/> |
||||||
|
<exclude name="**/package.html"/> |
||||||
|
</patternset> |
||||||
|
<target name="copy_resources"> |
||||||
|
<echo message="从${resources_from}拷贝图片,JS,CSS等资源文件"/> |
||||||
|
<delete dir="tmp"/> |
||||||
|
<copy todir="tmp"> |
||||||
|
<fileset dir="${resources_from}/src/main/resources"> |
||||||
|
<patternset refid="resources4Jar"/> |
||||||
|
</fileset> |
||||||
|
</copy> |
||||||
|
<copy todir="${classes}"> |
||||||
|
<fileset dir="tmp"/> |
||||||
|
</copy> |
||||||
|
<delete dir="tmp"/> |
||||||
|
</target> |
||||||
|
<target name="compile_javas"> |
||||||
|
<echo message="编译${compile_files}下的Java文件"/> |
||||||
|
<javac destdir="${classes}" debug="false" includeantruntime="false" optimize="on" source="${source_jdk_version}" |
||||||
|
target="${target_jdk_version}" |
||||||
|
fork="true" memoryMaximumSize="512m" listfiles="false" srcdir="${basedir}" |
||||||
|
executable="${compile_jdk_version}/bin/javac"> |
||||||
|
<src path="${basedir}/src/main/java"/> |
||||||
|
<exclude name="**/.svn/**"/> |
||||||
|
<compilerarg line="-encoding UTF8 "/> |
||||||
|
<classpath refid="compile.classpath"/> |
||||||
|
</javac> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="jar_classes"> |
||||||
|
<echo message="打Jar包:${jar_name}"/> |
||||||
|
<delete file="${basedir}/${jar_name}"/> |
||||||
|
<jar jarfile="${basedir}/${jar_name}"> |
||||||
|
<fileset dir="${classes}"> |
||||||
|
</fileset> |
||||||
|
</jar> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="super_jar" depends="prepare"> |
||||||
|
<antcall target="copy_resources"> |
||||||
|
<param name="resources_from" value="${basedir}"/> |
||||||
|
</antcall> |
||||||
|
<antcall target="compile_javas"> |
||||||
|
<param name="source_jdk_version" value="1.6"/> |
||||||
|
<param name="target_jdk_version" value="1.6"/> |
||||||
|
<param name="compile_jdk_version" value="${jdk.home}"/> |
||||||
|
<param name="compile_files" value="${basedir}/src"/> |
||||||
|
</antcall> |
||||||
|
<echo message="compile plugin success!"/> |
||||||
|
|
||||||
|
<antcall target="jar_classes"> |
||||||
|
<param name="jar_name" value="${plugin-jar}"/> |
||||||
|
</antcall> |
||||||
|
<delete dir="${classes}"/> |
||||||
|
|
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="jar" depends="super_jar"> |
||||||
|
<antcall target="zip"/> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="zip"> |
||||||
|
<property name="plugin-folder" value="fr-plugin-${plugin-name}-${plugin-version}"/> |
||||||
|
<echo message="----------zip files----------"/> |
||||||
|
<mkdir dir="${plugin-folder}"/> |
||||||
|
<copy todir="${plugin-folder}"> |
||||||
|
<fileset dir="."> |
||||||
|
<include name="${plugin-jar}"/> |
||||||
|
<include name="plugin.xml"/> |
||||||
|
</fileset> |
||||||
|
<fileset dir="${libs}"> |
||||||
|
<include name="*.jar"/> |
||||||
|
<include name="*.dll"/> |
||||||
|
</fileset> |
||||||
|
</copy> |
||||||
|
<zip destfile="${basedir}/${plugin-folder}.zip" basedir="."> |
||||||
|
<include name="${plugin-folder}/*.jar"/> |
||||||
|
<include name="${plugin-folder}/*.dll"/> |
||||||
|
<include name="${plugin-folder}/plugin.xml"/> |
||||||
|
</zip> |
||||||
|
<move file="${plugin-folder}.zip" todir="${destLoc}/${plugin.name}"/> |
||||||
|
</target> |
||||||
|
</project> |
Binary file not shown.
@ -0,0 +1,26 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin> |
||||||
|
<id>com.fr.plugin.demoChart</id> |
||||||
|
<name><![CDATA[DEMO图表]]></name> |
||||||
|
<active>yes</active> |
||||||
|
<version>1.0.0</version> |
||||||
|
<env-version>10.0</env-version> |
||||||
|
<jartime>2019-10-09</jartime> |
||||||
|
<vendor>Bjorn</vendor> |
||||||
|
<description><![CDATA[给开发者参考的图表插件demo]]></description> |
||||||
|
<change-notes><![CDATA[]]></change-notes> |
||||||
|
|
||||||
|
<function-recorder class="com.fr.plugin.demo.DemoChart"/> |
||||||
|
|
||||||
|
<extra-chart> |
||||||
|
<ChartTypeProvider class="com.fr.plugin.demo.DemoType" chartID="DEMO_CHART"/> |
||||||
|
</extra-chart> |
||||||
|
|
||||||
|
<extra-core> |
||||||
|
<LocaleFinder class="com.fr.plugin.demo.DemoLocaleFinder"/> |
||||||
|
</extra-core> |
||||||
|
|
||||||
|
<extra-chart-designer> |
||||||
|
<ChartTypeUIProvider class="com.fr.plugin.demo.DemoUI" chartID="DEMO_CHART"/> |
||||||
|
</extra-chart-designer> |
||||||
|
|
||||||
|
</plugin> |
@ -0,0 +1,43 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<!--<parent> |
||||||
|
<groupId>com.fr.plugin</groupId> |
||||||
|
<artifactId>starter</artifactId> |
||||||
|
<version>10.0</version> |
||||||
|
</parent>--> |
||||||
|
<parent> |
||||||
|
<groupId>com.fr.maven</groupId> |
||||||
|
<artifactId>finereport-maven</artifactId> |
||||||
|
<version>10.0</version> |
||||||
|
</parent> |
||||||
|
<artifactId>demo-chart-pie</artifactId> |
||||||
|
<packaging>jar</packaging> |
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fanruan.api</groupId> |
||||||
|
<artifactId>finekit</artifactId> |
||||||
|
<version>1.0</version> |
||||||
|
<scope>system</scope> |
||||||
|
<systemPath>${project.basedir}/lib/finekit-10.0.jar</systemPath> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
<build> |
||||||
|
<!---如果要更改调试插件,改这里的配置就可以了--> |
||||||
|
<outputDirectory> |
||||||
|
${project.basedir}/../finereport-maven/start/webapps/webroot/WEB-INF/plugins/plugin-com.fr.plugin.demoChart-1.0.0/classes |
||||||
|
</outputDirectory> |
||||||
|
<plugins> |
||||||
|
<plugin> |
||||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||||
|
<configuration> |
||||||
|
<source>8</source> |
||||||
|
<target>8</target> |
||||||
|
</configuration> |
||||||
|
</plugin> |
||||||
|
</plugins> |
||||||
|
</build> |
||||||
|
</project> |
@ -0,0 +1,64 @@ |
|||||||
|
package com.fr.plugin.demo; |
||||||
|
|
||||||
|
import com.fanruan.api.design.DesignKit; |
||||||
|
import com.fanruan.api.design.chart.field.BaseCellDataFieldsPane; |
||||||
|
import com.fanruan.api.design.ui.component.formula.UIFormulaTextField; |
||||||
|
|
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-05 |
||||||
|
*/ |
||||||
|
public class DemoCellDataFieldsPane extends BaseCellDataFieldsPane<DemoColumnFieldCollection> { |
||||||
|
|
||||||
|
private UIFormulaTextField categoryPane; |
||||||
|
private UIFormulaTextField valuePane; |
||||||
|
|
||||||
|
public void initComponents(){ |
||||||
|
categoryPane = new UIFormulaTextField(); |
||||||
|
valuePane = new UIFormulaTextField(); |
||||||
|
super.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String[] fieldLabels() { |
||||||
|
return new String[]{ |
||||||
|
DesignKit.i18nText("Fine-Plugin_Demo_Category"), |
||||||
|
DesignKit.i18nText("Fine-Plugin_Demo_Value") |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Component[] fieldComponents() { |
||||||
|
return new Component[]{ |
||||||
|
categoryPane, |
||||||
|
valuePane |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected UIFormulaTextField[] formulaPanes() { |
||||||
|
return new UIFormulaTextField[]{ |
||||||
|
categoryPane, |
||||||
|
valuePane |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(DemoColumnFieldCollection dataConf) { |
||||||
|
populateField(categoryPane, dataConf.getCategory()); |
||||||
|
populateField(valuePane, dataConf.getValue()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public DemoColumnFieldCollection updateBean() { |
||||||
|
DemoColumnFieldCollection dataConfig = new DemoColumnFieldCollection(); |
||||||
|
|
||||||
|
updateField(categoryPane, dataConfig.getCategory()); |
||||||
|
updateField(valuePane, dataConfig.getValue()); |
||||||
|
|
||||||
|
return dataConfig; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,202 @@ |
|||||||
|
package com.fr.plugin.demo; |
||||||
|
|
||||||
|
import com.fanruan.api.cal.FormulaKit; |
||||||
|
import com.fanruan.api.log.LogKit; |
||||||
|
import com.fanruan.api.report.chart.BaseChartWithData; |
||||||
|
import com.fanruan.api.script.FineCanvas; |
||||||
|
import com.fanruan.api.util.AssistKit; |
||||||
|
import com.fanruan.api.util.IOKit; |
||||||
|
import com.fanruan.api.util.StringKit; |
||||||
|
import com.fr.base.BaseFormula; |
||||||
|
import com.fr.base.chart.cross.FormulaProcessor; |
||||||
|
import com.fr.chart.ChartWebParaProvider; |
||||||
|
import com.fr.extended.chart.HyperLinkPara; |
||||||
|
import com.fr.json.JSON; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONFactory; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.stable.xml.XMLPrintWriter; |
||||||
|
import com.fr.stable.xml.XMLableReader; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.awt.Image; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-06 |
||||||
|
*/ |
||||||
|
@FunctionRecorder |
||||||
|
public class DemoChart extends BaseChartWithData { |
||||||
|
|
||||||
|
private static final String ID = "DEMO_CHART"; |
||||||
|
|
||||||
|
private BaseFormula titleFormula = FormulaKit.newFormula(StringKit.EMPTY); |
||||||
|
|
||||||
|
private PieType pieType = PieType.PIE; |
||||||
|
|
||||||
|
private String legendPosition = "left"; |
||||||
|
|
||||||
|
public PieType getPieType() { |
||||||
|
return pieType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPieType(PieType pieType) { |
||||||
|
this.pieType = pieType; |
||||||
|
} |
||||||
|
|
||||||
|
public BaseFormula getTitleFormula() { |
||||||
|
return titleFormula; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTitleFormula(BaseFormula titleFormula) { |
||||||
|
this.titleFormula = titleFormula; |
||||||
|
} |
||||||
|
|
||||||
|
public String getLegendPosition() { |
||||||
|
return legendPosition; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLegendPosition(String legendPosition) { |
||||||
|
this.legendPosition = legendPosition; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Image designImage(int width, int height, int resolution, ChartWebParaProvider chartWebPara) { |
||||||
|
switch (pieType) { |
||||||
|
case PIE: |
||||||
|
return IOKit.readImageWithCache("com/fr/plugin/demo/pieType.png"); |
||||||
|
default: |
||||||
|
return IOKit.readImageWithCache("com/fr/plugin/demo/ringType.png"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Image exportImage(int width, int height, int resolution, ChartWebParaProvider chartWebPara) { |
||||||
|
BufferedImage bufferedImage = new BufferedImage(5, 5, BufferedImage.TYPE_INT_ARGB); |
||||||
|
try { |
||||||
|
FineCanvas canvas = new FineCanvas("/com/fr/plugin/demo/echarts-adapter.js", "/com/fr/plugin/demo/echarts.js"); |
||||||
|
canvas.loadText("canvas.height = " + height, "canvas.width = " + width); |
||||||
|
canvas.loadText("var myChart = echarts.init(canvas)"); |
||||||
|
canvas.loadText("option = " + createAttributeConfig(chartWebPara).toString()); |
||||||
|
canvas.loadText("myChart.setOption(option);"); |
||||||
|
bufferedImage = canvas.paint(); |
||||||
|
} catch (Exception ex) { |
||||||
|
LogKit.error(ex.getMessage(), ex); |
||||||
|
} |
||||||
|
return bufferedImage; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public DemoChart clone() throws CloneNotSupportedException { |
||||||
|
DemoChart result = (DemoChart) super.clone(); |
||||||
|
if (getTitleFormula() != null) { |
||||||
|
result.setTitleFormula(this.getTitleFormula().clone()); |
||||||
|
} |
||||||
|
result.setPieType(this.getPieType()); |
||||||
|
result.setLegendPosition(this.getLegendPosition()); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int hashCode() { |
||||||
|
return super.hashCode() + AssistKit.hashCode(this.getTitleFormula(), this.getPieType(), this.getLegendPosition()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean equals(Object ob) { |
||||||
|
return super.equals(ob) |
||||||
|
&& ob instanceof DemoChart |
||||||
|
&& AssistKit.equals(this.getTitleFormula(), ((DemoChart) ob).getTitleFormula()) |
||||||
|
&& AssistKit.equals(this.getPieType(), ((DemoChart) ob).getPieType()) |
||||||
|
&& AssistKit.equals(this.getLegendPosition(), ((DemoChart) ob).getLegendPosition()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public JSONObject createAttributeConfig(ChartWebParaProvider chartWebPara) { |
||||||
|
JSONObject jsonObject = super.createAttributeConfig(chartWebPara); |
||||||
|
|
||||||
|
jsonObject.put("title", JSONFactory.createJSON(JSON.OBJECT).put("text", getTitleFormula().getResult()).put("x", "center")); |
||||||
|
jsonObject.put("tooltip", JSONFactory.createJSON(JSON.OBJECT).put("trigger", "item").put("formatter", "{b}: {c} ({d}%)")); |
||||||
|
|
||||||
|
DemoColumnFieldCollection columnFieldCollection = getFieldCollection(DemoColumnFieldCollection.class); |
||||||
|
List<Object> category = columnFieldCollection.getCategory().getValues(); |
||||||
|
List<Object> values = columnFieldCollection.getValue().getValues(); |
||||||
|
JSONArray legendData = JSONFactory.createJSON(JSON.ARRAY); |
||||||
|
JSONArray seriesData = JSONFactory.createJSON(JSON.ARRAY); |
||||||
|
for (int i = 0; i < category.size(); i++) { |
||||||
|
legendData.put(category.get(i)); |
||||||
|
seriesData.put(JSONFactory.createJSON(JSON.OBJECT).put("name", category.get(i)).put("value", values.get(i))); |
||||||
|
} |
||||||
|
jsonObject.put("legend", JSONFactory.createJSON(JSON.OBJECT).put("orient", "vertical").put("left", getLegendPosition()).put("data", legendData)); |
||||||
|
JSONObject series = JSONFactory.createJSON(JSON.OBJECT); |
||||||
|
series.put("type", "pie"); |
||||||
|
switch (pieType) { |
||||||
|
case PIE: |
||||||
|
series.put("radius", "55%"); |
||||||
|
break; |
||||||
|
default: |
||||||
|
series.put("radius", JSONFactory.createJSON(JSON.ARRAY).put("35%").put("55%")); |
||||||
|
break; |
||||||
|
} |
||||||
|
series.put("data", seriesData); |
||||||
|
jsonObject.put("series", series); |
||||||
|
return jsonObject; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void dealFormula(FormulaProcessor formulaProcessor) { |
||||||
|
if (titleFormula != null) { |
||||||
|
formulaProcessor.dealWith(titleFormula); |
||||||
|
} |
||||||
|
super.dealFormula(formulaProcessor); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getID() { |
||||||
|
return ID; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void readAttr(XMLableReader xmLableReader) { |
||||||
|
super.readAttr(xmLableReader); |
||||||
|
|
||||||
|
this.setPieType(PieType.parseInt(xmLableReader.getAttrAsInt("pieType", 0))); |
||||||
|
this.setTitleFormula(FormulaKit.newFormula(xmLableReader.getAttrAsString("title", "新建图表标题"))); |
||||||
|
this.setLegendPosition(xmLableReader.getAttrAsString("legendPosition", StringKit.EMPTY)); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void writeAttr(XMLPrintWriter xmlPrintWriter) { |
||||||
|
super.writeAttr(xmlPrintWriter); |
||||||
|
xmlPrintWriter.attr("pieType", pieType.ordinal()) |
||||||
|
.attr("title", titleFormula.toString()) |
||||||
|
.attr("legendPosition", legendPosition); |
||||||
|
} |
||||||
|
|
||||||
|
private static final HyperLinkPara Category = new HyperLinkPara() { |
||||||
|
@Override |
||||||
|
public String getName() { |
||||||
|
return "分类"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getFormulaContent() { |
||||||
|
return "Category"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String[] getProps() { |
||||||
|
return new String[]{"data", "name"}; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
@Override |
||||||
|
protected HyperLinkPara[] hyperLinkParas() { |
||||||
|
return new HyperLinkPara[]{ |
||||||
|
Category, |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.fr.plugin.demo; |
||||||
|
|
||||||
|
import com.fanruan.api.report.chart.field.BaseColumnFieldCollection; |
||||||
|
import com.fr.chartx.data.annotations.KeyField; |
||||||
|
import com.fr.chartx.data.field.ColumnField; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-05 |
||||||
|
*/ |
||||||
|
public class DemoColumnFieldCollection extends BaseColumnFieldCollection { |
||||||
|
|
||||||
|
|
||||||
|
@KeyField |
||||||
|
private ColumnField category = new ColumnField(); |
||||||
|
|
||||||
|
private ColumnField value = new ColumnField(); |
||||||
|
|
||||||
|
public ColumnField getCategory() { |
||||||
|
return category; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCategory(ColumnField category) { |
||||||
|
this.category = category; |
||||||
|
} |
||||||
|
|
||||||
|
public ColumnField getValue() { |
||||||
|
return value; |
||||||
|
} |
||||||
|
|
||||||
|
public void setValue(ColumnField value) { |
||||||
|
this.value = value; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,69 @@ |
|||||||
|
package com.fr.plugin.demo; |
||||||
|
|
||||||
|
import com.fanruan.api.design.DesignKit; |
||||||
|
import com.fanruan.api.design.chart.field.BaseDataSetFieldsPane; |
||||||
|
import com.fanruan.api.design.ui.component.UIComboBox; |
||||||
|
import com.fanruan.api.design.ui.component.chart.CalculateComboBox; |
||||||
|
|
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-05 |
||||||
|
*/ |
||||||
|
public class DemoDataSetFieldsPane extends BaseDataSetFieldsPane<DemoColumnFieldCollection> { |
||||||
|
|
||||||
|
private UIComboBox categoryPane; |
||||||
|
private UIComboBox valuePane; |
||||||
|
private CalculateComboBox calculateComboBox; |
||||||
|
|
||||||
|
public void initComponents() { |
||||||
|
categoryPane = new UIComboBox(); |
||||||
|
valuePane = new UIComboBox(); |
||||||
|
calculateComboBox = new CalculateComboBox(); |
||||||
|
super.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String[] fieldLabels() { |
||||||
|
return new String[]{ |
||||||
|
DesignKit.i18nText("Fine-Plugin_Demo_Category"), |
||||||
|
DesignKit.i18nText("Fine-Plugin_Demo_Value"), |
||||||
|
DesignKit.i18nText("Fine-Plugin_Demo_Summary_Method") |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Component[] fieldComponents() { |
||||||
|
return new Component[]{ |
||||||
|
categoryPane, |
||||||
|
valuePane, |
||||||
|
calculateComboBox |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected UIComboBox[] filedComboBoxes() { |
||||||
|
return new UIComboBox[]{ |
||||||
|
categoryPane, |
||||||
|
valuePane |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(DemoColumnFieldCollection dataConf) { |
||||||
|
populateField(categoryPane, dataConf.getCategory()); |
||||||
|
populateFunctionField(valuePane, calculateComboBox, dataConf.getValue()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public DemoColumnFieldCollection updateBean() { |
||||||
|
DemoColumnFieldCollection dataConfig = new DemoColumnFieldCollection(); |
||||||
|
|
||||||
|
updateField(categoryPane, dataConfig.getCategory()); |
||||||
|
updateFunctionField(valuePane, calculateComboBox, dataConfig.getValue()); |
||||||
|
|
||||||
|
return dataConfig; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package com.fr.plugin.demo; |
||||||
|
|
||||||
|
import com.fr.plugin.transform.ExecuteFunctionRecord; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.stable.fun.impl.AbstractLocaleFinder; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-25 |
||||||
|
*/ |
||||||
|
@FunctionRecorder |
||||||
|
public class DemoLocaleFinder extends AbstractLocaleFinder { |
||||||
|
@Override |
||||||
|
@ExecuteFunctionRecord |
||||||
|
public String find() { |
||||||
|
return "com/fr/plugin/locale/demo"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.fr.plugin.demo; |
||||||
|
|
||||||
|
import com.fanruan.api.design.DesignKit; |
||||||
|
import com.fanruan.api.design.chart.BaseOtherPane; |
||||||
|
import com.fanruan.api.design.ui.component.formula.UIFormulaTextField; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-06 |
||||||
|
*/ |
||||||
|
public class DemoTitlePane extends BaseOtherPane<DemoChart> { |
||||||
|
|
||||||
|
private UIFormulaTextField title; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populate(DemoChart ob) { |
||||||
|
title.populateBean(ob.getTitleFormula().toString()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void update(DemoChart ob) { |
||||||
|
ob.getTitleFormula().setContent(title.updateBean()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
JPanel panel = new JPanel(new BorderLayout(0, 6)); |
||||||
|
title = new UIFormulaTextField(); |
||||||
|
panel.add(title, BorderLayout.CENTER); |
||||||
|
return panel; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return DesignKit.i18nText("Fine-Plugin_Demo_Title"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,62 @@ |
|||||||
|
package com.fr.plugin.demo; |
||||||
|
|
||||||
|
import com.fanruan.api.report.chart.BaseChartType; |
||||||
|
import com.fanruan.api.report.chart.BaseChartWithData; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-06 |
||||||
|
*/ |
||||||
|
public class DemoType extends BaseChartType { |
||||||
|
|
||||||
|
/** |
||||||
|
* 该种图表所有的图表对象实例,比如柱形图就有堆积柱形图,百分比堆积柱形图等等 |
||||||
|
* |
||||||
|
* @return 所有的图表对象实例 |
||||||
|
*/ |
||||||
|
public BaseChartWithData[] getChartTypes() { |
||||||
|
return new BaseChartWithData[]{ |
||||||
|
createDemoChart(PieType.PIE), |
||||||
|
createDemoChart(PieType.RING) |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 图表在web端展现时需要的JS文件 |
||||||
|
* |
||||||
|
* @return JS文件数组 |
||||||
|
*/ |
||||||
|
public String[] getRequiredJS() { |
||||||
|
return new String[]{ |
||||||
|
"com/fr/plugin/demo/demoWrapper.js", |
||||||
|
"com/fr/plugin/demo/echarts.js" |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 图表在web端展现时需要的CSS文件 |
||||||
|
* |
||||||
|
* @return CSS文件数组 |
||||||
|
*/ |
||||||
|
public String[] getRequiredCss() { |
||||||
|
return new String[]{ |
||||||
|
"com/fr/plugin/demo/demo.css" |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* JS对象名,该对象一般是一个函数,执行后会在给定的dom中绘制图表 |
||||||
|
* |
||||||
|
* @return JS对象名 |
||||||
|
*/ |
||||||
|
public String getWrapperName() { |
||||||
|
return "demoWrapper"; |
||||||
|
} |
||||||
|
|
||||||
|
private DemoChart createDemoChart(PieType pieType) { |
||||||
|
DemoChart demoChart = new DemoChart(); |
||||||
|
demoChart.setPieType(pieType); |
||||||
|
return demoChart; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,56 @@ |
|||||||
|
package com.fr.plugin.demo; |
||||||
|
|
||||||
|
import com.fanruan.api.design.DesignKit; |
||||||
|
import com.fanruan.api.design.chart.DefaultTypePane; |
||||||
|
import com.fanruan.api.design.ui.component.UIButtonGroup; |
||||||
|
import com.fanruan.api.util.StringKit; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-05 |
||||||
|
*/ |
||||||
|
public class DemoTypePane extends DefaultTypePane<DemoChart> { |
||||||
|
private UIButtonGroup buttonGroup = new UIButtonGroup(new String[]{DesignKit.i18nText("Fine-Plugin_Legend_Right"), DesignKit.i18nText("Fine-Plugin_Legend_Left")}); |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String[] getTypeIconPath() { |
||||||
|
return new String[]{ |
||||||
|
"com/fr/plugin/demo/pieType.png", |
||||||
|
"com/fr/plugin/demo/ringType.png" |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected int getSelectIndexInChart(DemoChart chart) { |
||||||
|
return chart.getPieType().ordinal(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void setSelectIndexInChart(DemoChart chart, int index) { |
||||||
|
chart.setPieType(PieType.parseInt(index)); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Component[][] getPaneComponents(JPanel typePane) { |
||||||
|
return new Component[][]{ |
||||||
|
new Component[]{typePane}, |
||||||
|
new Component[]{buttonGroup} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(DemoChart ob) { |
||||||
|
super.populateBean(ob); |
||||||
|
buttonGroup.setSelectedIndex(StringKit.equals("left", ob.getLegendPosition()) ? 0 : 1); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void updateBean(DemoChart ob) { |
||||||
|
super.updateBean(ob); |
||||||
|
ob.setLegendPosition(buttonGroup.getSelectedIndex() == 0 ? "left" : "right"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,64 @@ |
|||||||
|
package com.fr.plugin.demo; |
||||||
|
|
||||||
|
import com.fanruan.api.design.DesignKit; |
||||||
|
import com.fanruan.api.design.chart.BaseChartTypeUI; |
||||||
|
import com.fanruan.api.design.chart.BaseDataPane; |
||||||
|
import com.fanruan.api.design.chart.BaseOtherPane; |
||||||
|
import com.fanruan.api.design.chart.DefaultOtherPane; |
||||||
|
import com.fanruan.api.design.chart.DefaultTypePane; |
||||||
|
import com.fanruan.api.design.chart.SingleDataPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-05 |
||||||
|
*/ |
||||||
|
public class DemoUI extends BaseChartTypeUI { |
||||||
|
|
||||||
|
@Override |
||||||
|
public DefaultTypePane getPlotTypePane() { |
||||||
|
return new DemoTypePane(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BaseDataPane getChartDataPane(AttributeChangeListener listener) { |
||||||
|
return new BaseDataPane(listener) { |
||||||
|
@Override |
||||||
|
protected SingleDataPane createSingleDataPane() { |
||||||
|
return new SingleDataPane(new DemoDataSetFieldsPane(), new DemoCellDataFieldsPane()); |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BaseOtherPane[] getAttrPaneArray(AttributeChangeListener listener) { |
||||||
|
return new BaseOtherPane[]{new DemoTitlePane(), new DefaultOtherPane()}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getIconPath() { |
||||||
|
return "com/fr/plugin/demo/icon.png"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getName() { |
||||||
|
return DesignKit.i18nText("Fine-Plugin_Demo_Chart"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String[] getSubName() { |
||||||
|
return new String[]{ |
||||||
|
DesignKit.i18nText("Fine-Plugin_Pie"), |
||||||
|
DesignKit.i18nText("Fine-Plugin_Ring") |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String[] getDemoImagePath() { |
||||||
|
return new String[]{ |
||||||
|
"com/fr/plugin/demo/pie.png", |
||||||
|
"com/fr/plugin/demo/ring.png" |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.fr.plugin.demo; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2019-09-05 |
||||||
|
*/ |
||||||
|
public enum PieType { |
||||||
|
PIE, |
||||||
|
RING; |
||||||
|
|
||||||
|
public static PieType parseInt(int index) { |
||||||
|
for (PieType type : PieType.values()) { |
||||||
|
if (type.ordinal() == index) { |
||||||
|
return type; |
||||||
|
} |
||||||
|
} |
||||||
|
return PIE; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,4 @@ |
|||||||
|
.demo-style { |
||||||
|
width: 400px; |
||||||
|
height: 300px; |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
!(function () { |
||||||
|
Van.FRChartBridge.demoWrapper = Van.FRChartBridge.AbstractChart.extend({ |
||||||
|
|
||||||
|
_init: function (dom, option) { |
||||||
|
var chart = echarts.init(dom); |
||||||
|
//绑定点击触发超链函数
|
||||||
|
chart.on('click', this.getLinkFun()); |
||||||
|
chart.setOption(option); |
||||||
|
return chart; |
||||||
|
}, |
||||||
|
|
||||||
|
_refresh: function (chart, option) { |
||||||
|
chart.setOption(option); |
||||||
|
}, |
||||||
|
|
||||||
|
_resize: function (chart) { |
||||||
|
chart.resize(); |
||||||
|
}, |
||||||
|
|
||||||
|
_emptyData: function (options) { |
||||||
|
return options.series.data.length === 0; |
||||||
|
} |
||||||
|
}) |
||||||
|
})(); |
@ -0,0 +1,7 @@ |
|||||||
|
var document = { |
||||||
|
createElement: function(element) { |
||||||
|
if (element == 'canvas') { |
||||||
|
return new Canvas(); |
||||||
|
} |
||||||
|
}, |
||||||
|
}; |
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 89 KiB |
After Width: | Height: | Size: 271 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 214 KiB |
@ -0,0 +1,9 @@ |
|||||||
|
Fine-Plugin_Demo_Category=category |
||||||
|
Fine-Plugin_Demo_Value=value |
||||||
|
Fine-Plugin_Demo_Summary_Method=Summary Method |
||||||
|
Fine-Plugin_Demo_Title=Title |
||||||
|
Fine-Plugin_Demo_Chart=Demo Chart |
||||||
|
Fine-Plugin_Legend_Right=left legend |
||||||
|
Fine-Plugin_Legend_Left=right legend |
||||||
|
Fine-Plugin_Pie=Pie |
||||||
|
Fine-Plugin_Ring=Ring |
@ -0,0 +1,9 @@ |
|||||||
|
Fine-Plugin_Demo_Category=category |
||||||
|
Fine-Plugin_Demo_Value=value |
||||||
|
Fine-Plugin_Demo_Summary_Method=Summary Method |
||||||
|
Fine-Plugin_Demo_Title=Title |
||||||
|
Fine-Plugin_Demo_Chart=Demo Chart |
||||||
|
Fine-Plugin_Legend_Right=left legend |
||||||
|
Fine-Plugin_Legend_Left=right legend |
||||||
|
Fine-Plugin_Pie=Pie |
||||||
|
Fine-Plugin_Ring=Ring |
@ -0,0 +1,9 @@ |
|||||||
|
Fine-Plugin_Demo_Category=\u5206\u7C7B |
||||||
|
Fine-Plugin_Demo_Value=\u503C |
||||||
|
Fine-Plugin_Demo_Summary_Method=\u6C47\u603B\u65B9\u5F0F |
||||||
|
Fine-Plugin_Demo_Title=\u6807\u9898 |
||||||
|
Fine-Plugin_Demo_Chart=Demo\u56FE\u8868 |
||||||
|
Fine-Plugin_Legend_Right=\u56FE\u4F8B\u5C45\u5DE6 |
||||||
|
Fine-Plugin_Legend_Left=\u56FE\u4F8B\u5C45\u53F3 |
||||||
|
Fine-Plugin_Pie=\u997C\u56FE |
||||||
|
Fine-Plugin_Ring=\u5706\u73AF\u56FE |
Loading…
Reference in new issue