这是一个插件控件的开发示例,实现了一个基于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.
 
 
 
 

176 lines
5.1 KiB

package com.fr.plugin.widget.ztree.core;
import com.fanruan.api.i18n.I18nKit;
import com.fanruan.api.json.JSONKit;
import com.fanruan.api.net.NetworkKit;
import com.fanruan.api.report.form.category.TextWidget;
import com.fanruan.api.util.ArrayKit;
import com.fanruan.api.xml.XmlKit;
import com.fr.data.act.Producer;
import com.fr.form.ui.DataControl;
import com.fr.form.ui.concept.data.ValueInitializer;
import com.fr.intelli.record.Focus;
import com.fr.json.JSONArray;
import com.fr.json.JSONObject;
import com.fr.plugin.context.PluginContexts;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.stable.script.CalculatorProvider;
import com.fr.stable.web.Repository;
import com.fr.stable.web.SessionProvider;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLableReader;
import javax.servlet.http.HttpServletRequest;
/**
* Created by richie on 15/11/17.
*/
@EnableMetrics
public class ZTree extends TextWidget implements DataControl, Producer {
private ValueInitializer widgetValue;
private ZTreeNode treeNode;
private ZTreeAttr treeAttr = new ZTreeAttr();
@Override
public String getFormatText() {
return null;
}
@Override
public String getDataBindDefaultValue(CalculatorProvider 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(ValueInitializer value) {
widgetValue = value;
}
@Override
public ValueInitializer 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(CalculatorProvider calculatorProvider, JSONObject jsonObject) {
}
@Override
public String getXType() {
return "ztree";
}
@Override
public String[] dependence(CalculatorProvider calculatorProvider) {
return ArrayKit.EMPTY_STRING_ARRAY;
}
@Override
@Focus(id = "com.fr.plugin.widget.ztree", text = "Plugin-ZTree")
public void mixinJSON(Repository repository, CalculatorProvider calculatorProvider, JSONObject jsonObject) {
if (treeAttr != null) {
treeAttr.mixConfig(jsonObject);
}
}
@Override
public JSONArray createJSONData(SessionProvider session, CalculatorProvider c, HttpServletRequest req) {
if (treeNode == null) {
return JSONKit.createJSONArray();
}
if ((PluginContexts.currentContext().isAvailable())) {
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 = JSONKit.createJSONArray();
errorMsg.put(JSONKit.create().put("text", I18nKit.getLocText("Plugin-ZTree_License_Expired")).put("value", I18nKit.getLocText("Plugin-ZTree_License_Expired")));
return errorMsg;
}
}
@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);
}
}
}