package com.vci.starter.web.pagemodel; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 树型数据,easyui,extjs,layui通用 * @author weidy * */ public class Tree extends BaseTree implements java.io.Serializable{ /** * 禁止修改这个值 * @serial 序列化值 */ private static final long serialVersionUID = 6886695271635257882L; /** * 构造函数 */ public Tree(){ } /** * 构造函数 * @param oid 主键 * @param text 树节点文本 */ public Tree(String oid, String text){ setOid(oid); setText(text); } /** * 构造函数 * @param oid 主键 * @param text 树节点文本 */ public Tree(String oid, String text,Object o){ setOid(oid); setText(text); setData(o); } /** * 子节点 */ private List children = new ArrayList<>(); /** * 其他的属性 */ private Map attributes = new HashMap<>();//使用平台的话,所有的属性都是String的 /** * 获取主键 * @return 主键的值 */ public String getOid() { return super.getOid(); } /** * 设置主键 * @param oid 主键的值 */ public void setOid(String oid) { super.setOid(oid); } /** * 获取树节点文本 * @return 树节点文本 */ public String getText() { return super.getText(); } /** * 设置树节点文本 * @param text 树节点文本 */ public void setText(String text) { super.setText(text); } /** * 设置编号 * @param id */ public void setId(String id) { super.setId(id); } /** * 获取编号 */ public String getId() { return super.getId(); } /** * 是否叶子节点 * @return true 表示叶子节点 */ public boolean isLeaf() { return super.isLeaf(); } /** * 设置叶子节点 * @param leaf 是否叶子节点 */ public void setLeaf(boolean leaf) { super.setLeaf(leaf); } /** * 是否显示复选框 * @return true表示显示 */ public boolean isShowCheckbox() { return super.isShowCheckbox(); } /** * 设置是否显示复选框 * @param showCheckbox 是否显示复选框 */ public void setShowCheckbox(boolean showCheckbox) { super.setShowCheckbox(showCheckbox); } /** * 是否自动勾选上 * @return true表示需要自动勾选 */ public boolean isChecked() { return super.isChecked(); } /** * 设置是否勾选 * @param checked 是否自动勾选 */ public void setChecked(boolean checked) { super.setChecked(checked); } /** * 获取子节点 * @return 子节点列表 */ public List getChildren() { return this.children; } /** * 设置子节点 * @param children 子节点列表 */ public void setChildren(List children) { this.children = children; } /** * 获取图标 * @return 图标 */ public String getIcon() { return super.getIcon(); } /** * 设置图标 * @param icon 图标 */ public void setIcon(String icon) { super.setIcon(icon); } /** * 获取图标的显示css类 * @return css类的名称 */ public String getIconCls() { return super.getIconCls(); } /** * 设置图标的显示css类 * @param iconCls css类的名称 */ public void setIconCls(String iconCls) { super.setIconCls(iconCls); } /** * 获取上级主键 * @return 上级节点的oid */ public String getParentId() { return super.getParentId(); } /** * 设置上级主键 * @param parentId 上级节点的oid */ public void setParentId(String parentId) { super.setParentId(parentId); } /** * 是否自动展开 * @return true表示自动展开 */ public boolean isExpanded() { return super.isExpanded(); } /** * 设置是否自动展开 * @param expanded 是否自动展开 */ public void setExpanded(boolean expanded) { super.setExpanded(expanded); } /** * 获取链接地址 * @return 链接地址 */ public String getHref() { return super.getHref(); } /** * 设置链接地址 * @param href 链接地址 */ public void setHref(String href) { super.setHref(href); } /** * 获取排序号 * @return 排序号 */ public String getIndex() { return super.getIndex(); } /** * 设置排序号 * @param index 排序号 */ public void setIndex(String index) { super.setIndex(index); } /** * 获取树节点指代的业务数据的所有属性映射 * @return key表示属性的名称,value表示属性的值 */ public Map getAttributes() { return attributes; } /** * 设置树节点指代的业务数据的所有属性映射 * @param attributes key表示属性的名称,value表示属性的值 */ public void setAttributes(Map attributes) { this.attributes = attributes; } /** * 获取上级的节点的名称 * @return 上级的名称 */ public String getParentName() { return super.getParentName(); } /** * 设置上级节点的名称 * @param parentName 上级的名称 */ public void setParentName(String parentName) { super.setParentName(parentName); } public String getParentBtmName() { return super.getParentBtmName(); } public void setParentBtmName(String parentBtmName) { super.setParentBtmName(parentBtmName); } /** * 利用递归将树转换为上下级关系 * @param rootTree 顶层节点 * @param children 子节点 * @return 含有上下级关系的树 */ public static List getChildList(List rootTree, List children){ if(rootTree == null ||rootTree.size() == 0){ if(children !=null && children.size()>0){ rootTree = children.subList(0, children.size()); }else{ return null; } } Tree bt = new Tree(); bt.findChild(rootTree, children); return rootTree; } /** * 查询树的下级 * @param treenode 当前节点 * @param children 其他的节点 */ public void findChild(List treenode, List children){ for (Tree node : treenode) { for (Tree childnode : children) { if (node.getOid().equalsIgnoreCase(childnode.getParentId())) { childnode.setParentName(node.getText()); if(StringUtils.isBlank(childnode.getParentBtmName())){ childnode.setParentBtmName((String)node.getAttributes().getOrDefault("btmname","")); } node.getChildren().add(childnode); } } if (node.getChildren().size()>0) { findChild(node.getChildren(), children); node.setLeaf(false); }else { node.setLeaf(true); } this.getChildren().add(node); } } public Object getData() { return super.getData(); } public void setData(Object data) { super.setData(data); } public int getLevel() { return super.getLevel(); } public void setLevel(int level) { super.setLevel(level); } @Override public String toString() { return "Tree{" + "oid='" + super.getOid() + '\'' + ", text='" + super.getText() + '\'' + ", leaf=" + super.isLeaf() + ", showCheckbox=" + super.isShowCheckbox() + ", checked=" + super.isChecked() + ", children=" + this.getChildren() + ", level=" + super.getLevel() + ", icon='" + super.getIcon() + '\'' + ", iconCls='" + super.getIconCls() + '\'' + ", parentId='" + super.getParentId() + '\'' + ", parentName='" + super.getParentBtmName() + '\'' + ", parentBtmName='" + super.getParentBtmName() + '\'' + ", expanded=" + super.isExpanded() + ", href='" + super.getHref() + '\'' + ", index='" + super.getIndex() + '\'' + ", data=" + super.getData() + ", attributes=" + attributes + '}'; } }