package com.gmail.dpierron.tools;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class TreeNode {
private Object data;
private String id;
private TreeNode parent;
private List<TreeNode> children;
public TreeNode(String id) {
this(id, null);
}
public TreeNode(String id, Object data) {
super();
this.data = data;
this.id = id;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public boolean isRoot() {
return this instanceof RootTreeNode;
}
public TreeNode getParent() {
return parent;
}
public void setParent(TreeNode parent) {
this.parent = parent;
}
public List<TreeNode> getChildren() {
if (children == null)
children = new LinkedList<TreeNode>();
return children;
}
public void setChildren(List<TreeNode> newChildren) {
this.children = newChildren;
}
public TreeNode getChildWithId(String id) {
for (TreeNode childNode : getChildren()) {
if (childNode.getId().equals(id))
return childNode;
}
return null;
}
public void addChild(TreeNode child) {
if (child == null)
return;
getChildren().add(child);
child.setParent(this);
}
public String getId() {
return id;
}
public void setId(String value) {
this.id = value;
}
public String getIdToRoot() {
return getIdToRoot("_");
}
public String getIdToRoot(String separator) {
List<String> ids = new LinkedList<String>();
TreeNode node = this;
while (node.getParent() != null) {
ids.add(node.getId());
node = node.getParent();
}
Collections.reverse(ids);
return Helper.concatenateList(separator, ids);
}
public String getGuid() {
String guid = getIdToRoot();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < guid.length(); i++) {
char c = guid.charAt(i);
if (Character.isLetterOrDigit(c))
sb.append(c);
else
sb.append('_');
}
return sb.toString();
}
public String toString() {
String base = getIdToRoot("/");
if (getData() == null)
return base;
else
return base + " (" + getData() + ")";
}
}