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 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 String oid; /** * 显示文本 */ private String text; /** * 是否叶子 */ private boolean leaf = false; /** * 是否显示复选框 */ private boolean showCheckbox = false; /** * 是否默认选中 */ private boolean checked = false; /** * 子节点 */ private List children = new ArrayList(); /** * 层级 */ private int level; /** * 图标 */ private String icon; /** * 图标样式 */ private String iconCls; /** * 上级节点 */ private String parentId; /** * 上级节点的名称 */ private String parentName; /** * 上级节点的业务类型 */ private String parentBtmName; /** * 是否展开 */ private boolean expanded = false; /** * 链接 */ private String href;//layui和extjs使用href,easyui使用url,统一href /** * 排序索引 */ private String index;//排序索引 /*** * 当前数据对象 */ private Object data; /** * 其他的属性 */ private Map attributes = new HashMap();//使用平台的话,所有的属性都是String的 /** * 获取主键 * @return 主键的值 */ public String getOid() { return oid; } /** * 设置主键 * @param oid 主键的值 */ public void setOid(String oid) { this.oid = oid; } /** * 获取树节点文本 * @return 树节点文本 */ public String getText() { return text; } /** * 设置树节点文本 * @param text 树节点文本 */ public void setText(String text) { this.text = text; } /** * 是否叶子节点 * @return true 表示叶子节点 */ public boolean isLeaf() { return leaf; } /** * 设置叶子节点 * @param leaf 是否叶子节点 */ public void setLeaf(boolean leaf) { this.leaf = leaf; } /** * 是否显示复选框 * @return true表示显示 */ public boolean isShowCheckbox() { return showCheckbox; } /** * 设置是否显示复选框 * @param showCheckbox 是否显示复选框 */ public void setShowCheckbox(boolean showCheckbox) { this.showCheckbox = showCheckbox; } /** * 是否自动勾选上 * @return true表示需要自动勾选 */ public boolean isChecked() { return checked; } /** * 设置是否勾选 * @param checked 是否自动勾选 */ public void setChecked(boolean checked) { this.checked = checked; } /** * 获取子节点 * @return 子节点列表 */ public List getChildren() { return children; } /** * 设置子节点 * @param children 子节点列表 */ public void setChildren(List children) { this.children = children; } /** * 获取图标 * @return 图标 */ public String getIcon() { return icon; } /** * 设置图标 * @param icon 图标 */ public void setIcon(String icon) { this.icon = icon; } /** * 获取图标的显示css类 * @return css类的名称 */ public String getIconCls() { return iconCls; } /** * 设置图标的显示css类 * @param iconCls css类的名称 */ public void setIconCls(String iconCls) { this.iconCls = iconCls; } /** * 获取上级主键 * @return 上级节点的oid */ public String getParentId() { return parentId; } /** * 设置上级主键 * @param parentId 上级节点的oid */ public void setParentId(String parentId) { this.parentId = parentId; } /** * 是否自动展开 * @return true表示自动展开 */ public boolean isExpanded() { return expanded; } /** * 设置是否自动展开 * @param expanded 是否自动展开 */ public void setExpanded(boolean expanded) { this.expanded = expanded; } /** * 获取链接地址 * @return 链接地址 */ public String getHref() { return href; } /** * 设置链接地址 * @param href 链接地址 */ public void setHref(String href) { this.href = href; } /** * 获取排序号 * @return 排序号 */ public String getIndex() { return index; } /** * 设置排序号 * @param index 排序号 */ public void setIndex(String index) { this.index = 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 parentName; } /** * 设置上级节点的名称 * @param parentName 上级的名称 */ public void setParentName(String parentName) { this.parentName = parentName; } public String getParentBtmName() { return parentBtmName; } public void setParentBtmName(String parentBtmName) { this.parentBtmName = 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(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 data; } public void setData(Object data) { this.data = data; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } @Override public String toString() { return "Tree{" + "oid='" + oid + '\'' + ", text='" + text + '\'' + ", leaf=" + leaf + ", showCheckbox=" + showCheckbox + ", checked=" + checked + ", children=" + children + ", level=" + level + ", icon='" + icon + '\'' + ", iconCls='" + iconCls + '\'' + ", parentId='" + parentId + '\'' + ", parentName='" + parentName + '\'' + ", parentBtmName='" + parentBtmName + '\'' + ", expanded=" + expanded + ", href='" + href + '\'' + ", index='" + index + '\'' + ", data=" + data + ", attributes=" + attributes + '}'; } }