public class NodeTest{
static class Record{
public Integer id;public String name;public Integer pid;
public Record(Integer id,String name,Integer pid){
this.id = id;this.name = name;this.pid = pid;
}
}
private static final Record[] records = new Record[]{
new Record(new Integer(1),"ROOT",null),
new Record(new Integer(2),"NODE1",new Integer(1)),
new Record(new Integer(3),"NODE2",new Integer(1)),
new Record(new Integer(4),"NODE3",new Integer(1)),
new Record(new Integer(5),"NODE1-1",new Integer(2)),
new Record(new Integer(6),"NODE1-2",new Integer(2)),
new Record(new Integer(7),"NODE1-3",new Integer(2)),
new Record(new Integer(8),"NODE2-1",new Integer(3)),
new Record(new Integer(9),"NODE3-1",new Integer(4)),
new Record(new Integer(10),"NODE3-1-1",new Integer(9)),
new Record(new Integer(11),"NODE3-1-2",new Integer(9)),
new Record(new Integer(12),"NODE4",new Integer(1)),
new Record(new Integer(13),"NODE5",new Integer(1)),
};
public static void main(String args[]){
NodeParser parser = new NodeParser();
for(int i = 0 ; i < records.length; i++){
parser.addNodePath(records[i].id,records[i].name,records[i].pid);
}
Node root = parser.getRootNode();
root.dump();
}
}
class Node {
private Node parent = null;
private ArrayList children = new ArrayList();
private String name;
private Integer id;
public Node(Integer id){
this.id = id;
}
public void setName(String name){this.name = name;}
public String getName(){return name;}
public Integer getId(){return id;}
public void setParent(Node parent){this.parent = parent;}
public Node getParent(){return parent;}
public void addChild(Node child){this.children.add(child);}
public ArrayList getChildren(){return (ArrayList)children.clone();}
public String getPathName(){
return (parent != null)?
parent.getPathName()+"/"+getName():
getName();
}
public void dump(){
System.out.println(getPathName());
for(Iterator iter = children.iterator();iter.hasNext():wink:{
((Node)iter.next()).dump();
}
}
}
class NodeParser{
private HashMap nodemap = new HashMap();
public void addNodePath(Integer id,String name,Integer pid){
Node node = (Node)nodemap.get(id);
if(node == null){
node = new Node(id);
nodemap.put(id,node);
}
node.setName(name);
if(pid == null)return;
Node pnode = (Node)nodemap.get(pid);
if(pnode == null){
pnode = new Node(pid);
nodemap.put(pid,pnode);
}
node.setParent(pnode);
pnode.addChild(node);
}
public Node getRootNode(){
for(Iterator iter = nodemap.values().iterator();iter.hasNext():wink:{
Node node =(Node)iter.next();
if(node.getParent() == null)return node;
}
return null;
}
}
|