📄 zonefactory.java
字号:
/* * 作者: 胡李青 * qq: 31703299 * Copyright (c) 2007 huliqing * 主页 http://www.tbuy.biz/ * 你可以免费使用该软件,未经许可请勿作用于任何商业目的,如有技术问题请与本人联系! */package biz.tbuy.bbs;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Set;import javax.faces.model.SelectItem;import javax.faces.model.SelectItemGroup;/** * @author huliqing * <p><b>qq:</b>31703299 * <p><b>E-mail:</b> * <a href="mailto:huliqing.cn@gmail.com">huliqing.cn@gmail.com</a> * <p><b>Homepage:</b> * <a href="http://www.tbuy.biz/">http://www.tbuy.biz/</a> */public class ZoneFactory extends BBSFactory{ private static ZoneFactory _zoneFactory = new ZoneFactory(); private ZoneFactory() {} /** * 获取ZoneFactory * @return ZoneFactory */ public static ZoneFactory getInstance() { return _zoneFactory; } /** * 获取所有对当前用户可见的专区列表 * @return zones */ public static List<ZoneModel> getZones() { Map<Integer, ZoneModel> zonesMap = getBBSApplication().getZonesMap(); List<ZoneModel> zones = new ArrayList<ZoneModel>(zonesMap.size()); Set<Integer> keys = zonesMap.keySet(); for (Integer key : keys) { ZoneModel zone = zonesMap.get(key); if (!isVisibleZone(zone)) { continue; } zones.add(zone); } return zones; } /** * 获取所有专区下的对当前用户可访问的所有forums * @return forums 对当前用户的所有可访问讨论区 */ public static List<ForumModel> getForums() { List<ZoneModel> zones = ZoneFactory.getZones(); List<ForumModel> forums = new ArrayList<ForumModel>(); for (ZoneModel zone : zones) { ZoneBuilder zBuilder = ZoneFactory.newBuilder(zone.getNum()); if (zBuilder != null) { List<ForumModel> zForums = zBuilder.getForums(); if (zForums != null && !zForums.isEmpty()) { forums.addAll(zForums); } } } return forums; } /** * 获取所有专区下的当前用户可访问的forums,并以SelectItemGroup的形式返回 * @return forums */ public static List<SelectItemGroup> getForumsGroup() { List<SelectItemGroup> forums = new ArrayList<SelectItemGroup>(); List<ZoneModel> zones = ZoneFactory.getZones(); if (!zones.isEmpty()) { for (ZoneModel zone : zones) { SelectItemGroup zoneG = new SelectItemGroup(zone.getName()); ZoneBuilder zBuilder = ZoneFactory.newBuilder(zone.getNum()); List<ForumModel> theForums = zBuilder.getForums(); if (theForums != null && !theForums.isEmpty()) { SelectItem[] items = new SelectItem[theForums.size()]; for (int i = 0; i < theForums.size(); i++) { ForumModel forum = theForums.get(i); items[i] = new SelectItem(forum.getNum(), forum.getName()); } zoneG.setSelectItems(items); forums.add(zoneG); } } } return forums; } /** * 从所有讨论区中获取主题topics信息,按topic主键t_num的desc顺序获取,从start行起 * 数量为size的topics信息,如果获取不到数据则返回null,<br/> * <strong>注意</strong>:只获取用户能够访问的专区及其讨论区下的topics信息 * @param start 获取的起始行 * @param size 获取的数量 * @return topics 所有专区的可访问topics信息,即整个BBS.(一定数量) */ public static List<TopicModel> getTopics(int start, int size) { List<TopicModel> topics = null; List<ForumModel> forums = ZoneFactory.getForums(); // 获取所有可访问讨论区 if (forums != null && !forums.isEmpty()) { int[] fid = new int[forums.size()]; for (int i = 0; i < forums.size(); i++) { fid[i] = forums.get(i).getNum(); } topics = TopicAction.getTopicByForums(fid, start, size); } return topics; } /** * 根据给定的zoneId创建一个ZoneBuilder, 该builer包含相应的zone及其authenticator * 该方法首先判断所要获取的zone是否对当前用户可见,不可见则直接返回null; * <strong>注意</strong>:该方法可能返回null(如果当前用户无权限访问该zone) * @param zoneId * @return zoneBuilder or null */ public static ZoneBuilder newBuilder(int zoneId) { ZoneModel zone = getBBSApplication().getZonesMap().get(zoneId); return isVisibleZone(zone)? new ZoneBuilder(zone, AuthenticatorFactory.createAuthenticator(zone)) : null; } /** * 获得指定zone的最终权限配置信息authModel * @param zone 给定的zone,获取其最终权限配置信息 * @return authModel */ public static AuthModel getFinalAuthModel(ZoneModel zone) { AuthModel auth = getBBSApplication().getZonesAuthMap().get(zone.getNum()); if (auth == null) { auth = new AuthModel(); auth.setBePost(true); auth.setBeReply(true); auth.setBeUpload(true); auth.setVisible(true); } auth.setBeUpload(auth.getBeUpload() && getComApplication().isUpload()); return auth; } /** * 通过给定的zone,获取其原本的权限配置信息,如果并未设置权限,则返回null * @param zone * @return authModel or null */ public static AuthModel getAuthModel(ZoneModel zone) { return getBBSApplication().getZonesAuthMap().get(zone.getNum()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -