5 Jive的其他组件技术
Jive是一个比较丰富的知识宝藏,从中可以学习到很多新的实战技巧和具体功能实现方式。前面基本介绍了Jive中的一些主要架构技术,通过这些技术可以基本上掌握Jive论坛系统。
Jive中还有很多非常实用的组件技术和工具库,分析学习可重用技术,可以在自己具体的项目重复使用,大大提高了新系统的开发速度和效率。
5.1 Jive的树形结构
Jive的管理功能中提供了将Jive数据库数据导出到XML文件的管理工具,在这个工具功能实现中,使用了树形结构的遍历技术。
Jive将ForumThread中的第一个ForumMessage作为root ForumMessage,以这个ForumMessage为根节点,每个ForumThread中包含了一套树形结构。
TreeWalker是树形结构的一个抽象接口,代码如下:
public interface TreeWalker {
//根节点
public ForumMessage getRoot();
//获得父节点
public ForumMessage getParent(ForumMessage child)
throws ForumMessageNotFoundException;
//获得子节点
public ForumMessage getChild(ForumMessage parent, int index)
throws ForumMessageNotFoundException;
//获得所有子节点
public Iterator children(ForumMessage parent);
//获得所有的子节点,包括子节点的子节点…
public Iterator recursiveChildren(ForumMessage parent);
//获得一个节点的深度,相对根节点而言
public int getMessageDepth(ForumMessage message);
public int getChildCount(ForumMessage parent);
public int getRecursiveChildCount(ForumMessage parent);
/**
* 返回相对父节点的子节点索引。例如
* <pre>
* 4
* |-- 2
* |-- |-- 1
* |-- |-- 6
* |-- |-- 8
* |-- 5
* </pre>
* getIndexOfChild(4, 2) 将返回0
* getIndexOfChild(4, 5) 将返回1
* getIndexOfChild(2, 1) 将返回0
* getIndexOfChild(2, 6) 将返回1
* getIndexOfChild(2, 8) 将返回2
*/
public int getIndexOfChild(ForumMessage parent, ForumMessage child);
//一个节点是否是叶,叶相对枝来说,叶没有子节点了
public boolean isLeaf(ForumMessage node);
}
DbTreeWalker 是TreeWalker的一个实现,它是将一个ForumThread下所有帖子的ID从数据库中装入LongTree中。一句LongTree的树形结构遍历核心技术实现ForumThread中的帖子结构的遍历。
LongTree类似之前的Cache类,封装了树形结构遍历的核心算法,在LongTree中建立了3个数组long [] keys、char [] leftChildren和char [] rightSiblings






