/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.core.web.dispaly.tree;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 多层树形结构转换器。
*
* 如果由于数据错误,其中一个节点没有父亲节点,则会把该节点挂载到根节点下。
*/
public class LevelTreeParser implements ITreeParser {
public TreeNode parse(Object data) {
@SuppressWarnings("unchecked")
List<ILevelTreeNode> list = (List<ILevelTreeNode>)data; // 继承ILevelTreeNode接口的实体列表
TreeNode root = new TreeNode();
if(list == null || list.isEmpty()) {
return root;
}
Map<Long, TreeNode> treeNodeMap = new HashMap<Long, TreeNode>();
for(ILevelTreeNode entity : list) {
TreeNode treeNode = new TreeNode(entity); // 将实体转换成真正的TreeNode对象
treeNodeMap.put(entity.getId(), treeNode);
}
for(ILevelTreeNode entity : list){
composeTree(root, entity, treeNodeMap);
}
return root;
}
protected void composeTree(TreeNode root, ILevelTreeNode entity, Map<Long, TreeNode> treeNodeMap) {
TreeNode parent = treeNodeMap.get(entity.getParentId());
TreeNode treeNode = treeNodeMap.get(entity.getId());
if(parent == null) {
root.addChild(treeNode);
} else {
parent.addChild(treeNode);
}
}
}