package loon.utils; public class TreeNode { private final String name; private TArray<TreeNode> children = new TArray<TreeNode>(); public TreeNode() { this("unkown"); } public TreeNode(String name) { this.name = name; } public String getName() { return this.name; } public int getDepth() { int result = 1; TArray<TreeNode> looper = children; while (looper.size > 0) { result = result + 1; TArray<TreeNode> next = new TArray<TreeNode>(); for (TreeNode node : looper) { next.addAll(node.getChildren()); } looper = next; } return result; } public int getWidth() { int result = 0; TArray<TreeNode> looper = children; while (looper.size > 0) { TArray<TreeNode> next = new TArray<TreeNode>(); for (TreeNode node : looper) { if (node.children.size == 0) { result = result + 1; } next.addAll(node.getChildren()); } looper = next; } return (result > 0) ? result : 1; } public int getAll() { int result = 1; TArray<TreeNode> looper = children; while (looper.size > 0) { result = result + looper.size; TArray<TreeNode> next = new TArray<TreeNode>(); for (TreeNode node : looper) { next.addAll(node.getChildren()); } looper = next; } return result; } public void addNode(TreeNode node) { children.add(node); } public TArray<TreeNode> getChildren() { return this.children; } public TreeNode getNode(String name) { TreeNode sbr = null; TArray<TreeNode> looper = children; while (looper.size > 0) { TArray<TreeNode> next = new TArray<TreeNode>(); for (TreeNode node : looper) { if (node.getName().equals(name)) { sbr = node; break; } next.addAll(node.getChildren()); } looper = next; } return sbr; } @Override public boolean equals(Object o) { boolean result = false; if (o == null) { return false; } if (o == this) { return true; } if (o instanceof TreeNode) { TreeNode node = (TreeNode) o; if (this.name.equals(node.getName())) { result = true; } } return result; } @Override public String toString() { StringBuilder sbr = new StringBuilder(); sbr.append("\n" + this.name); sbr.append("\n["); for (TreeNode node : children) { sbr.append(StringUtils.replace(node.toString(), "\n", "\n\t")); } sbr.append("\n]"); return sbr.toString(); } }