[code="java"]
package app;
public class TreeDaoImpl {
public String[] queryData() {
return new String[] { "aaa/ddd/eee",
"aaa/ddd/ooo",
"bbb/sss/xxx",
"eee/sss/aaa",
"aaa/eee/www",
"aaa/bbb/ccc/ddd",
"ccc/eee/www",
"ccc/eee/www/nnn"
};
}
}
[/code]
[code="java"]
package app;
import java.util.List;
import java.util.ArrayList;
public class Node {
private Object data;
private Node parent;
private List children;
public Node() {
children = new ArrayList<Node>();
}
public Node(Object data, Node parent) {
this.data = data;
this.parent = parent;
children = new ArrayList<Node>();
}
public boolean hasChildren() {
return children.size() != 0;
}
public boolean containChildData(Object data) {
return queryChildByData(data) != null;
}
public Node queryChildByData(Object data) {
Node r = null;
for(Node node : children) {
if(node.getData().equals(data)) {
r = node;
break;
}
}
return r;
}
public void addChild(Node node) {
children.add(node);
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getParent() {
return parent;
}
public void setParent(Node parent) {
this.parent = parent;
}
public List<Node> getChildren() {
return children;
}
public void setChildren(List<Node> children) {
this.children = children;
}
}
[/code]
[code="java"]
package app;
public class TreeBuilder {
private TreeDaoImpl dao = new TreeDaoImpl();
private StringBuffer buffer = new StringBuffer();
public Node generateTree() {
String[] data = dao.queryData();
Node root = new Node();
Node parent = null;
for(String e :data) {
String[] s = parseData(e);
parent = root;
if(s != null || s.length > 0) {
for(String f : s) {
Node node = null;
if(parent.containChildData(f)) {
node = parent.queryChildByData(f);
} else {
node = new Node(f, parent);
parent.addChild(node);
}
parent = node;
}
}
}
return root;
}
public String generateHtml(Node root) {
if(root == null) {
return "";
}
privateGenerateHtml(root, root);
return buffer.toString();
}
public void privateGenerateHtml(Node parent, Node root) {
if(parent == root) {
buffer.append("<ul id=\"root\">");
} else {
buffer.append("<ul>");
}
for(int i = 0; i < parent.getChildren().size(); i++) {
Node node = parent.getChildren().get(i);
buffer.append("<li>" + node.getData() + "</li>");
privateGenerateHtml(node, root);
}
buffer.append("</ul>");
}
public String[] parseData(String s) {
String[] result = new String[0];
if(s != null && s.indexOf("/") >= 0) {
result = s.split("/");
}
return result;
}
public static void main(String[] args) {
TreeBuilder tb = new TreeBuilder();
Node root = tb.generateTree();
String s = tb.generateHtml(root);
System.out.println(s);
}
}
[/code]
[code="html"]
[/code]