在jive论坛中,批量显示数据库对象使用的是迭代器,DatabaseObjectIterator实现了迭代器,是对所有数据库对象的迭代器封装,包括Forum、Thread、Message、Group、User。而IterratorProxy是对于真实的迭代器的又一层代理封装,这层封装在原来的迭代器的基础上又添加了一层权限的控制。
如登陆后看到的所有论坛页面来所,对于论坛的访问代码如此:
for (Iterator iter=myEnv.getForumFactory().forums(); iter.hasNext();) {
Forum forum = (Forum)iter.next();
String forumName = forum.getName();
if (forumName.length() > 18) {
forumName = forumName.substring(0,18) + "..";
}
}
看到myEnv.getForumFactory().forums()的代码,首先去看ForumFactoryProxy中forums的代码,如下:
{
return new IteratorProxy(JiveGlobals.FORUM, factory.forums(),
authorization, permissions);
}
其中factory.forums()的结果是一个论坛对象的迭代器,最后代码如下:
return new DatabaseObjectIterator(JiveGlobals.FORUM, forums, this);
所以myEnv.getForumFactory().forums()可以这样解释:
1 先得到所有的论坛ID
2 用所有的论坛ID集合形成迭代器
3 对以上形成的迭代器加入权限控制,形成添加了权限控制的迭代器。