这是一个插件控件的开发示例,实现了一个基于ztree的参数树控件。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

182 lines
5.2 KiB

package com.fr.plugin.widget.ztree.core;
import com.fanruan.api.design.DesignKit;
import com.fanruan.api.net.NetworkKit;
import com.fanruan.api.report.form.CustomWriteAbleRepeatEditor;
import com.fanruan.api.runtime.PluginKit;
import com.fanruan.api.xml.XmlKit;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.general.ModuleContext;
import com.fr.form.ui.WidgetValue;
import com.fr.json.JSONArray;
import com.fr.json.JSONException;
import com.fr.json.JSONObject;
import com.fr.stable.core.NodeVisitor;
import com.fr.web.core.TemplateSessionIDInfo;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLableReader;
import com.fr.script.Calculator;
import com.fr.stable.web.Repository;
import com.fr.form.ui.DataControl;
import javax.servlet.http.HttpServletRequest;
/**
* Created by richie on 15/11/17.
*/
@EnableMetrics
public class ZTree extends CustomWriteAbleRepeatEditor implements DataControl {
private WidgetValue widgetValue;
private ZTreeNode treeNode;
private ZTreeAttr treeAttr = new ZTreeAttr();
@Override
public String getFormatText() {
return null;
}
@Override
public String getDataBindDefaultValue(Calculator calculator) {
return null;
}
/**
* 控件初始值的可能类型
*
* @return 多种类型组成的数组
*/
@Override
public int[] getValueType() {
return new int[]{TYPE_STRING, TYPE_DATABINDING, TYPE_FORMULA};
}
@Override
public String[] supportedEvents() {
return new String[]{AFTEREDIT};
}
@Override
public void setWidgetValue(WidgetValue value) {
widgetValue = value;
}
@Override
public WidgetValue getWidgetValue() {
return widgetValue;
}
public ZTreeNode getTreeNode() {
return treeNode;
}
public void setTreeNode(ZTreeNode treeNode) {
this.treeNode = treeNode;
}
public void setSelectStyle(ZTreeStyle style) {
treeAttr.setCheckStyle(style);
}
public ZTreeStyle getSelectStyle() {
return treeAttr.getCheckStyle();
}
public ZTreeCascade getCascade() {
return treeAttr.getCascade();
}
public void setCascade(ZTreeCascade cascade) {
treeAttr.setCascade(cascade);
}
public int getPopupHeight() {
return treeAttr.getPopupHeight();
}
public void setPopupHeight(int popupHeight) {
treeAttr.setPopupHeight(popupHeight);
}
@Override
public void createValueResult(DataControl widget, Calculator widgetCalculator, JSONObject widgetResult, JSONObject attrSourceCache) {
}
@Override
public String getXType() {
return "ztree";
}
@Override
public JSONObject createJSONConfig(Repository repo, Calculator c, NodeVisitor toFindChart) throws JSONException {
JSONObject conf = super.createJSONConfig(repo, c, toFindChart);
if (treeAttr != null) {
treeAttr.mixConfig(conf);
}
return conf;
}
@Override
public JSONArray createJSONData(TemplateSessionIDInfo sessionIDInfor, Calculator c, HttpServletRequest req) throws Exception {
if (treeNode == null) {
return new JSONArray();
}
// PluginLicense pluginLicense = PluginLicenseManager.getInstance().getPluginLicenseByID(ZTreeConstants.PLUGIN_ID);
if ((PluginKit.isCurrentPluginAvailable() || isDesign())) {
String pv = NetworkKit.getHTTPRequestParameter(req, "pv");
int level = NetworkKit.getHTTPRequestIntParameter(req, "level", ZTreeNode.ROOT_LEVEL);
String text = NetworkKit.getHTTPRequestParameter(req, "text");
String value = NetworkKit.getHTTPRequestParameter(req, "value");
boolean checked = NetworkKit.getHTTPRequestBoolParameter(req, "checked");
ZTreeNode node = treeNode.findNode(level);
if (node != null) {
return node.toJSONArray(c, level, text, value, pv, checked && treeAttr.getCascade().isCascade());
} else {
return new JSONArray();
}
} else {
JSONArray errorMsg = new JSONArray();
errorMsg.put(new JSONObject().put("text", DesignKit.i18nText("Plugin-ZTree_License_Expired")).put("value", DesignKit.i18nText("Plugin-ZTree_License_Expired")));
return errorMsg;
}
}
private boolean isDesign() {
return ModuleContext.isModuleStarted("com.fr.design.module.DesignerModule");
}
@Override
public void readXML(XMLableReader reader) {
super.readXML(reader);
if (reader.isChildNode()) {
String tagName = reader.getTagName();
if (ZTreeNode.XML_TAG.equals(tagName)) {
treeNode = (ZTreeNode) XmlKit.readXMLable(reader);
} else if (ZTreeAttr.XML_TAG.equals(tagName)) {
treeAttr = (ZTreeAttr) XmlKit.readXMLable(reader);
}
}
}
@Override
public void writeXML(XMLPrintWriter writer) {
super.writeXML(writer);
if (treeNode != null) {
XmlKit.writeXMLable(writer, treeNode, ZTreeNode.XML_TAG);
}
if (treeAttr != null) {
XmlKit.writeXMLable(writer, treeAttr, ZTreeAttr.XML_TAG);
}
}
}