Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.alogic.xscript.plugins.Tree Maven / Gradle / Ivy
package com.alogic.xscript.plugins;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.alogic.xscript.AbstractLogiclet;
import com.alogic.xscript.ExecuteWatcher;
import com.alogic.xscript.Logiclet;
import com.alogic.xscript.LogicletContext;
import com.alogic.xscript.doc.XsArray;
import com.alogic.xscript.doc.XsObject;
import com.alogic.xscript.doc.json.JsonObject;
import com.anysoft.tree.TreeBuilder;
import com.anysoft.tree.TreeNode;
import com.anysoft.tree.TreeOutput;
import com.anysoft.util.BaseException;
import com.anysoft.util.Properties;
import com.anysoft.util.PropertiesConstants;
/**
* Tree相关插件
* @author yyduan
* @since 1.6.11.58
*
* @version 1.6.12.40 [20190814]
* - 修正递归遍历的问题
*/
public class Tree extends Segment{
protected String cid = "$tree";
public Tree(String tag, Logiclet p) {
super(tag, p);
}
@Override
public void configure(Properties p){
super.configure(p);
cid = PropertiesConstants.getString(p,"cid",cid,true);
}
@Override
protected void onExecute(XsObject root,XsObject current, LogicletContext ctx, ExecuteWatcher watcher) {
TreeBuilder builder = new TreeBuilder.Default();
try{
ctx.setObject(cid, builder);
super.onExecute(root, current, ctx, watcher);
}finally{
ctx.removeObject(cid);
}
}
/**
* 向树中增加节点
* @author yyduan
*
*/
public static class Node extends AbstractLogiclet{
protected String pid = "$tree";
protected String $id;
protected String $parentId = "0";
protected String $data;
public Node(String tag, Logiclet p) {
super(tag, p);
}
@Override
public void configure(Properties p){
super.configure(p);
pid = PropertiesConstants.getString(p,"pid",pid,true);
$id = PropertiesConstants.getRaw(p,"id",$id);
$parentId = PropertiesConstants.getRaw(p,"parent",$parentId);
$data = PropertiesConstants.getRaw(p,"data",$data);
}
@Override
protected void onExecute(XsObject root,XsObject current, LogicletContext ctx, ExecuteWatcher watcher) {
TreeBuilder builder = ctx.getObject(pid);
if (builder != null){
String id = PropertiesConstants.transform(ctx, $id, "");
if (StringUtils.isNotBlank(id)){
String parent = PropertiesConstants.transform(ctx, $parentId, "0");
String data = PropertiesConstants.transform(ctx, $data, "");
builder.addTreeNode(new TreeNode.Default(id,parent,data));
}
}
}
}
/**
* 输出树
* @author yyduan
*
*/
public static class Output extends Segment{
protected String pid = "$tree";
protected String $parentId = "0";
protected String $depth = "2";
protected String itemTag = "items";
public Output(String tag, Logiclet p) {
super(tag, p);
}
@Override
public void configure(Properties p){
super.configure(p);
pid = PropertiesConstants.getString(p,"pid",pid,true);
itemTag = PropertiesConstants.getString(p,"tag",itemTag,true);
$parentId = PropertiesConstants.getRaw(p,"parent",$parentId);
$depth = PropertiesConstants.getRaw(p,"depth",$depth);
}
protected void onSuperExecute(XsObject root,XsObject current, LogicletContext ctx, ExecuteWatcher watcher) {
List list = children;
for (int i = 0 ; i < list.size(); i ++){
Logiclet logiclet = list.get(i);
if (logiclet != null){
logiclet.execute(root,current,ctx,watcher);
}
}
}
@Override
protected void onExecute(final XsObject root,final XsObject current, final LogicletContext ctx, final ExecuteWatcher watcher) {
TreeBuilder builder = ctx.getObject(pid);
final Output self = this;
if (builder != null){
builder.build(PropertiesConstants.transform(ctx, $parentId, "0"), new TreeOutput(){
@Override
public Object rootFound(String id) {
return current;
}
@Override
public Object nodeFound(Object cookies,
TreeNode node, int depth) {
XsObject parent = (XsObject)cookies;
XsArray list = parent.getArrayChild(itemTag, true);
XsObject newChild = list.newObject();
ctx.SetValue("$tree-id", node.getId());
ctx.SetValue("$tree-parent", node.getParentId());
ctx.SetValue("$tree-data", node.getData());
self.onSuperExecute(root, newChild, ctx, watcher);
list.add(newChild);
return newChild;
}
}, PropertiesConstants.transform(ctx, $depth, 2));
}
}
}
/**
* 树的遍历
* @author yyduan
*
*/
public static class Traverse extends Segment{
protected String itemTag = "items";
public Traverse(String tag, Logiclet p) {
super(tag, p);
}
@Override
public void configure(Properties p){
super.configure(p);
itemTag = PropertiesConstants.getString(p,"tag",itemTag,true);
}
@SuppressWarnings("unchecked")
@Override
protected void onExecute(XsObject root,XsObject current, LogicletContext ctx, ExecuteWatcher watcher) {
if (root instanceof JsonObject){
super.onExecute(root, current, ctx, watcher);
Map jsonCurrent = (Map)current.getContent();
Object items = jsonCurrent.get(itemTag);
if (items != null && items instanceof List){
List list = (List)items;
for (Object item:list){
if (item instanceof Map){
Map map = (Map)item;
onExecute(root, new JsonObject("menu",map),ctx,watcher);
}
}
}
}else{
throw new BaseException("core.e1000",String.format("Tag %s does not support protocol %s",this.getXmlTag(),root.getClass().getName()));
}
}
}
}