1 package cc.minsnail.tools;
3 import java.lang.reflect.Field;
4 import java.util.ArrayList;
7 import cc.minsnail.annotation.TreeNodeId;
8 import cc.minsnail.annotation.TreeNodeLable;
9 import cc.minsnail.annotation.TreeNodePid;
10 import cc.minsnail.beans.YgTreeNode;
11 import cc.minsnail.beans.YgUserNode;
14 * Created by yg on 2016/10/28.
16 public class TreeHelper {
17 public static <T> List<YgTreeNode> toNode(List<YgUserNode> datas) throws IllegalAccessException {
18 List<YgTreeNode> nodes = new ArrayList<>();
19 for (YgUserNode t : datas) {
20 YgTreeNode node = new YgTreeNode();
21 node.setId(t.getId());
22 node.setPid(t.getPid());
23 node.setJid(t.getJid());
24 node.setUserName(t.getUserName());
25 node.setName(t.getName());
26 // Class clazz = t.getClass();
27 // Field[] fields = clazz.getFields();
28 // for (Field field:fields){
29 // if (field.getAnnotation(TreeNodeId.class)!=null){
30 // field.setAccessible(true);
31 // id = field.getInt(t);
33 // if (field.getAnnotation(TreeNodePid.class)!=null){
34 // field.setAccessible(true);
35 // pid = field.getInt(t);
37 // if (field.getAnnotation(TreeNodeLable.class)!=null){
38 // field.setAccessible(true);
39 // lable = (String) field.get(t);
45 for (int i = 0; i < nodes.size(); i++) {
46 YgTreeNode node1 = nodes.get(i);
47 for (int j = i + 1; j < nodes.size(); j++) {
48 YgTreeNode node2 = nodes.get(j);
49 if (node2.getPid() == node1.getId()) {
50 node1.getChildren().add(node2);
51 node2.setParent(node1);
52 } else if (node1.getPid() == node2.getId()) {
53 node2.getChildren().add(node1);
54 node1.setParent(node2);
61 public static <T> List<YgTreeNode> getSortedNodes(List<YgUserNode> datas, int defaultExpandLevel) throws IllegalAccessException {
62 List<YgTreeNode> result = new ArrayList<>();
63 List<YgTreeNode> nodes = toNode(datas);
64 List<YgTreeNode> rootNodes = getRootNodes(nodes);
65 for (YgTreeNode node : rootNodes) {
66 addNode(result, node, defaultExpandLevel, 1);
71 public static List<YgTreeNode> filterVisibleNodes(List<YgTreeNode> nodes) {
72 List<YgTreeNode> result = new ArrayList<>();
73 for (YgTreeNode node : nodes) {
74 if (node.isRoot() || node.isParentExpand()) {
82 private static void addNode(List<YgTreeNode> result, YgTreeNode node, int defaultExpandLevel, int currentLevel) {
84 if (defaultExpandLevel >= currentLevel) {
87 if (node.isLeaf()) return;
88 for (int i = 0; i < node.getChildren().size(); i++) {
89 addNode(result, node.getChildren().get(i), defaultExpandLevel, currentLevel + 1);
93 private static List<YgTreeNode> getRootNodes(List<YgTreeNode> nodes) {
94 List<YgTreeNode> rootNodes = new ArrayList<>();
95 for (YgTreeNode node : nodes) {