📄 dbforum.java
字号:
for (int i=0; i<users.length; i++) {
users[i] = ((Integer)userList.get(i)).intValue();
}
}
catch( SQLException sqle ) {
System.err.println("Error in DbForum.java:" + sqle);
sqle.printStackTrace();
}
finally {
try { pstmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
return users;
}
public void addGroupPermission(Group group, int permissionType)
throws UnauthorizedException
{
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(ADD_GROUP_PERM);
pstmt.setInt(1,id);
pstmt.setInt(2,group.getID());
pstmt.setInt(3,permissionType);
pstmt.execute();
//Remove user permissions from cache since they've changed. Because
//of the way that user perm cache is handled, it is easiest to
//simply remove all the user perm cache for the forum. This is ok
//since happens infrequently.
factory.getCacheManager().remove(
DbCacheManager.USER_PERMS_CACHE,
new Integer(id)
);
}
catch( SQLException sqle ) {
System.err.println("Error in DbForum.java:" + sqle);
sqle.printStackTrace();
}
finally {
try { pstmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
}
public void removeGroupPermission(Group group, int permissionType)
throws UnauthorizedException
{
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(REMOVE_GROUP_PERM);
pstmt.setInt(1,id);
pstmt.setInt(2,group.getID());
pstmt.setInt(3,permissionType);
pstmt.execute();
//Remove user permissions from cache since they've changed. Because
//of the way that user perm cache is handled, it is easiest to
//simply remove all the user perm cache for the forum. This is ok
//since happens infrequently.
factory.getCacheManager().remove(
DbCacheManager.USER_PERMS_CACHE,
new Integer(id)
);
}
catch( SQLException sqle ) {
System.err.println("Error in DbForum.java:" + sqle);
sqle.printStackTrace();
}
finally {
try { pstmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
}
public int[] groupsWithPermission(int permissionType)
throws UnauthorizedException
{
int [] groups = new int[0];
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(GROUPS_WITH_PERM);
pstmt.setInt(1,id);
pstmt.setInt(2,permissionType);
ResultSet rs = pstmt.executeQuery();
ArrayList groupList = new ArrayList();
while (rs.next()) {
groupList.add(new Integer(rs.getInt("groupID")));
}
groups = new int[groupList.size()];
for (int i=0; i<groups.length; i++) {
groups[i] = ((Integer)groupList.get(i)).intValue();
}
}
catch( SQLException sqle ) {
System.err.println("Error in DbForum.groupsWithPermission:" + sqle);
sqle.printStackTrace();
}
finally {
try { pstmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
return groups;
}
public ForumMessage applyFilters(ForumMessage message) {
//Loop through filters and apply them
for (int i=0; i < filters.length; i++) {
message = filters[i].clone(message);
}
return message;
}
public ForumMessageFilter[] getForumMessageFilters()
throws UnauthorizedException
{
ForumMessageFilter [] dbFilters = new ForumMessageFilter[filters.length];
for (int i=0; i<filters.length; i++) {
dbFilters[i] = new DbForumMessageFilter((ForumMessage)filters[i], this);
}
return dbFilters;
}
public void addForumMessageFilter(ForumMessageFilter filter)
throws UnauthorizedException
{
ArrayList newFilters = new ArrayList(filters.length+1);
for (int i=0; i<filters.length; i++) {
newFilters.add(filters[i]);
}
newFilters.add(filter);
ForumMessageFilter[] newArray = new ForumMessageFilter[newFilters.size()];
for (int i=0; i<newArray.length; i++) {
newArray[i] = (ForumMessageFilter)newFilters.get(i);
}
//Finally, overwrite filters with the new array
filters = newArray;
saveFiltersToDb();
}
public void addForumMessageFilter(ForumMessageFilter filter, int index)
throws UnauthorizedException
{
ArrayList newFilters = new ArrayList(filters.length+1);
for (int i=0; i<filters.length; i++) {
newFilters.add(filters[i]);
}
newFilters.add(index, filter);
ForumMessageFilter[] newArray = new ForumMessageFilter[newFilters.size()];
for (int i=0; i<newArray.length; i++) {
newArray[i] = (ForumMessageFilter)newFilters.get(i);
}
//Finally, overwrite filters with the new array
filters = newArray;
saveFiltersToDb();
}
public void removeForumMessageFilter(int index)
throws UnauthorizedException
{
ArrayList newFilters = new ArrayList(filters.length);
for (int i=0; i<filters.length; i++) {
newFilters.add(filters[i]);
}
newFilters.remove(index);
ForumMessageFilter[] newArray = new ForumMessageFilter[newFilters.size()];
for (int i=0; i<newArray.length; i++) {
newArray[i] = (ForumMessageFilter)newFilters.get(i);
}
//Finally, overwrite filters with the new array
filters = newArray;
saveFiltersToDb();
}
public ForumPermissions getPermissions(Authorization authorization) {
int userID = authorization.getUserID();
//Get the user perm cache for this forum
Cache userPermCache = (Cache)factory.getCacheManager().get(
DbCacheManager.USER_PERMS_CACHE,
new Integer(id)
);
//Simple case: if cache is turned on and the user is already cached,
//we can simply return the cached permissions.
if (userPermCache != null) {
ForumPermissions permissions =
(ForumPermissions)userPermCache.get(new Integer(userID));
if (permissions != null) {
return permissions;
}
}
//Not so simple case: cache is not turned on or the user permissions
//have not been cached yet.
boolean isAnonymous = (userID == -1);
boolean isUser = !isAnonymous;
ForumPermissions finalPermissions = ForumPermissions.none();
//Step 1 - Get permissions for the User. This includes anonymous
//perms, "special user" perms, and the specific perms for the user.
if (isUser) {
ForumPermissions userPermissions = factory.getUserPermissions(userID, id);
//Combine permissions
finalPermissions = new ForumPermissions(finalPermissions, userPermissions);
}
//Add in anonymous perms.
ForumPermissions anonyPermissions = null;
if (userPermCache != null) {
anonyPermissions = (ForumPermissions)userPermCache.get(new Integer(-1));
}
//Otherwise, do our own lookup.
if (anonyPermissions == null) {
anonyPermissions = factory.getUserPermissions(-1, id);
//Add to cache so it will be there next time.
if (userPermCache != null) {
userPermCache.add(new Integer(-1), anonyPermissions);
}
}
//Combine permissions
finalPermissions = new ForumPermissions(finalPermissions, anonyPermissions);
//If they are a valid user, figure out "any user" permissions.
if (isUser) {
ForumPermissions specialUserPermissions = null;
//Check for cache
if (userPermCache != null) {
specialUserPermissions = (ForumPermissions)userPermCache.get(new Integer(0));
}
//Otherwise, do our own lookup.
if (specialUserPermissions == null) {
specialUserPermissions = factory.getUserPermissions(0, id);
//Add to cache so it will be there next time.
if (userPermCache != null) {
userPermCache.add(new Integer(0), specialUserPermissions);
}
}
//Combine permissions
finalPermissions = new ForumPermissions(finalPermissions, specialUserPermissions);
}
//Step 2 -- get Permissions for all groups the user is in.
int [] groups = ((DbProfileManager)factory.getProfileManager()).getUserGroups(userID);
for (int i=0; i<groups.length; i++) {
ForumPermissions groupPermissions = factory.getGroupPermissions(groups[i], id);
finalPermissions = new ForumPermissions(finalPermissions, groupPermissions);
}
//Finally, add user to cache so it will be there next time.
if (isUser && userPermCache != null) {
userPermCache.add(new Integer(userID), finalPermissions);
}
return finalPermissions;
}
public boolean hasPermission(int type) {
return true;
}
//FROM THE CACHEABLE INTERFACE//
public int getSize() {
//Approximate the size of the object in bytes by calculating the size
//of each field.
int size = 0;
size += CacheSizes.sizeOfObject(); //overhead of object
size += CacheSizes.sizeOfInt(); //id
size += CacheSizes.sizeOfString(name); //name
size += CacheSizes.sizeOfString(description); //description
size += CacheSizes.sizeOfDate(); //creation date
size += CacheSizes.sizeOfDate(); //modified date
size += CacheSizes.sizeOfInt(); //moderated
size += filters.length * 8; //each filter is 8 bytes
size += CacheSizes.sizeOfProperties(properties);//properties object
size += CacheSizes.sizeOfObject(); //save lock
return size;
}
//OTHER METHODS
/**
* Returns a String representation of the Forum object using the forum name.
*
* @return a String representation of the Forum object.
*/
public String toString() {
return name;
}
public int hashCode() {
return id;
}
public boolean equals(Object object) {
if (this == object) {
return true;
}
if (object != null && object instanceof DbForum) {
return id == ((DbForum)object).getID();
}
else {
return false;
}
}
/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -