Browse Source

提交demo代码

10.0
LAPTOP-SB56SG4Q\86185 4 years ago
parent
commit
4274f18041
  1. 6
      README.md
  2. 124
      build.gradle
  3. 13
      encrypt.xml
  4. 19
      plugin.xml
  5. 33
      src/main/java/com/tptj/demo/hg/verify/define/provider/Demo.java
  6. 29
      src/main/java/com/tptj/demo/hg/verify/define/provider/DemoResource.java
  7. 86
      src/main/java/com/tptj/demo/hg/verify/define/provider/DemoVerifierEditPane.java
  8. 72
      src/main/java/com/tptj/demo/hg/verify/define/provider/DemoVerifyItem.java
  9. 32
      src/main/java/com/tptj/demo/hg/verify/define/provider/DemoVerifyPane.java
  10. 29
      src/main/java/com/tptj/demo/hg/verify/define/provider/DemoVerifyResult.java
  11. 21
      src/main/resources/com/tptj/demo/hg/verify/define/provider/plugin.js
  12. 82
      verify.cpt

6
README.md

@ -1,3 +1,7 @@
# demo-verify-define-provider # demo-verify-define-provider
校验类型扩展demo示例 校验类型扩展demo示例\
demo生效后,填报属性会增加一种新的校验类型”Demo“\
添加后,除了配置校验公式外,还可以配置一个level数字,(目前只能写1~4 其他会报错)\
不同的level对于前端在校验提示时会显示不同的颜色\
可以直接填报预览附件verify.cpt,点击校验即可

124
build.gradle

@ -0,0 +1,124 @@
apply plugin: 'java'
[compileJava,compileTestJava]*.options*.encoding = 'UTF-8'
ext {
/**
* jar的路径
* 1.jar需要打包到zip中,lib根目录下
* 2.jar仅仅是编译时需要lib下子目录下即可
*/
libPath = "$projectDir/../../webroot/WEB-INF/lib"
/**
* class进行加密保护
*/
guard = false
def pluginInfo = getPluginInfo()
pluginPre = "fine-plugin"
pluginName = pluginInfo.id
pluginVersion = pluginInfo.version
outputPath = "$projectDir/../../webroot/WEB-INF/plugins/plugin-" + pluginName + "-1.0/classes"
}
group = 'com.fr.plugin'
version = '10.0'
sourceCompatibility = '8'
sourceSets {
main {
java.outputDir = file(outputPath)
output.resourcesDir = file(outputPath)
}
}
ant.importBuild("encrypt.xml")
//ant变量
ant.projectDir = projectDir
ant.references["compile.classpath"] = ant.path {
fileset(dir: libPath, includes: '**/*.jar')
fileset(dir: ".",includes:"**/*.jar" )
}
classes.dependsOn('clean')
task copyFiles(type: Copy,dependsOn: 'classes'){
from outputPath
into "$projectDir/classes"
}
task preJar(type:Copy,dependsOn: guard ? 'compile_encrypt_javas' : 'compile_plain_javas'){
from "$projectDir/classes"
into "$projectDir/transform-classes"
include "**/*.*"
}
jar.dependsOn("preJar")
task makeJar(type: Jar,dependsOn: preJar){
from fileTree(dir: "$projectDir/transform-classes")
baseName pluginPre
appendix pluginName
version pluginVersion
destinationDir = file("$buildDir/libs")
doLast(){
delete file("$projectDir/classes")
delete file("$projectDir/transform-classes")
}
}
task copyFile(type: Copy,dependsOn: ["makeJar"]){
from "$buildDir/libs"
from("$projectDir/lib") {
include "*.jar"
}
from "$projectDir/plugin.xml"
into file("$buildDir/temp/plugin")
}
task zip(type:Zip,dependsOn:["copyFile"]){
from "$buildDir/temp/plugin"
destinationDir file("$buildDir/install")
baseName pluginPre
appendix pluginName
version pluginVersion
}
//build时包含哪些文件,
processResources {
// exclude everything
// *.css没效果
// exclude '**/*.css'
// except this file
// include 'xx.xml'
}
/*读取plugin.xml中的version*/
def getPluginInfo(){
def xmlFile = file("plugin.xml")
if (!xmlFile.exists()) {
return ["id":"none", "version":"1.0.0"]
}
def plugin = new XmlParser().parse(xmlFile)
def version = plugin.version[0].text()
def id = plugin.id[0].text()
return ["id":id,"version":version]
}
repositories {
mavenLocal()
maven {
url = uri('http://mvn.finedevelop.com/repository/maven-public/')
}
}
dependencies {
//使jar
implementation fileTree(dir: 'lib', include: ['**/*.jar'])
implementation fileTree(dir: libPath, include: ['**/*.jar'])
}

13
encrypt.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<target name="compile_encrypt_javas" depends="copyFiles">
<echo message="加密文件"/>
<echo message="${projectDir}"/>
<taskdef name="pretreatment" classname="com.fr.plugin.pack.PluginPretreatmentTask">
<classpath refid="compile.classpath"/>
</taskdef>
<pretreatment baseDir="${projectDir}"/>
</target>
<target name="compile_plain_javas" depends="copyFiles">
</target>
</project>

19
plugin.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin>
<id>com.tptj.demo.hg.verify.define.provider.v10</id>
<name><![CDATA[ VerifyDefineProvider ]]></name>
<active>yes</active>
<version>1.0</version>
<env-version>10.0</env-version>
<vendor>tptj</vendor>
<jartime>2019-07-18</jartime>
<description><![CDATA[ ]]></description>
<change-notes><![CDATA[]]></change-notes>
<main-package>com.tptj.demo.hg.verify.define.provider</main-package>
<function-recorder class="com.tptj.demo.hg.verify.define.provider.DemoVerifyItem"/>
<extra-designer>
<VerifyDefineProvider class="com.tptj.demo.hg.verify.define.provider.Demo"/>
</extra-designer>
<extra-decision>
<WebResourceProvider class="com.tptj.demo.hg.verify.define.provider.DemoResource"/>
</extra-decision>
</plugin>

33
src/main/java/com/tptj/demo/hg/verify/define/provider/Demo.java

@ -0,0 +1,33 @@
package com.tptj.demo.hg.verify.define.provider;
import com.fr.data.Verifier;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.fun.impl.AbstractVerifyDefineProvider;
import com.fr.report.write.ValueVerifier;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2021/6/17
**/
public class Demo extends AbstractVerifyDefineProvider {
@Override
public Class<? extends Verifier> classForVerifier() {
return ValueVerifier.class;
}
@Override
public Class<? extends BasicBeanPane> appearanceForVerifier() {
return DemoVerifyPane.class;
}
@Override
public String nameForVerifier() {
return "Demo";
}
@Override
public String iconPath() {
return "/com/fr/web/images/verify.png";
}
}

29
src/main/java/com/tptj/demo/hg/verify/define/provider/DemoResource.java

@ -0,0 +1,29 @@
package com.tptj.demo.hg.verify.define.provider;
import com.fr.decision.fun.impl.AbstractWebResourceProvider;
import com.fr.report.web.ReportMainComponent;
import com.fr.web.struct.Atom;
import com.fr.web.struct.Component;
import com.fr.web.struct.browser.RequestClient;
import com.fr.web.struct.category.ScriptPath;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2021/6/17
**/
public class DemoResource extends AbstractWebResourceProvider {
@Override
public Atom attach() {
return ReportMainComponent.KEY;
}
@Override
public Atom client() {
return new Component() {
@Override
public ScriptPath script(RequestClient client) {
return ScriptPath.build("com/tptj/demo/hg/verify/define/provider/plugin.js");
}
};
}
}

86
src/main/java/com/tptj/demo/hg/verify/define/provider/DemoVerifierEditPane.java

@ -0,0 +1,86 @@
package com.tptj.demo.hg.verify.define.provider;
import com.fr.base.BaseFormula;
import com.fr.base.Formula;
import com.fr.design.gui.itableeditorpane.ActionStyle;
import com.fr.design.gui.itableeditorpane.UIArrayFormulaTableModel;
import com.fr.design.gui.itableeditorpane.UITableEditorPane;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.general.GeneralUtils;
import com.fr.report.write.ValueVerifier;
import com.fr.stable.FormulaProvider;
import com.fr.stable.StableUtils;
import javax.swing.*;
import java.awt.*;
import java.util.List;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2021/6/17
**/
public class DemoVerifierEditPane extends JPanel {
private UITableEditorPane<Object[]> tableEditorPane;
private final String[] columnNames = new String[]{
Toolkit.i18nText("Fine-Design_Report_Formula_Verify"),
Toolkit.i18nText("Fine-Design_Report_Formula_Verify_Warn_Text"),"level"};
public DemoVerifierEditPane(){
this.setLayout(FRGUIPaneFactory.createM_BorderLayout());
tableEditorPane = new UITableEditorPane(new UIArrayFormulaTableModel(columnNames, new int[] {
ActionStyle.ADDSTYLE, ActionStyle.DELETESTYLE,
ActionStyle.MOVEUPSTYLE, ActionStyle.MOVEDOWNSTYLE}));
this.add(tableEditorPane, BorderLayout.CENTER);
}
public void populate(ValueVerifier valueVerifier) {
if (valueVerifier == null) {
return;
}
int rowCount = valueVerifier.getVerifyItemsCount();
Object[][] os = new Object[rowCount][];
int tableDataCount = 0;
for (int i = 0; i < rowCount; i ++) {
DemoVerifyItem item = (DemoVerifyItem)valueVerifier.getVerifyItem(i);
FormulaProvider formula = item.getFormula();
if (formula == null) {
continue;
}
String msg = item.getMessage();
if (!StableUtils.canBeFormula(msg)) {
msg = "\"" + msg + "\"";//如果报错信息是以前的写法(字符串)就拼上""
}
os[tableDataCount++] = new Object[]{
formula,
BaseFormula.createFormulaBuilder().build(msg),
item.getLevel()
};
}
this.tableEditorPane.populate(os);
}
public ValueVerifier update() {
ValueVerifier valueVerifier = new ValueVerifier();
List<Object[]> list = tableEditorPane.update();
for (int i = 0; i < list.size(); i++) {
Object[] o = list.get(i);
if (o == null || o[0] == null) {
continue;
}
int level = 1;
if( o[2] instanceof Formula ){
String cont = ((Formula)o[2]).getPureContent();
level = Integer.parseInt(cont);
}
DemoVerifyItem item = new DemoVerifyItem(
BaseFormula.createFormulaBuilder().build(o[0]),
GeneralUtils.objectToString(o[1]),
level);
valueVerifier.addVerifyItem(item);
}
return valueVerifier;
}
}

72
src/main/java/com/tptj/demo/hg/verify/define/provider/DemoVerifyItem.java

@ -0,0 +1,72 @@
package com.tptj.demo.hg.verify.define.provider;
import com.fr.base.BaseFormula;
import com.fr.data.VerifyItem;
import com.fr.data.VerifyResult;
import com.fr.intelli.record.Focus;
import com.fr.json.JSONException;
import com.fr.json.JSONObject;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLableReader;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2021/6/17
**/
@EnableMetrics
public class DemoVerifyItem extends VerifyItem {
private int level;
public DemoVerifyItem(){}
public DemoVerifyItem(BaseFormula formula, String msg, int level) {
super(formula, msg);
this.level = level;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
@Focus(id="com.tptj.demo.hg.verify.define.provider.v10",text="VerifyDefineProvider")
public VerifyResult createVerifyResult() {
DemoVerifyResult result = new DemoVerifyResult();
try {
result.setFormula( getFormula().clone() );
} catch (CloneNotSupportedException e) {
}
result.setMessage( getMessage() );
result.setLevel( level );
return result;
}
public JSONObject toJSONObjectContent() throws JSONException {
JSONObject jo = super.toJSONObjectContent();
jo.put("level", this.getLevel());
return jo;
}
public void readXML(XMLableReader reader) {
super.readXML(reader);
String tagName = reader.getTagName();
if ("VerifyAttributes".equals(tagName)) {
this.level = reader.getAttrAsInt("level",1);
}
}
public void writeXML(XMLPrintWriter writer) {
super.writeXML(writer);
writer.startTAG("VerifyAttributes").attr("level",level).end();
}
public Object clone() throws CloneNotSupportedException {
DemoVerifyItem cloned = (DemoVerifyItem)super.clone();
cloned.level = this.level;
return cloned;
}
}

32
src/main/java/com/tptj/demo/hg/verify/define/provider/DemoVerifyPane.java

@ -0,0 +1,32 @@
package com.tptj.demo.hg.verify.define.provider;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.report.write.ValueVerifier;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2021/6/17
**/
public class DemoVerifyPane extends BasicBeanPane<ValueVerifier> {
private DemoVerifierEditPane valueVerifierEditPane;
public DemoVerifyPane() {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
this.valueVerifierEditPane = new DemoVerifierEditPane();
this.add(this.valueVerifierEditPane, "Center");
}
@Override
public void populateBean(ValueVerifier ob) {
this.valueVerifierEditPane.populate(ob);
}
@Override
public ValueVerifier updateBean() {
return this.valueVerifierEditPane.update();
}
@Override
protected String title4PopupWindow() {
return "BuiltIn";
}
}

29
src/main/java/com/tptj/demo/hg/verify/define/provider/DemoVerifyResult.java

@ -0,0 +1,29 @@
package com.tptj.demo.hg.verify.define.provider;
import com.fr.data.Verifier;
import com.fr.data.VerifyResult;
import com.fr.json.JSONException;
import com.fr.json.JSONObject;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2021/6/17
**/
public class DemoVerifyResult extends VerifyResult {
private int level;
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
@Override
public void mixJSONObject(JSONObject jo, Verifier.Status status, int reportIndex) throws JSONException {
super.mixJSONObject(jo, status, reportIndex);
jo.put( "level", getLevel() );
}
}

21
src/main/resources/com/tptj/demo/hg/verify/define/provider/plugin.js

@ -0,0 +1,21 @@
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2021/6/17
**/
!(function () {
var LEVEL = ["#E56","#345","#87D","#F00"];
var initPopError = function(){
var old = FR.WritePane.prototype.popupError;
FR.WritePane.prototype.popupError = function(json_array){
old.call(contentPane,json_array);
$.each($(".verify-item-idx0"), function (idx, item) {
$(item).css("background",LEVEL[json_array[idx].level-1]);
});
}
};
FR.Report.Plugin.Panel.Events.push({
name : 'afterload',
action : initPopError
});
})();

82
verify.cpt

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<WorkBook xmlVersion="20170720" releaseVersion="10.0.0">
<Report class="com.fr.report.worksheet.WorkSheet" name="sheet1">
<ReportPageAttr>
<HR/>
<FR/>
<HC/>
<FC/>
</ReportPageAttr>
<ColumnPrivilegeControl/>
<RowPrivilegeControl/>
<RowHeight defaultValue="723900">
<![CDATA[723900,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900]]></RowHeight>
<ColumnWidth defaultValue="2743200">
<![CDATA[2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200,2743200]]></ColumnWidth>
<CellElementList>
<C c="0" r="0">
<O t="I">
<![CDATA[4]]></O>
<PrivilegeControl/>
<Expand/>
</C>
<C c="1" r="0">
<O t="I">
<![CDATA[2]]></O>
<PrivilegeControl/>
<Expand/>
</C>
</CellElementList>
<ReportAttrSet>
<ReportSettings headerHeight="0" footerHeight="0">
<PaperSetting/>
<Background name="ColorBackground" color="-1"/>
</ReportSettings>
</ReportAttrSet>
<ReportWriteAttr>
<TopVerifier class="com.fr.report.write.ValueVerifier">
<name>
<![CDATA[Demo1]]></name>
<VerifyItem class="com.tptj.demo.hg.verify.define.provider.DemoVerifyItem" pluginID="com.tptj.demo.hg.verify.define.provider.v10" plugin-version="1.0">
<O t="XMLable" class="com.fr.base.Formula">
<Attributes>
<![CDATA[=OR(A1=1 , B1 =4)]]></Attributes>
</O>
<message>
<![CDATA[="呵呵哒"]]></message>
<VerifyAttributes level="2"/>
</VerifyItem>
<VerifyItem class="com.tptj.demo.hg.verify.define.provider.DemoVerifyItem" pluginID="com.tptj.demo.hg.verify.define.provider.v10" plugin-version="1.0">
<O t="XMLable" class="com.fr.base.Formula">
<Attributes>
<![CDATA[=A1=1]]></Attributes>
</O>
<message>
<![CDATA[="SSSS"]]></message>
<VerifyAttributes level="3"/>
</VerifyItem>
<VerifyItem class="com.tptj.demo.hg.verify.define.provider.DemoVerifyItem" pluginID="com.tptj.demo.hg.verify.define.provider.v10" plugin-version="1.0">
<O t="XMLable" class="com.fr.base.Formula">
<Attributes>
<![CDATA[=A1=5]]></Attributes>
</O>
<message>
<![CDATA[="ASDASD"]]></message>
<VerifyAttributes level="4"/>
</VerifyItem>
</TopVerifier>
</ReportWriteAttr>
<PrivilegeControl/>
</Report>
<ReportParameterAttr>
<Attributes showWindow="true" delayPlaying="true" windowPosition="1" align="0" useParamsTemplate="true" currentIndex="0"/>
<PWTitle>
<![CDATA[参数]]></PWTitle>
</ReportParameterAttr>
<StyleList/>
<DesignerVersion DesignerVersion="KAA"/>
<PreviewType PreviewType="0"/>
<TemplateIdAttMark class="com.fr.base.iofile.attr.TemplateIdAttrMark">
<TemplateIdAttMark TemplateId="1fc0f370-98b2-4e31-8686-bad4bbce1212"/>
</TemplateIdAttMark>
</WorkBook>
Loading…
Cancel
Save